Author |
Message
|
anilkumar_damodara |
Posted: Wed Jul 19, 2006 5:50 pm Post subject: SAP IDOCs Genarating parser Error |
|
|
Newbie
Joined: 19 Jul 2006 Posts: 3
|
Hi everyone,
My scenario like XML-IDOC my input XML messages I am trying to transforming to IDOC structure I am getting error’s on parser side.
In this case I created MessageSet Project on CWF format. With in the MessageSet project I created Message Definitions for:
1. The SAP Header information purpose mqsaph.mxsd
2. My actual field mapping purpose I created another message definition file
Sap header total length is specified 108,
IDoc message length is specified 1053. as per IBM help mentioned.
My ESQL code looks like this:
CREATE COMPUTE MODULE CMA2SAP_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();
CALL OutputSAPHeaderMessage();
CREATE LASTCHILD OF OutputRoot DOMAIN 'IDOC';
DECLARE CUSTOMERREF REFERENCE TO InputRoot.XMLNSC.CUSTOMER;
IF LASTMOVE(CUSTOMERREF) = TRUE THEN
CALL OutputCustomerMessage();
END IF;
SET OutputRoot.Properties.MessageSet = 'CMA SAP Mset';
SET OutputRoot.Properties.MessageFormat = 'CWF';
SET OutputRoot.Properties.MessageDomain = 'MRM';
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders() BEGIN
DECLARE I INTEGER;
DECLARE J INTEGER;
SET I = 1;
SET J = CARDINALITY(InputRoot.*[]);
WHILE I < J DO
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
CREATE PROCEDURE OutputSAPHeaderMessage() BEGIN
--SET OutputRoot.MQMD.Format = 'MQSAPH';
SET OutputRoot.MRM.MQSAPH.StrucId = 'SAPH';
SET OutputRoot.MRM.MQSAPH.Version = 1;
SET OutputRoot.MRM.MQSAPH.Format = 'MQSTR';
SET OutputRoot.MRM.MQSAPH.Encoding = OutputRoot.MQMD.Encoding;
SET OutputRoot.MRM.MQSAPH.CodedCharSetId = OutputRoot.MQMD.CodedCharSetId;
SET OutputRoot.MRM.MQSAPH.Flags = 0;
SET OutputRoot.MRM.MQSAPH.Client = '100' ;
SET OutputRoot.MRM.MQSAPH.Language = 'E';
SET OutputRoot.MRM.MQSAPH.HostName = '170.38.127.121';
SET OutputRoot.MRM.MQSAPH.UserId = 'karenye';
SET OutputRoot.MRM.MQSAPH.Password = 'germany1';
SET OutputRoot.MRM.MQSAPH.SystemNumber = '04';
SET OutputRoot.MRM.MQSAPH.Reserved = X'0000';
SET OutputRoot.MRM.MQSAPH.FILLER = '';
--SET OutputRoot.MRM.MQSAPH."StrucLength" = 108;
END;
CREATE PROCEDURE OutputCustomerMessage() BEGIN
CALL SetupControlStructure('ZFICUST', 'ZFICUST01');
CALL SetUpDataStructure(1, 'Z1KNA1M');
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.CMAID = InputRoot.XMLNSC.CUSTOMER.CMAID;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.KUNNR = InputRoot.XMLNSC.CUSTOMER.KUNNR;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.KTOKD = InputRoot.XMLNSC.CUSTOMER.KTOKD;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.BUKRS = InputRoot.XMLNSC.CUSTOMER.BUKRS;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.NAME1 = InputRoot.XMLNSC.CUSTOMER.NAME1;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.NAME2 = InputRoot.XMLNSC.CUSTOMER.NAME2;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.NAME3 = InputRoot.XMLNSC.CUSTOMER.NAME3;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.NAME4 = InputRoot.XMLNSC.CUSTOMER.NAME4;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.SORTL = InputRoot.XMLNSC.CUSTOMER.SORTL;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.STRAS = InputRoot.XMLNSC.CUSTOMER.STRAS;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.ORT01 = InputRoot.XMLNSC.CUSTOMER.ORT01;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.ORT02 = InputRoot.XMLNSC.CUSTOMER.ORT02;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.LAND1 = InputRoot.XMLNSC.CUSTOMER.LAND1;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.TELX1 = InputRoot.XMLNSC.CUSTOMER.TELX1;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.KONZS = InputRoot.XMLNSC.CUSTOMER.KONZS;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.AKONT = InputRoot.XMLNSC.CUSTOMER.AKONT;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.KNRZE = InputRoot.XMLNSC.CUSTOMER.KNRZE;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.KVERM = InputRoot.XMLNSC.CUSTOMER.KVERM;
SET OutputRoot.IDOC.DD[1].sdatatag.MRM.FILLER = '';
END;
CREATE PROCEDURE SetupControlStructure(IN messagetype CHARACTER, IN idoctyp CHARACTER) BEGIN
SET OutputRoot.IDOC.DC.tabnam = messagetype; -- Name of table structure
SET OutputRoot.IDOC.DC.mandt = '1'; -- Client
SET OutputRoot.IDOC.DC.docnum = '1'; -- IDoc number
SET OutputRoot.IDOC.DC.docrel = '1'; -- SAP Release for IDoc
SET OutputRoot.IDOC.DC.status = ''; -- Status of IDoc
SET OutputRoot.IDOC.DC.direct = '1'; -- Direction
SET OutputRoot.IDOC.DC.outmod = '4'; -- Output mode
SET OutputRoot.IDOC.DC.exprss = ''; -- Overriding in inbound processing
SET OutputRoot.IDOC.DC.test = ''; -- Test flag
SET OutputRoot.IDOC.DC.idoctyp = idoctyp; -- Name of basic type
SET OutputRoot.IDOC.DC.cimtyp = ''; -- Name of extension type
SET OutputRoot.IDOC.DC.mestyp = ''; -- Logical message type
SET OutputRoot.IDOC.DC.mescod = ''; -- Logical message code
SET OutputRoot.IDOC.DC.mesfct = ''; -- Logical message function
SET OutputRoot.IDOC.DC.std = ''; -- EDI standard, flag
SET OutputRoot.IDOC.DC.stdvrs = ''; -- EDI standard, version and release
SET OutputRoot.IDOC.DC.stdmes = ''; -- EDI message type
SET OutputRoot.IDOC.DC.sndpor = ''; -- Sender port (SAP System, external subsystem)
SET OutputRoot.IDOC.DC.sndprt = ''; -- Partner type of sender
SET OutputRoot.IDOC.DC.sndpfc = ''; -- Partner function of sender
SET OutputRoot.IDOC.DC.sndprn = ''; -- Partner number of sender
SET OutputRoot.IDOC.DC.sndsad = ''; -- Sender address (SADR)
SET OutputRoot.IDOC.DC.sndlad = ''; -- Logical address of sender
SET OutputRoot.IDOC.DC.rcvpor = ''; -- Receiver port (SAP System, external subsystem)
SET OutputRoot.IDOC.DC.rcvprt = ''; -- Partner type of recipient
SET OutputRoot.IDOC.DC.rcvpfc = ''; -- Partner function of recipient
SET OutputRoot.IDOC.DC.rcvprn = ''; -- Partner number of recipient
SET OutputRoot.IDOC.DC.rcvsad = ''; -- Recipient address (SADR)
SET OutputRoot.IDOC.DC.rcvlad = ''; -- Logical address of recipient
SET OutputRoot.IDOC.DC.credat = ''; -- Created on
SET OutputRoot.IDOC.DC.cretim = ''; -- Time created
SET OutputRoot.IDOC.DC.refint = ''; -- Reference to transfer (EDI interchange)
SET OutputRoot.IDOC.DC.refgrp = ''; -- Reference to message group (EDI message group)
SET OutputRoot.IDOC.DC.refmes = ''; -- Reference to message (EDI message)
SET OutputRoot.IDOC.DC.arckey = ''; -- Key for (external) message archive
SET OutputRoot.IDOC.DC.serial = ''; -- Serialization field
END;
CREATE PROCEDURE SetUpDataStructure(IN segnum INTEGER, IN segnam CHARACTER) BEGIN
SET OutputRoot.IDOC.DD[segnum].segnam = segnam; -- Name of SAP segment
SET OutputRoot.IDOC.DD[segnum].mandt2 = 'CMA'; -- Client
SET OutputRoot.IDOC.DD[segnum].docnum2 = ''; -- IDoc number
SET OutputRoot.IDOC.DD[segnum].segnum = CAST(segnum AS CHARACTER); -- Number of SAP segment
SET OutputRoot.IDOC.DD[segnum].psgnum = ''; -- Number of higher-level SAP segment (parent segment)
SET OutputRoot.IDOC.DD[segnum].hlevel = '1'; -- Hierarchy level of SAP segment
END;
END MODULE;
In the debugging time all fields show correctly but when writing into CWF format they raise exceptions like:
Cannot establish a message name while writing.
And it will rollback to my input queue..
Please any one guide me the issue..
Regards,
Kumar. |
|
Back to top |
|
 |
fjb_saper |
Posted: Wed Jul 19, 2006 6:47 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
First you need to create the DC record and it must be filled right.
Then you can create the DD records and they are 1063 long (EDI_DD40) and not 1053 long... (from memory).
Then you need to fill the front part of the DD before you can think of filling the segdata part.
Read up on the idoc parser in the help and download the support pack (even if it is just for the perl hdrfiddle.pl and the pdf)
Enjoy  _________________ MQ & Broker admin |
|
Back to top |
|
 |
anilkumar_damodara |
Posted: Wed Jul 19, 2006 8:27 pm Post subject: |
|
|
Newbie
Joined: 19 Jul 2006 Posts: 3
|
Thanks for replying me....
sorry the record lengh i mentioned 1063......
how can i get information on DD segment fields....can you guide me. Because i am also newly doing the trasformation of IDOC genaration side..
Please help me out...this issues
Thanks & Regards,
kumar. |
|
Back to top |
|
 |
fjb_saper |
Posted: Thu Jul 20, 2006 1:33 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
You need to get communication going between your side and the SAP side (talk to them). A little bit of better understanding the SAP IDOC model and its representation in the EDI_DC40 & EDI_DD40 records will go a long way towards what you are trying to achieve.
Enjoy  _________________ MQ & Broker admin |
|
Back to top |
|
 |
anilkumar_damodara |
Posted: Thu Jul 20, 2006 8:36 pm Post subject: |
|
|
Newbie
Joined: 19 Jul 2006 Posts: 3
|
Thanks for your quick respose........
after giving the SAP IDOC DD,DC fields information........
I am writing ESQL code on SAP Header part this Approach is currect or not please guid me...
SET OutputRoot.MQMD.Format = 'MQHSAP';
SET OutputRoot.MQSAPH.Version = 1;
SET OutputRoot.MQSAPH.Format = 'MQSTR';
SET OutputRoot.MQSAPH.Encoding = InputRoot.MQMD.Encoding;
SET OutputRoot.MQSAPH.CodedCharSetId = InputRoot.MQMD.CodedCharSetId;
SET OutputRoot.MQSAPH.Flags = 0;
SET OutputRoot.MQSAPH.Client = '100' ;
SET OutputRoot.MQSAPH.Language = 'E';
SET OutputRoot.MQSAPH.HostName = '170.38.127.121';
SET OutputRoot.MQSAPH.UserId = 'karenye';
SET OutputRoot.MQSAPH.Password = 'germany1';
SET OutputRoot.MQSAPH.SystemNumber = '04';
SET OutputRoot.MQSAPH.Reserved = X'0000';
please give reply ..............ASAP
Regards,
kumar. |
|
Back to top |
|
 |
fjb_saper |
Posted: Fri Jul 21, 2006 9:26 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
|
Back to top |
|
 |
|