cancel
Showing results for 
Search instead for 
Did you mean: 

Number Limitation in XPath condition of Interface Determination

nabendu_sen
Active Contributor
0 Kudos

Hi Experts,

I have an existing interface with scenario:

Web Service (Sync) ->> PI ->> RFC 1 (Sync).

Now we have a requirement to call RFC 2 on the basis of <Company Code> (Receiver would be same for both the cases: SAP ECC) when Sender is the also the same Web Service.

Now we have introduced the XPath condition (Company Code == 111) in the Interface Determination and we are successfully able to separate these two RFC flow Mappings for the same Receiver on the basis of  <Company Code>. Now they are asking the same for 170 different company codes.


We are not sure if we maintain 170 Codes as Routing Rule in Interface Determination, whether it could create performance issue.

Note: We want to avoid BPM in this case

Important Point: We are using single Receiver but want to call different Mappings at Runtime.

Please suggest.

Regards,

Nabendu.

Accepted Solutions (0)

Answers (3)

Answers (3)

markangelo_dihiansan
Active Contributor
0 Kudos

Hi Nabendu,

I can only think of one thing, instead of using 170 routing rules, why not just join the xpaths using EX

e.g /Root[companyCode='1111' or companyCode='1122'] EX for interface 1

and /Root[companyCode='2222' or companyCode='2211'] EX for interface 2

that way you only have two conditions.

Regards,

Mark

nabendu_sen
Active Contributor
0 Kudos

Hi Mark,

Thanks for the reply. But I don't see XPath Expression parameter anymore. We are in PI 7.1 EHP 1 SPS 11. Is it obsolete or is there any other way around?

Do I need to insert separately all 170 Company Codes like below? But I can see "EX" operator is still available in the condition editor.

Regards,

Nabendu.

markangelo_dihiansan
Active Contributor
0 Kudos

Hi Nabendu,

It is still around and it is EX. The conditions are inputted in the editor and should look like this:

You just need to update or append the codes into the condition.

Regards,

Mark

nabendu_sen
Active Contributor
0 Kudos

Hi Mark,

I am able to solve this requirement without using ccBPM and making any condition entry at Interface Determination.

I have used two concepts:

1. Used Extended Receiver Determination for Synchronous Interfaces

2. Populating Context Object at Mapping Level (So I am using as Flag, either 1 (RFC1) or 0 (RFC2))

Now, I have maintained 170 different Company Codes in FixValue table within the mapping.

Regards,

Nabendu.

iaki_vila
Active Contributor
0 Kudos

Hi Nabendu,

Exceptional thread, i haven't read these blogs that you've pointed out. I didn't know the possibility of using Sync interfaces in the enhanced receiver determination and neither how to do a dynamic condition for the interface determination, excellent Praveen Gujjeti blog.

Regards and thanks for sharing your final solution.

baskar_gopalakrishnan2
Active Contributor
0 Kudos

you can use enhanced interface determination in this case. Please check this blog...

http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/90dcc6f4-0829-2d10-b0b2-c892473f1...

nabendu_sen
Active Contributor
0 Kudos

Hi Baskar,

This is a Synchronous flow, I don't think that would work for Sync.

Regards,

Nabendu.

iaki_vila
Active Contributor
0 Kudos

Hi Nabendu,

It is great to see you again in the SCN, we miss your posts. I think like you, to maintain to much conditions in the condition editor can be hard task. I was wondering and it not easy to solve, i have thought the next:

1. First possible solution

you could use a web service lookup in this way i think in this:

1. First scenario. You actual scenario but with only two conditions to determine one or another scenario. This will be called in the lookup.

2. Second scenario. The scenario visible for your client, this will be used to determine the value to choose one or another condition, for this you can use a value mapping to determine the set that the company code belongs.

It is no easy solution as well, but there is not exists a "value mapping conditions".

2.Second possible solution

To use cross-reference calls betwenn mappings. Use a first mapping to detemine which second mapping call. Check this document http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/f03df013-289f-2e10-acb9-d1fcf782a...

3. Third possible solution.

Another option could be to make one only mapping and to decide with value mapping what to do, but im afraid you dont like this workaround, me neither.

Hope i can give you any idea.

Regards.

nabendu_sen
Active Contributor
0 Kudos

Hi Inaki,

Its nice to see ideas from you. I appreciate. But as I mentioned, it is a Synchronous scenario. Do you think 1st solution would work. If I am able to call the right Request mapping also, how the Response would work?

Regards,

Nabendu.

iaki_vila
Active Contributor
0 Kudos

Hi Nabendu,

I didn't explain right what i was thinking, my apologizes.

My first idea was

A) SOAP - SOAP sync scenario

B) SOAP  - RFC sync scenario

In A) scenario you do the logic in its mapping (with value mapping or the way that you consider better) to determine the Mapping 1 or the Mapping 2. This scenario has like the receiver the scenario B.

The scenario B (your actual scenario) has a variable (determined in the before mapping) to use inside the condition editor to determine the Mapping 1 or the Mapping 2. Here, you only have two options because the logic of the before scenario decides the Mapping 1 or Mapping 2.

Regards.

nabendu_sen
Active Contributor
0 Kudos

Hi Inaki,

Thanks again. I just took a different approach to solve this. I thought that would take less development effort.

Regards,

Nabendu.