cancel
Showing results for 
Search instead for 
Did you mean: 

error : message mapping logic in PI

Former Member
0 Kudos

Dear Team,

Please find the source and target structures..

Source ::

->MT

-->records

--->matnr

--->batch

--->submatnr(s)

Target::

->ZRFC

-->Import

--->Item

-


>matnr

-


>batch

-


>submatnr

1) It is SOAP to RFC scenario. In Source strcuture for one matnr , we have one or more submatnrs.

2)RFC in R/3 contains Import parameters as..matnr,batch,submatnr(onlyone).

3)I want to build mapping - for each submatnr in source I want to create one complete record in target .i.e

if matnr contains 2 submatnrs in source , i want to create 2 records at target side like

first record - matnr,batch,submatnr

second record - matnr,batch,submatnr.

here in both records the matnr and batch values are same , which we have taken from source but submatnrs changed.

Can any body help me how to build mapping.

-Drumi

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi,

submatnr --> removeContext -->Item. This will create one item record for each submatnr.

For duplicating the values of matnr and batch as per the no of submatnrs under that matnr, use function useOneasMany under node functions.

Regards

rajasekhar_reddy14
Active Contributor
0 Kudos

Hi Drumi,

Suppose in your source you have two submatnr, in this case how your Source data looks?

Please paste your data here.

Regards,

Raj

Former Member
0 Kudos

Hi RajaShekar,

If the source contains two submatnrs... the structure is as follows...

->MT

-->Records

--->matnr1

--->batch1

--->submatnr1

--->submatnr2

I want two records at target side...

->RFC

-->Import

--->item1

-


>matnr1

-


>batch1

-


>submatnr1

--->item2

-


>matnr1

-


>batch1

-


>submatnr2

-Drumi

Former Member
0 Kudos

Hi Rajashekar,

A small correction,

->MT

-->Records

--->matnr1

--->batch1

--->submatnr1,submatnr2 etc

-Drumi

rajasekhar_reddy14
Active Contributor
0 Kudos

Hi,

I assumed that submatnr occurance 1 to unbounded...

here is the logic

map

Submatnr----->SplibyValue(ValueChange)-->RemoveContect-->Item
matnr1---->useoneAsmany(1st argument Matnr1,second and third arugument submatnr)--->splitbyValue(EachValue)-->Matnr1.
batch1---->useoneAsmany(1st argument batch11,second and third arugument submatnr)--->splitbyValue(EachValue)-->batch1
submatnr-->removecontext-->splitbyevalue(eachvalue)--->submatnr

Regards,

Raj

rajasekhar_reddy14
Active Contributor
0 Kudos

Input:

<Records>
      <Batch>2</Batch>
      <MATNR>2</MATNR>
      <SUBMATNR>4</SUBMATNR>
      <SUBMATNR>5</SUBMATNR>
   </Records>

Output:

<IMPORT>
      <item>
         <Batch>2</Batch>
         <Matnr>2</Matnr>
         <SubMatnr>4</SubMatnr>
      </item>
      <Item>
         <batch>2</Batch>
         <Matnr>2</Matnr>
         <SubMatnr>5</SubMatnr>
      </item>
   </IMPORT>

Former Member
0 Kudos

Hi Raj,

Its working fine for one record. but its not working for 2,3 recordsetc .

EX::

matnr1

batch1

submatnr

submatnr

submatnr

matnr2

batch2

submatnr

submatnr

submatnr

its giving error like...

"Too many values in the first queue in function useOneAsMany. It must have the same number of contexts as the second queue]"

I have tried to change the contexts ,no luck. UDF required for multiple records.

refer this link for same issue..

Thanks.

-Drumi

Former Member
0 Kudos

Hi Raj,

issue solved with this UDF. built the mapping as mentioned below. now its working fine for multiple records and for multiple submatnr's in same record.

cache:: context

inputs:matnr/batch, submatnr

for(int i=0;i<b.length;i++){

for(int j=0;j<a.length;j++){

result.addValue(a[j]);

}

if(i!=b.length-1){

result.addValue(ResultList.CC);

}

}

to item in target:

submatnr[context in MessageType, not in records]->splitbyvalue[eachvalue]->removecontext->item

to matnr in target:

matnr and submatnr(both in context record )->UDF->matnr

to batch in target:

batch and submatnr(both in context record )->UDF->batch

to submatnr in target:

submatnr[context in MessageType, not in records]->removecontext->splitbyvalue[eachvalue]->submatnr

-Drumi

Former Member
0 Kudos

Thanks Raj.

-Drumi