Skip to Content

Hi All,

Recently I had to design a flow in which a message once triggered can have more than one target service interfaces to the same receiver (“ABC” ) with multiplicity “0-unbounded”. Please find the screenshot of the interface determination below:-

blog2A.gif

I checked a few blogs and I realized that the error is because of the following :-

There is more than one message of type “Interface collection” which is being triggered at runtime. Please see the copy of trace below, taken from runtime. Please note the values highlighted in red, yellow and green.

– <Trace level=”1” type=”B” name=”CL_ID_PLSRV-ENTER_PLSRV“>

<Trace level=”1” type=”T“>I N T E R F A C E – 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“>Check conditions for (Inb: Party Srvc If) ABC InterfaceCollection</Trace>

<Trace level=”2” type=”T“>……extracting (new) for Extractor: XP /Z2MMMATMASEXTR006/IDOC/E1MARAM/E1MARCM/WERKS</Trace>

<Trace level=”2” type=”T“>……extracting values found: 5</Trace>

<Trace level=”2” type=”T“>……extracting values found: 5</Trace>

<Trace level=”2” type=”T“>…valid InbIf with Condition: InterfaceCollection</Trace>

<Trace level=”2” type=”T“>Check conditions for (Inb: Party Srvc If) ABC MaterialMaster_StandardBusinessDocument_ABS</Trace>

<Trace level=”2” type=”T“>……extracting (new) for Extractor: XP /Z2MMMATMASEXTR006/IDOC/E1MARAM/MTART</Trace>

<Trace level=”2” type=”T“>……extracting values found: 1</Trace>

<Trace level=”2” type=”T“>……extracting values found: 1</Trace>

<Trace level=”2” type=”T“>…valid InbIf with Condition: MaterialMaster_StandardBusinessDocument_ABS</Trace>

<Trace level=”2” type=”T“>Check conditions for (Inb: Party Srvc If) ABC Z2MMMATMASZ001_Z2MATMAS_Z2MMMATMASEXTR006_ABS</Trace>

<Trace level=”2” type=”T“>……extracting (new) for Extractor: XP /Z2MMMATMASEXTR006/IDOC/E1MARAM/E1MVKEM/VKORG</Trace>

<Trace level=”2” type=”T“>……extracting values found: 3</Trace>

<Trace level=”2” type=”T“>……extracting values found: 3</Trace>

<Trace level=”2” type=”T“>…invalid InbIf: Z2MMMATMASZ001_Z2MATMAS_Z2MMMATMASEXTR006_ABS</Trace>

<Trace level=”2” type=”T“>Check conditions for (Inb: Party Srvc If) ABC E_PRODAT_D96A_ABS</Trace>

<Trace level=”2” type=”T“>……extracting (new) for Extractor: XP /Z2MMMATMASEXTR006/IDOC/E1MARAM/E1MARCM/WERKS</Trace>

<Trace level=”2” type=”T“>……extracting values found: 5</Trace>

<Trace level=”2” type=”T“>……extracting values found: 5</Trace>

<Trace level=”2” type=”T“>…valid InbIf with Condition: E_PRODAT_D96A_ABS</Trace>

<Trace level=”2” type=”T“>Check conditions for (Inb: Party Srvc If) ABC InterfaceCollection</Trace>

<Trace level=”2” type=”T“>……extracting (new) for Extractor: XP /Z2MMMATMASEXTR006/IDOC/E1MARAM/E1MARCM/WERKS</Trace>

<Trace level=”2” type=”T“>……extracting values found: 5</Trace>

<Trace level=”2” type=”T“>……extracting values found: 5</Trace>

<Trace level=”2” type=”T“>……extracting (new) for Extractor: XP /Z2MMMATMASEXTR006/IDOC/E1MARAM/MTART</Trace>

<Trace level=”2” type=”T“>……extracting values found: 1</Trace>

<Trace level=”2” type=”T“>……extracting values found: 1</Trace>

<Trace level=”2” type=”T“>……extracting (new) for Extractor: XP /Z2MMMATMASEXTR006/IDOC/E1MARAM/E1MVKEM/VKORG</Trace>

<Trace level=”2” type=”T“>……extracting values found: 3</Trace>

<Trace level=”2” type=”T“>……extracting values found: 3</Trace>

<Trace level=”2” type=”T“>……extracting (new) for Extractor: XP /Z2MMMATMASEXTR006/IDOC/E1MARAM/E1MARCM/MMSTA</Trace>

<Trace level=”2” type=”T“>……extracting values found: 5</Trace>

<Trace level=”2” type=”T“>……extracting values found: 5</Trace>

<Trace level=”2” type=”T“>…valid InbIf with Condition: InterfaceCollection</Trace>

</Trace>

</Trace>

<Trace level=”2” type=”System_Error“>Error exception return from pipeline processing!</Trace>

<Trace level=”1” type=”B” name=”CL_XMS_MAIN-WRITE_MESSAGE_TO_PERSIST” />

– <!–

************************************

–>

As you can see, irrespective of whether the target service interface is same or different, if the multiplicity is 0-unbounded, it is seen during runtime as “InterfaceCollection”. And if a message which comes in, satisfies two same service interfaces(the value “valid InbIf” highlighted in green in the trace above), the pipeline goes into error with trace as shown below :-

*****************

<SAP:Error SOAP:mustUnderstand=”1” xmlns:SAP=”http://sap.com/xi/XI/Message/30” xmlns:SOAP=”http://schemas.xmlsoap.org/soap/envelope/“>

<SAP:Category>XIServer</SAP:Category>

<SAP:Code area=”IF_DETERMINATION“>CX_ID_PLSRV</SAP:Code>

<SAP:P1>Inbound interface found several times (for same sender and receiver) for the outbound interface urn:sap-com:document:sap:idoc:messages.Z2MMMATMASZ001.Z2MATMAS.Z2MMMATMASEXTR006</SAP:P1>

<SAP:P2 />

<SAP:P3 />

<SAP:P4 />

<SAP:AdditionalText />

<SAP:Stack>Error when determining the inbound interface: Inbound interface found several times (for same sender and receiver) for the outbound interface urn:sap-com:document:sap:idoc:messages.Z2MMMATMASZ001.Z2MATMAS.Z2MMMATMASEXTR006 Inbound interface found several times (for same sender and receiver) for the outbound interface urn:sap-com:document:sap:idoc:messages.Z2MMMATMASZ001.Z2MATMAS.Z2MMMATMASEXTR006</SAP:Stack>

<SAP:Retry>M</SAP:Retry>

</SAP:Error>

********************

Hence now we needed to perform a work around for this.

What we could NOT opt for were the following due to several client constraints :-

We could not create a business service per interface where the multiplicity is 0-unbounded.

We could not create a multimapping to include all service interfaces of type 0-unbounded.

So here is what we did :-

We created an operation mapping with target 1:1 for that particular interface, and in the interface determination, retrieved that operation mapping . So the interface determination shown in the first screenshot now looked like as shown below:-

/wp-content/uploads/2012/11/blog2bcorrection_160626.gif

Then we again updated the operation mapping as 0-unbounded and activated that mapping. So now though the ESR mapping has target as 0-unbounded the interface determination still sees it as 1:1 interface.

  1. And the best thing is during runtime whenever more than one target message is created, it properly routes it even though the interface determination shows 1:1 target interface. J

Please note that this is a workaround for PI 7.31. I am not sure how it goes along with any other version of PI.

Regards,

Ninu

To report this post you need to login first.

1 Comment

You must be Logged on to comment or reply to a post.

Leave a Reply