Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

Receiver Determination Condition not working at runtime

Hi Experts,

We are using SAP PI 7.1 System. There are 3 interfaces, where sender is SAP ISU (via standard proxy) and receivers are MDM and SOA (via webservice).

To decide the receiver, we implemented the XPATH conditions.

/p1:UtilitiesDeviceERPSmartMeterLocationNotification/UtilitiesDevice/SmartMeter/UtilitiesAdvancedMeteringSystemID = HES

message should go to MDM

/p1:UtilitiesDeviceERPSmartMeterLocationNotification/UtilitiesDevice/SmartMeter/UtilitiesAdvancedMeteringSystemID != HES (not equal to HES)

message should go to SOA

When i test this through integration engine it is working as expected.

But when i test this end-to-end, the above condition root get changed at runtime.

CPA Cache Refresh and SXI_Cache done multiple times, after cache refresh interface works for few hours and then issue pops up again.

For ex: message is for UtilitiesDeviceERPSmartMeterLocationNotification interface.

Please find below receiver determination trace for same message, where root of the condition changed at runtime to UtilitiesDeviceERPSmartMeterRegisterCreateRequest.

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><!-- Receiver Determination --> <SAP:Trace xmlns:SAP="http://sap.com/xi/XI/Message/30"><Trace level="1" type="T">CL_XMS_MAIN-&gt;DETERMINE_EXT_PID: CENTRAL</Trace>

<Trace level="1" type="T">Party normalization: sender </Trace>

<Trace level="1" type="T">Sender scheme external = </Trace>

<Trace level="1" type="T">Sender agency external = </Trace>

<Trace level="1" type="T">Sender party external = </Trace>

<Trace level="1" type="T">Sender party normalized = </Trace>

<Trace level="3" type="T">##### DG: 0</Trace>

<Trace level="3" type="T">##### TO: 3</Trace>

<Trace level="1" type="B" name="CL_XMS_HTTP_HANDLER-HANDLE_REQUEST"></Trace><!-- ************************************ -->

<Trace level="1" type="T">XMB was called with URL /sap/xi/engine/?type=entry</Trace>

<Trace level="2" type="T">Request Line = POST /sap/xi/engine/?type=entry HTTP/1.0</Trace>

<Trace level="2" type="T">Host = MB3AP1069:50200</Trace>

<Trace level="2" type="T">Server protocol = HTTP/1.0</Trace>

<Trace level="2" type="T">Remote address = 10.212.178.153</Trace>

<Trace level="3" type="T">COMMIT is done by IS ! </Trace>

<Trace level="1" type="B" name="CL_XMS_MAIN-ENTER_XMS">

<Trace level="1" type="T">CL_XMS_MAIN-&gt;DETERMINE_EXT_PID: CENTRAL</Trace>

<Trace level="1" type="T">CL_XMS_MAIN-&gt;DETERMINE_INT_PID: SAP_CENTRAL</Trace>

<Trace level="3" type="T">##### DG: 0</Trace>

<Trace level="3" type="T">##### TO: 3</Trace>

<Trace level="1" type="B" name="CL_XMS_TROUBLESHOOT-ENTER_PLSRV">

<Trace level="3" type="T">No triggers found. OK. </Trace>

</Trace>

<Trace level="3" type="T">system-ID = RX2</Trace>

<Trace level="3" type="T">client = 001</Trace>

<Trace level="3" type="T">language = E</Trace>

<Trace level="3" type="T">user = BASIS</Trace>

<Trace level="1" type="Timestamp">2014-03-11T05:12:50Z INDIA  </Trace>

</Trace>

<Trace level="1" type="B" name="CL_XMS_MAIN-CALL_UC_EXECUTE"></Trace><!-- ************************************ -->

<Trace level="1" type="T">Message-GUID = 0050569403CE1ED3AA9B792DB442C615</Trace>

<Trace level="1" type="T">PLNAME = CENTRAL</Trace>

<Trace level="1" type="T">QOS = EO</Trace>

<Trace level="1" type="B" name="CL_XMS_MAIN-CALL_PIPELINE_ASYNC">

<Trace level="3" type="T">QOS = EO</Trace>

<Trace level="3" type="T">Message-GUID = 0050569403CE1ED3AA9B792DB442C615</Trace>

<Trace level="3" type="T">Generate prefixed queue name </Trace>

<Trace level="1" type="T">Queue name : XBTI0003</Trace>

<Trace level="1" type="T">Generated prefixed queue name = </Trace>

<Trace level="1" type="T">Schedule message in qRFC environment </Trace>

<Trace level="3" type="T">Setup qRFC Scheduler </Trace>

<Trace level="1" type="T">Setup qRFC Scheduler OK! </Trace>

<Trace level="3" type="T">Call qRFC .... MsgGuid = 0050569403CE1ED3AA9B792DB442C615</Trace>

<Trace level="3" type="T">Call qRFC .... Version = 000</Trace>

<Trace level="3" type="T">Call qRFC .... Pipeline = CENTRAL</Trace>

<Trace level="3" type="T">OK. </Trace>

<Trace level="1" type="T">----------------------------------------------------- </Trace>

<Trace level="1" type="T">Going to persist message </Trace>

<Trace level="1" type="T">NOTE: The following trace entries are always lacking </Trace>

<Trace level="1" type="T">- Exit WRITE_MESSAGE_TO_PERSIST </Trace>

<Trace level="1" type="T">- Exit CALL_PIPELINE_ASYNC </Trace>

<Trace level="1" type="T">Async barrier reached. Bye-bye ! </Trace>

<Trace level="1" type="T">----------------------------------------------------- </Trace>

</Trace>

<Trace level="3" type="T">Version number = 000</Trace>

<Trace level="1" type="B" name="CL_XMS_MAIN-WRITE_MESSAGE_TO_PERSIST"></Trace><!-- ************************************ -->

<Trace level="3" type="T">Persisting message Status = 001</Trace>

<Trace level="3" type="T">Message version 000</Trace>

<Trace level="3" type="T">Pipeline CENTRAL</Trace>

<Trace level="1" type="B" name="CL_XMS_MAIN-PERSIST_READ_MESSAGE"></Trace><!-- ************************************ -->

<Trace level="3" type="T">Trace object available again now. OK. </Trace>

<Trace level="3" type="T">Message was read from persist layer. OK. </Trace>

<Trace level="3" type="T">Message properties in XMB object were setup. OK. </Trace>

<Trace level="3" type="ToDo">Make sure we catch exceptions in persist read </Trace>

<Trace level="3" type="ToDo">Tracing obj. not avail. before return of CL_XMS_MAIN-PERSIST_READ_MESSAGE</Trace>

<Trace level="1" type="B" name="PLSRV_XML_VALIDATION_RQ_INB">

<Trace level="1" type="Timestamp">2014-03-11T05:12:50Z INDIA Start of pipeline service processing PLSRVID= PLSRV_XML_VALIDATION_RQ_INB</Trace>

<Trace level="1" type="B" name="CL_XMS_PLSRV_VALIDATION-ENTER_PLSRV">

<Trace level="3" type="T">Pipeline Service = PLSRV_XML_VALIDATION_RQ_INB </Trace>

<Trace level="3" type="T">Skip Inbound Validation =  </Trace>

<Trace level="3" type="T">Skip Outbound Validation =  </Trace>

<Trace level="3" type="T">Area = XML_VALIDATION_INB </Trace>

<Trace level="1" type="T">Reading sender agreement </Trace>

<Trace level="1" type="T">Message does not contain a sender agreement </Trace>

<Trace level="1" type="T">Inbound validation by Integration Engine does not take place </Trace>

</Trace>

<Trace level="1" type="Timestamp">2014-03-11T05:12:50Z INDIA End of pipeline service processing PLSRVID= PLSRV_XML_VALIDATION_RQ_INB</Trace>

</Trace>

<Trace level="1" type="B" name="PLSRV_RECEIVER_DETERMINATION">

<Trace level="1" type="Timestamp">2014-03-11T05:12:51Z INDIA Start of pipeline service processing PLSRVID= PLSRV_RECEIVER_DETERMINATION</Trace>

<Trace level="1" type="B" name="CL_RD_PLSRV-ENTER_PLSRV">

<Trace level="1" type="T">R E C E I V E R - D E T E R M I N A T I O N </Trace>

<Trace level="1" type="T"> Cache Content is up to date </Trace>

<Trace level="2" type="T">Start without given receiver </Trace>

<Trace level="2" type="T">Classic Receiver Determination via Rules. </Trace>

<Trace level="3" type="T">...create rule engine </Trace>

<Trace level="2" type="T">Check conditions for rule line no. 1  </Trace>

<Trace level="3" type="T">...call rule engine for Condition %CL_SAI_SWF_RULE_ENGINE.MSG_GET(MSG=&amp;_MSG&amp;;NSP=&amp;_NSM&amp;;XPATH=&quot;/p1:UtilitiesDeviceERPSmartMeterRegisterCreateRequest/UtilitiesDevice/SmartMeter/UtilitiesAdvancedMeteringSystemID&quot;)% NE HES </Trace>

<Trace level="2" type="T">......extracting (new) for Extractor: XP /p1:UtilitiesDeviceERPSmartMeterRegisterCreateRequest/UtilitiesDevice/SmartMeter/UtilitiesAdvancedMeteringSystemID </Trace>

<Trace level="2" type="T">......extracting values found: 0 </Trace>

<Trace level="2" type="T">......extracting values found: 0 </Trace>

<Trace level="2" type="T">...valid Receiver with Condition:  - SOA_DEMO </Trace>

<Trace level="2" type="T">Check conditions for rule line no. 2  </Trace>

<Trace level="3" type="T">...call rule engine for Condition %CL_SAI_SWF_RULE_ENGINE.MSG_GET(MSG=&amp;_MSG&amp;;NSP=&amp;_NSM&amp;;XPATH=&quot;/p1:UtilitiesDeviceERPSmartMeterRegisterCreateRequest/UtilitiesDevice/SmartMeter/UtilitiesAdvancedMeteringSystemID&quot;)% CE HES </Trace>

<Trace level="2" type="T">......extracting (new) for Extractor: XP /p1:UtilitiesDeviceERPSmartMeterRegisterCreateRequest/UtilitiesDevice/SmartMeter/UtilitiesAdvancedMeteringSystemID </Trace>

<Trace level="2" type="T">......extracting values found: 0 </Trace>

<Trace level="2" type="T">......extracting values found: 0 </Trace>

<Trace level="2" type="T">...invalid Receiver:  - Emeter_Demo </Trace>

<Trace level="2" type="T">No Receiver found behaviour: 0  </Trace>

<Trace level="2" type="T">Number of Receivers:1  </Trace>

</Trace>

<Trace level="1" type="Timestamp">2014-03-11T05:12:51Z INDIA End of pipeline service processing PLSRVID= PLSRV_RECEIVER_DETERMINATION</Trace>

</Trace>

</SAP:Trace>

any input on this would be helpful.

Thanks,

Mandar

Former Member
Former Member replied

Implemented enhanced receiver determination. Do not know if it is the only solution, but this is working as of now without any issues.

0 View this answer in context

Helpful Answer

by
Not what you were looking for? View more on this topic or Ask a question