| 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: 20768 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: 20768 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: 20768 Location: LI,NY 
  | 
		  
		    
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | 
		    
		   |