cancel
Showing results for 
Search instead for 
Did you mean: 

Receiver Determination Condition not working at runtime

mandar
Explorer
0 Kudos

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

Accepted Solutions (1)

Accepted Solutions (1)

markangelo_dihiansan
Active Contributor
0 Kudos

Hi Mandar,

Have you tried not selecting a software component version in receiver determination and entering the conditions manually?

Regards,
Mark

mandar
Explorer
0 Kudos

Hi Mark,

I will try this and update you with result.

Thanks,

Mandar

former_member184720
Active Contributor
0 Kudos

Hi Mandar - Also did you select the valid operation in the condition editor

How to determine receiver system in case of multiple operations? - Process Integration - SCN Wiki

mandar
Explorer
0 Kudos

We are using standard Outbound SI with single valid operation.

mandar
Explorer
0 Kudos

Thanks Mark. I tried your suggested solution and it is working, but i encountered new issue now.


There are 3 interfaces triggered at same time from SAP ISU into PI. For first two i have manual condition and it is working. For last message where there is only one receiver (Emeter_Demo) and no condition,still at run time at receiver determination step PI is evaluating the conditions and routing message to other receiver (SOA_DEMO). As there is no valid ReceiverAgreement exist for this receiver, message is getting failed into PI.

Receiver Determination trace is as below:

<?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-04-03T10:35:58Z INDIA  </Trace>

</Trace>

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

<Trace level="1" type="T">Message-GUID = 0050569403CE1ED3AEE377A6D36521F7</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 = 0050569403CE1ED3AEE377A6D36521F7</Trace>

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

<Trace level="1" type="T">Queue name : XBTI0001</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 = 0050569403CE1ED3AEE377A6D36521F7</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-04-03T10:35:59Z 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-04-03T10:35:59Z 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-04-03T10:35:59Z 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;//UtilitiesAdvancedMeteringSystemID&quot;)% CE HES </Trace>

<Trace level="2" type="T">......extracting (old) for Extractor: XP //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">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;//UtilitiesAdvancedMeteringSystemID&quot;)% NE HES </Trace>

<Trace level="2" type="T">......extracting (old) for Extractor: XP //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">No Receiver found behaviour: 0  </Trace>

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

</Trace>

<Trace level="1" type="Timestamp">2014-04-03T10:36:00Z INDIA End of pipeline service processing PLSRVID= PLSRV_RECEIVER_DETERMINATION</Trace>

</Trace>

</SAP:Trace>

Please suggest.

Thanks & Regards,

Mandar

markangelo_dihiansan
Active Contributor
0 Kudos

Hi Mandar,

Would it be okay to post your receiver determination conditions here?

Regards,

Mark

mandar
Explorer
0 Kudos

Please find below RD conditions:

similar manual condition is mentioned in other interface too.

iaki_vila
Active Contributor
0 Kudos

Hi Mandar,

Are you sure that you are generating the tag //UtilitiesAdvancedMeteringSystemID respecting the namespace and the uppercases and lowercases ?

Regards.

mandar
Explorer
0 Kudos

yes it is generating correct.

markangelo_dihiansan
Active Contributor
0 Kudos

Hi Mandar,

Having the conditions = HES and != HES would guarantee that there would only be two receivers to choose from. Maybe you could add in more conditions to determine the third receiver. Are there possible differences between the three receivers?

Regards,

Mark

mandar
Explorer
0 Kudos

Hi Mark,

There are only two receivers (Emeter_Demo & SOA_DEMO).

All three interfaces are different and triggered via standard proxy. Two interfaces have two receivers (Emeter_Demo & SOA_DEMO) and have routing condition (conditions = HES and != HES). One interface has only receiver (Emeter_Demo), so no routing condition required.

So there is no possibility to add more conditions.

I hope i clear your doubt.

Thanks & Regards,

Mandar

mandar
Explorer
0 Kudos

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

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi Mandar,

It sure appears unusual. Please select appropriate SWCV during creation of Receiver determination object and make sure that the prefix is populated with appropriate value (ideally namespace) while maintaining XPath. Refer attached image.

Hope this helps !

Regards

Bibek

Muniyappan
Active Contributor
0 Kudos

Hi,

can you cross check your message type and data type which is used for proxy?


Can you regenerate the proxy and check?


Regards,

Muni.

mandar
Explorer
0 Kudos

We are using standard proxy.