ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » SAP IDOCs Genarating parser Error

Post new topic  Reply to topic
 SAP IDOCs Genarating parser Error « View previous topic :: View next topic » 
Author Message
anilkumar_damodara
PostPosted: Wed Jul 19, 2006 5:50 pm    Post subject: SAP IDOCs Genarating parser Error Reply with quote

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
View user's profile Send private message
fjb_saper
PostPosted: Wed Jul 19, 2006 6:47 pm    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail
anilkumar_damodara
PostPosted: Wed Jul 19, 2006 8:27 pm    Post subject: Reply with quote

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
View user's profile Send private message
fjb_saper
PostPosted: Thu Jul 20, 2006 1:33 pm    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail
anilkumar_damodara
PostPosted: Thu Jul 20, 2006 8:36 pm    Post subject: Reply with quote

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
View user's profile Send private message
fjb_saper
PostPosted: Fri Jul 21, 2006 9:26 am    Post subject: Reply with quote

Grand High Poobah

Joined: 18 Nov 2003
Posts: 20756
Location: LI,NY

If you press the documentation button at the top of the page and go to the IBM site you will find a link that guides you to documentation for MQ-Link for R3. This will hold all the details you need to know about the SAPH header.
http://www-306.ibm.com/software/integration/mqfamily/library/manualsa/manuals/mqsr3.html
Enjoy
_________________
MQ & Broker admin
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » SAP IDOCs Genarating parser Error
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.