cancel
Showing results for 
Search instead for 
Did you mean: 

Multi Mapping Error

former_member188791
Participant
0 Kudos

Hi Experts ,

I have configured 1 sender and 2 receiver channels(IDOC and RFC) with same business component and when I am sending message I am getting the below Error in MONI:

At least two of the sub messages deal with different Adapter Engine types. Check the channels.

Can any body suggest.

Accepted Solutions (0)

Answers (4)

Answers (4)

Former Member
0 Kudos

Hi Rajiv

The problem is happening because you have used two differernt types of adapter engine.

for IDOC u have used 'Integration Server'

for RFC u have used  'Central adapter engine'

The problem will be solved if you create two operation mapping and two message mapping in ESR.

In the integration directory, for interface determination use condition as below

if cond == 1  then call OM1 for IDOC

if cond == 2  then call OM2 for RFC

former_member188791
Participant
0 Kudos

Hi Indrajit,

I did the same thing by creating two OP and two MM, but it is calling one mapping only,

for example I am Passing two records

Case1

------------

First record to trigger IDOC

Second record to trigger RFC

but it always calling IDOC trigget and ignoring RFC

in another scenrio:

Case 2

-----------

First record RFC trigger

Second record RFC trigget

in this it is calling RFC two times and working as expected.

Case 3

------

First record IDOC trigger

Second record IDOC trigger

in this it is calling IDOC two times and working as expected

Former Member
0 Kudos

Hi Rajiv

I would suggest you to take a look on the conditions that u have specified in interface determination.

Also if possible can u please share the input data and the condition of you interface determination so that I can take a look.

former_member188791
Participant
0 Kudos

Hi Indrjit,

Conditions are maintained correctly,here I am attaching payload and condition:

Payload:

----------

  <?xml version="1.0" encoding="utf-8"?>

<ns:master xmlns:ns="urn:materialmaster">

          <Recordset>

                    <Rec_Type>M</Rec_Type>

                    <CRUD>U</CRUD>

                    <Matcode>901015</Matcode>

                    <Ind>Z</Ind>

                    <Type>ZEIS</Type>

                    <Plant>1000</Plant>

                    <Sorg>1000</Sorg>

                    <Dchannel>10</Dchannel>

                    <Desc>This is Test from PI</Desc>

                    <Uom>EA</Uom>

                    <Taxclass>S</Taxclass>

                    <PC>91000</PC>

                    <GLAssignment>Z1</GLAssignment>

                    <GICG>LEIS</GICG>

                    <PG>101</PG>

                    <OMN>12345</OMN>

                    <ItemCat>LEIS</ItemCat>

                    <DPlant>1000</DPlant>

                    <Channel>Z99</Channel>

                    <DType>Z99</DType>

                    <Supdate>1</Supdate>

          </Recordset>]

          <Recordset>

                    <Rec_Type>M1</Rec_Type>

                    <CRUD>U</CRUD>

                    <Matcode>901015</Matcode>

                    <Ind>Z</Ind>

                    <Type>ZEIS</Type>

                    <Plant>1000</Plant>

                    <Sorg>1000</Sorg>

                    <Dchannel>10</Dchannel>

                    <Desc>This is Test from PI</Desc>

                    <Uom>EA</Uom>

                    <Taxclass>S</Taxclass>

                    <PC>91000</PC>

                    <GLAssignment>Z1</GLAssignment>

                    <GICG>LEIS</GICG>

                    <PG>101</PG>

                    <OMN>12345</OMN>

                    <ItemCat>LEIS</ItemCat>

                    <DPlant>1000</DPlant>

                    <Channel>Z99</Channel>

                    <DType>Z99</DType>

                    <Supdate>1</Supdate>

          </Recordset>

</ns:master>

condition

----------------

(/p1:master/Recordset/Rec_Type = M)   -- Trigger  IDOC

(/p1:master/Recordset/Rec_Type ≠ M)   -- Trigger RFC


Former Member
0 Kudos

Hi Rajiv

For the second record , the type is M1. Can you please change that to other value for example J1

and then test and let me know if same issues or not.

former_member188791
Participant
0 Kudos

No, its not working

Former Member
0 Kudos

Can u pls provide me the screen shot of error message from MONI.

former_member188791
Participant
0 Kudos
former_member188791
Participant
0 Kudos

Hi Group,

Any suggestions on my issue.

gagandeep_batra
Active Contributor
0 Kudos

Hi Rajiv,

I think your problem can solved by ERD,

Check below thread that may help:

http://scn.sap.com/thread/3286784

Regards

Gagan

former_member188791
Participant
0 Kudos

Hi Gagandeep,

I am not sure what is meaning of ERD> do you mean ECC system name?

and regarding your link , its completly different to my case, in my case the target system is same for both IDOC and RFC ,in that there two different receiver system, so it will not applicable

iaki_vila
Active Contributor
0 Kudos

HI Rajiv,

I dont know if the multimapping suppports two different receivers type, i haven't see any example, but im thinking if you are using idoc from abap engine and RFC from adapter engine it will be so difficult to works in the branch step, are you using idoc_aae?

Regards.

former_member188791
Participant
0 Kudos

Hi Inaki,

I am not using IDOC_AAE , if multi mapping not supports two different receivers is there any way I can achieve my below requirement:

1. I need to store PI mapping Errors(Mandatory field check) to Custom table in ECC and all the valid records needs  to map to IDOC .

former_member188791
Participant
0 Kudos

Hi Group,

Any Suggestions on my above issue

gagandeep_batra
Active Contributor
0 Kudos

Hi Rajiv,

I have one more doubt on your logic?

1.How you trigger multiple idoc did you change the IDOC  occurance in  mapping after downloading it to local and upload as extenal defination

2.  i have another doubt  in your condition of "Rec_Type=M" becaue it may or may not check for second occurance of Rec_Type that is why it may fail

(/p1:master/Recordset/Rec_Type = M)

for that you can go for mult-mapping rather then define condtion in ID(interface determination)

define in itself mapping and create require structure

Or other option is define a parameter  Rec_Type with spaical value which define it have

ex:

RI for RFC & IDOC both

R for only RFC

I for only IDOC

and in interface determination  put condtion like

if Rec_Type = RI or Rec_Type=R then call  RFC mapping

if RecType = RI or Rec_Type= I then call  IDOC mapping

Regards

Gagan

Former Member
0 Kudos

Hi,

As you want to update a Ztable in ECC for found mapping errors, AND to create IDoc in ECC (also!!).

May I suggest you this flow:

  1. in ECC, defined a ZIDoc : generic idoc to collect all your error + data you want to store in your Ztable
  2. in PI, use one Multi-mapping with one sender interface and two receiver interface
    1. receiver 1 = your standard Idoc (with good data)
    2. receiver 2 = your specific idoc (with rejected data)
  3. As both receivers are using IDoc adapter, you will not have your current issue !

Other solution:

  1. in PI, use a normal mapping with one sender interface and one receiver interface
    1. receiver = your standard Idoc (with good data)
    2. but... use a RFCLookup inside your mapping to update this Ztable stored in ECC.
  2. be careful on perf.
  3. be careful to manage properly exception, coz if your RFC connection from PI to ECC is down, your error message could be not stored in your Ztable

Does your control are only on mandatory data ?

if yes, why you don't this mandatory fields as mandatory in your souce file ? (flat file or XML)

regards.

Mickael

former_member188791
Participant
0 Kudos

Hi Mackael,

Thank you for your response, it seems option 1 looks better over options 2.

>>>Does your control are only on mandatory data ?

>>>if yes, why you don't this mandatory fields as mandatory in your souce file ? (flat file or XML)

Yes control is only on mandatory data , if I use mandatory option on source file it will reject whole file if any one record fails, I need to skip error records and process the correct one.

In your option 1 do I need to createZ custom IDOC with custom process code and RFC fucntion module linked with it.

former_member188791
Participant
0 Kudos

Mickale,

whole point in storing Error records in cutom table is ,I need to collect all IDOC Errors (ECC) and PI Errors and send it through Email .

Is there any better way we can do this, instead of storing in table?

Former Member
0 Kudos

yes, usually we have to have a ZFunctionModule (ZFM) beside a Zidoc type.

in your case, as it's to have only error... well this error info + relevant business data could be put in your Zidoc itself, and maybe you can avoid to have abap code inside this ZFM... maybe...

what you can do it's (in addition to your N std idocs) to create only ONE Zidoc per file with ALL erroneous data (so several segments per rejected lines), and then in ECC, inside this ZFM of this Zidoc, you can send directly your email with all the collected errors (all segment). So no need to have  Ztable !!

is that better ? for me, yes.

Note: do not forget also to send in this ZIdoc the source filename (easy to get from DynamicConfiguration).

regards

Mickael

former_member188791
Participant
0 Kudos

Mickael,

How I can create one Z IDOC in my mapping ,because due to the mapping condition every record will check and create either standart IDOC or Error IDOC for that partiular record, how I can get control to create one IDOC for all Errors.

Former Member
0 Kudos

Manage Context !

former_member188791
Participant
0 Kudos

Hi Michael,

Thank you , one more question how I can append ECC side (standard IDOC posting) Errors in my custom IDOC? any idea

iaki_vila
Active Contributor
0 Kudos

Hi Rajiv,

Another solution is to create a Z RFC to wrap the IDOC in the ECC endpoint.

Regards.

markangelo_dihiansan
Active Contributor
0 Kudos

Hello Rajiv,

Mickael is right. You have to use BPM for your scenario or use an RFC Lookup in mapping to trigger the RFC scenario (not recommended).

Regards,

Mark

Former Member
0 Kudos

Hi,

not sure you can achieve it by a simple multi-mapping, because IDoc is asynchronous, whereas RFC is usually synchronous as it return either Exception or a status or a BapiReturn table...

so in my mind, in addition to having different adapter type, you have also different process mode Asynch / Synch...Not possible for a multi-mapping in my mind...

regards.

Mickael