Serializzazione di un IDOC in formato XML

Serializzazione di un IDOC in formato XML.

Prima di iniziare

Creare un flusso di messaggi come descritto in Creazione di un flusso di messaggi. Includere un nodo di calcolo nel flusso.

Informazioni su questa attività

È possibile utilizzare il parser XMLNSC per serializzare l'IDoc in un formato XML.

Procedura

  1. Fare clic con il pulsante destro del mouse sul nodo Compute e fare clic su Open ESQL per aprire il file ESQL nella vista Editor.
  2. Utilizzare ESQL come nell'esempio seguente:
    
    DECLARE NS1 NAMESPACE 'http://www.ibm.com/xmlns/prod/websphere/j2ca/sapr/sapzsalepr';
    CREATE COMPUTE MODULE TestInputRootAmends_ALE_IDoc_Transform
    -- Recursive procedure to walk through DataObject and build XML
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    
     -- Reference to the DataObject (from SAP or another source)
        DECLARE inRef1 REFERENCE TO InputRoot.DataObject.*:SapZsalepr;
        
        -- Initialize XMLNSC domain
        CREATE LASTCHILD OF OutputRoot DOMAIN 'XMLNSC';
        DECLARE outRef REFERENCE TO OutputRoot.XMLNSC;
        
        -- Create root XML tag (change 'SAPResponse' as needed)
        CREATE LASTCHILD OF outRef NAME 'SAPResponse';
        DECLARE xmlRef REFERENCE TO outRef.SAPResponse;
        
        -- Start recursive transformation
        LOG EVENT VALUES('Calling ConvertToXML ' || FIELDNAME(inRef1));
        CALL ConvertToXML(inRef1, xmlRef);
        RETURN TRUE;
    	END;
    
      CREATE PROCEDURE ConvertToXML(IN srcRef REFERENCE, IN tgtRef REFERENCE)
      BEGIN
      	DECLARE i INTEGER 1;
        DECLARE fieldRef REFERENCE TO srcRef;
        DECLARE count INTEGER CARDINALITY(fieldRef.*[]);
        LOG EVENT VALUES('Child Count is ' || CAST(count AS CHARACTER)|| ' and field name is '|| FIELDNAME(fieldRef));
        FOR localFieldRef AS fieldRef.*[] DO
            DECLARE currentElement REFERENCE TO fieldRef.*[i];
            DECLARE fieldName1 CHARACTER FIELDNAME(currentElement);
            IF ((FIELDTYPE(currentElement) IS NOT NULL) AND (CARDINALITY(currentElement.*[]) > 0)) THEN
              -- Create a new tag for the nested structure
              CREATE LASTCHILD OF tgtRef NAME fieldName1;
              DECLARE nestedXmlRef REFERENCE TO tgtRef.fieldName1;
              -- Recursive call to process children
              MOVE nestedXmlRef LASTCHILD; -- Moving to last child so that child elements are created under newly created element
              CALL ConvertToXML(currentElement, nestedXmlRef);
            ELSE
              -- Primitive field (string, number, etc.)
              CREATE LASTCHILD OF tgtRef NAME fieldName1 VALUE currentElement;
            END IF;
            if i > count then
        	   LOG EVENT VALUES('Called ConvertToXML loop for more than child count so exiting to avoid infinite loop'); 
        	   return;
            end if;
            SET i = i + 1;
        END FOR;    
        MOVE tgtRef PREVIOUSSIBLING; -- moving to parent element for scenario when child elements and their childs are created
      END;	
    	
    END MODULE;
    
  3. Testare il flusso di messaggi. Negli esempi seguenti vengono forniti un esempio di messaggio IDOC in ingresso e un messaggio XML in uscita.
    Esempio di messaggio di ingresso:
    
    EDI_DC40  1000000000000000002702 3012  ZSALEPR                                                     ZSALEPR                              EMEA  ZSALEPSAPRE1    LS 
    RE1_100                                                                                              OUTBND0006LS
    ADPTR00006
    20150526083752                                                                                                                20150521071512      Z2SALEPRH000                  
    100000000000112700400000100000002DE0100000000000654321 ZNF1ZX2015052600047192052015012620150525GBP      1
    PK
    
                                                                                                             Z2SALEPRC000 
    100000000000112700400000200000103        1.000 
    10.000 
    
    
    Z2SALEPRC000                  1000000000001127004000003000001033.000   
    9.650  
    
    
     Z2SALEPRC000                  1000000000001127004000004000001035.000  
    9.550  
    
    
    Z2SALEPRC000                  10000000000011270040000050000010310.000 
    9.050 
    
    
     Z2SALEPRC000                  100000000000112700400000600000103           20.0008.550                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             Z2SALEPRC000                  100000000000112700400000200000103        1.000    10.000                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 Z2SALEPRC000                  1000000000001127004000003000001033.000            9.650                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Z2SALEPRC000                  1000000000001127004000004000001035.000            9.550                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Z2SALEPRC000                  10000000000011270040000050000010310.000           9.050                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Z2SALEPRC000                  100000000000112700400000600000103           20.0008.550
    
    Esempio di messaggio di uscita:
    
    <SAPResponse>
     <SapZsaleprIDocBO>
      <SapIDocControlRecord>
       <TABNAM>EDI_DC40</TABNAM>
       <MANDT>100</MANDT>
       <DOCNUM>0000000000000002</DOCNUM>
       <DOCREL>702</DOCREL>
       <STATUS>30</STATUS>
       <DIRECT>1</DIRECT>
       <OUTMOD>2</OUTMOD>
       <EXPRSS></EXPRSS>
       <TEST></TEST>
       <IDOCTYP>ZSALEPR</IDOCTYP>
       <CIMTYP></CIMTYP>
       <MESTYP>ZSALEPR</MESTYP>
       <MESCOD></MESCOD>
       <MESFCT></MESFCT>
       <STD></STD>
       <STDVRS>EMEA</STDVRS>
       <STDMES>ZSALEP</STDMES>
       <SNDPOR>SAPRE1</SNDPOR>
       <SNDPRT>LS</SNDPRT>
       <SNDPFC></SNDPFC>
       <SNDPRN>RE1_100</SNDPRN>
       <SNDSAD></SNDSAD>
       <SNDLAD></SNDLAD>
       <RCVPOR>OUTBND0006</RCVPOR>
       <RCVPRT>LS</RCVPRT>
       <RCVPFC></RCVPFC>
       <RCVPRN>ADPTR00006</RCVPRN>
       <RCVSAD></RCVSAD>
       <RCVLAD></RCVLAD>
       <CREDAT>20150526</CREDAT>
       <CRETIM>083752</CRETIM>
       <REFINT></REFINT>
       <REFGRP></REFGRP>
       <REFMES></REFMES>
       <ARCKEY></ARCKEY>
       <SERIAL>20150521071512</SERIAL>
      </SapIDocControlRecord>
      <SapZsaleprDataRecord>
       <SapZsaleprZ2saleprh000>
        <VKORG>DE01</VKORG>
        <MATNR>00000000000654321</MATNR>
        <MTART>ZNF1</MTART>
        <DISMM>ZX</DISMM>
        <VKDAB>20150526</VKDAB>
        <KNUMH>0004719205</KNUMH>
        <DATAB>20150126</DATAB>
        <DATBI>20150525</DATBI>
        <KONWA>GBP</KONWA>
        <KPEIN>1</KPEIN>
        <KMEIN>PK</KMEIN>
        <PRATA></PRATA>
        <SapZsaleprZ2saleprc000>
         <KSTBM>1.000</KSTBM>
         <KBETR>10.000</KBETR>
        </SapZsaleprZ2saleprc000>
        <SapZsaleprZ2saleprc000>
         <KSTBM>3.000</KSTBM>
         <KBETR>9.650</KBETR>
        </SapZsaleprZ2saleprc000>
        <SapZsaleprZ2saleprc000>
         <KSTBM>5.000</KSTBM>
         <KBETR>9.550</KBETR>
        </SapZsaleprZ2saleprc000>
        <SapZsaleprZ2saleprc000>
         <KSTBM>10.000</KSTBM>
         <KBETR>9.050</KBETR>
        </SapZsaleprZ2saleprc000>
        <SapZsaleprZ2saleprc000>
         <KSTBM>20.000</KSTBM>
         <KBETR>8.550</KBETR>
        </SapZsaleprZ2saleprc000>
       </SapZsaleprZ2saleprh000>
      </SapZsaleprDataRecord>
     </SapZsaleprIDocBO>
    </SAPResponse>