Creare una "Simple Trasformation"per XML in ABAP
Per convertire un file XML in una tabella interna SAP,
possiamo utilizzare le Trasformation.
Prendiamo come esempio il seguente XML in ingresso a SAP che
deve essere convertito:
<?xml version="1.0" encoding="UTF-8"
standalone="yes"?>
<FlussoRiversamento
xmlns="http://www.digitpa.gov.it/schemas/2011/Pagamenti/">
<versioneOggetto>1.0</versioneOggetto>
<istitutoMittente>
<idunivocomittente>
<tipoIdentificativoUnivoco>B</tipoIdentificativoUnivoco>
<codiceIdentificativoUnivoco>CIPBITMM</codiceIdentificativoUnivoco>
</idunivocomittente
>
<idunivocomittente
>
<tipoIdentificativoUnivoco>D</tipoIdentificativoUnivoco>
<codiceIdentificativoUnivoco>PIPPO</codiceIdentificativoUnivoco>
</idunivocomittente
>
<denominazioneMittente>I.C.B.P.I.</denominazioneMittente>
</istitutoMittente>
</FlussoRiversamento>
La prima cosa da fare è creare una struttura tramite la SE11
che rispecchi la struttura del file XML, escludendo la ROOT
(FlussoRiversamento).
Quindi creiamo la seguente struttura ZST_RIVERSAMENTO nel
seguente modo:
In cui IstitutoMittente è una struttura di questo tipo:
In cui Idunicovomittente è una tabella (perché il file xml prevede più righe per questo tag) con la
seguente struttura:
Il tipo dati per ogni campo viene recuperato direttamente
dal file XSD dell’XML.
Successivamente dalla transazione XSLT_TOOL creiamo la transformation ZRIVERSAMENTO con tipologia S (Trasformazione semplice).
Dalla schermata iniziale della trasformation, elaboriamo
graficamente con il seguente tastino:
Dalla nuova schermata eliminiamo la ROOT di default e
inseriamo una nuova ROOT tramite il menu Edit->New
Root. Inseriamo come:
Root-Name: FlussoRiversamento ( la ROOT del nostro XML)
Type-Name: ZST_RIVERSAMENTO (La struttura creata precedentemente)
Root-Name: FlussoRiversamento ( la ROOT del nostro XML)
Type-Name: ZST_RIVERSAMENTO (La struttura creata precedentemente)
Avremo una situazione del genere:
Ora trasciniamo l’oggetto FLUSSORIVERSAMENTO: ZST_RIVERSAMENTO tramite Drag and Drop nella
colonna di Simple Transformation. In automatico verrà generata la Simple
Transformation.
Non ci resta che adattare i nomi dei campi relativi ai tag XML dando doppio click sul singolo oggetto creato rispettando anche lettere maiuscole e minuscole.
Non ci resta che adattare i nomi dei campi relativi ai tag XML dando doppio click sul singolo oggetto creato rispettando anche lettere maiuscole e minuscole.
Quindi avremo:
Fatto questo, abbiamo generato la nostra Simple
Trasformation (SALVIAMO).
Tornando indietro, e selezionando il tab Testo Sorgente, possiamo vedere anche non graficamente cosa abbiamo creato:
Tornando indietro, e selezionando il tab Testo Sorgente, possiamo vedere anche non graficamente cosa abbiamo creato:
ZRIVERSAMENTO
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates" xmlns:ddic="http://www.sap.com/abapxml/types/dictionary" xmlns:def="http://www.sap.com/abapxml/types/defined">
<tt:root name="FLUSSORIVERSAMENTO" type="ddic:ZST_RIVERSAMENTO"/>
<tt:template>
<FlussoRiversamento>
<versioneOggetto tt:value-ref=".FLUSSORIVERSAMENTO.VERSIONEOGGETTO"/>
<istitutoMittente>
<idunivocomittente>
<tt:loop ref=".FLUSSORIVERSAMENTO.ISTITUTOMITTENTE.IDUNIVOCOMITTENTE">
<zst_pefii15_id_uni_mittente3>
<tipoidentificativounivoco tt:value-ref="TIPOIDENTIFICATIVOUNIVOCO"/>
<codiceidentificativounivoco tt:value-ref="CODICEIDENTIFICATIVOUNIVOCO"/>
</zst_pefii15_id_uni_mittente3>
</tt:loop>
</idunivocomittente>
<denominazionemittente tt:value-ref=".FLUSSORIVERSAMENTO.ISTITUTOMITTENTE.DENOMINAZIONEMITTENTE"/>
</istitutoMittente>
</FlussoRiversamento>
</tt:template>
</tt:transform>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates" xmlns:ddic="http://www.sap.com/abapxml/types/dictionary" xmlns:def="http://www.sap.com/abapxml/types/defined">
<tt:root name="FLUSSORIVERSAMENTO" type="ddic:ZST_RIVERSAMENTO"/>
<tt:template>
<FlussoRiversamento>
<versioneOggetto tt:value-ref=".FLUSSORIVERSAMENTO.VERSIONEOGGETTO"/>
<istitutoMittente>
<idunivocomittente>
<tt:loop ref=".FLUSSORIVERSAMENTO.ISTITUTOMITTENTE.IDUNIVOCOMITTENTE">
<zst_pefii15_id_uni_mittente3>
<tipoidentificativounivoco tt:value-ref="TIPOIDENTIFICATIVOUNIVOCO"/>
<codiceidentificativounivoco tt:value-ref="CODICEIDENTIFICATIVOUNIVOCO"/>
</zst_pefii15_id_uni_mittente3>
</tt:loop>
</idunivocomittente>
<denominazionemittente tt:value-ref=".FLUSSORIVERSAMENTO.ISTITUTOMITTENTE.DENOMINAZIONEMITTENTE"/>
</istitutoMittente>
</FlussoRiversamento>
</tt:template>
</tt:transform>
Adesso possiamo vedere come il tag FlussoRiversamento nel
file XML presenta l’attributo di dichiarazione namespace che possiamo
aggiungere direttamente dal testo sorgente. Naturalmente il tool grafico si
adatterà alla modifica.
ZRIVERSAMENTO
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates" xmlns:ddic="http://www.sap.com/abapxml/types/dictionary" xmlns:def="http://www.sap.com/abapxml/types/defined">
<tt:root name="FLUSSORIVERSAMENTO" type="ddic:ZST_RIVERSAMENTO"/>
<tt:template>
<FlussoRiversamento xmlns="http://www.digitpa.gov.it/schemas/2011/Pagamenti/">
<versioneOggetto tt:value-ref=".FLUSSORIVERSAMENTO.VERSIONEOGGETTO"/>
<istitutoMittente>
<idunivocomittente>
<tt:loop ref=".FLUSSORIVERSAMENTO.ISTITUTOMITTENTE.IDUNIVOCOMITTENTE">
<zst_pefii15_id_uni_mittente3>
<tipoidentificativounivoco tt:value-ref="TIPOIDENTIFICATIVOUNIVOCO"/>
<codiceidentificativounivoco tt:value-ref="CODICEIDENTIFICATIVOUNIVOCO"/>
</zst_pefii15_id_uni_mittente3>
</tt:loop>
</idunivocomittente>
<denominazionemittente tt:value-ref=".FLUSSORIVERSAMENTO.ISTITUTOMITTENTE.DENOMINAZIONEMITTENTE"/>
</istitutoMittente>
</FlussoRiversamento>
</tt:template>
</tt:transform>
</istitutoMittente><tt:transform xmlns:tt="http://www.sap.com/transformation-templates" xmlns:ddic="http://www.sap.com/abapxml/types/dictionary" xmlns:def="http://www.sap.com/abapxml/types/defined">
<tt:root name="FLUSSORIVERSAMENTO" type="ddic:ZST_RIVERSAMENTO"/>
<tt:template>
<FlussoRiversamento xmlns="http://www.digitpa.gov.it/schemas/2011/Pagamenti/">
<versioneOggetto tt:value-ref=".FLUSSORIVERSAMENTO.VERSIONEOGGETTO"/>
<istitutoMittente>
<idunivocomittente>
<tt:loop ref=".FLUSSORIVERSAMENTO.ISTITUTOMITTENTE.IDUNIVOCOMITTENTE">
<zst_pefii15_id_uni_mittente3>
<tipoidentificativounivoco tt:value-ref="TIPOIDENTIFICATIVOUNIVOCO"/>
<codiceidentificativounivoco tt:value-ref="CODICEIDENTIFICATIVOUNIVOCO"/>
</zst_pefii15_id_uni_mittente3>
</tt:loop>
</idunivocomittente>
<denominazionemittente tt:value-ref=".FLUSSORIVERSAMENTO.ISTITUTOMITTENTE.DENOMINAZIONEMITTENTE"/>
</istitutoMittente>
</FlussoRiversamento>
</tt:template>
</tt:transform>
</FlussoRiversamento>
</tt:template>
</tt:transform>
</tt:template>
</tt:transform>
Ora possiamo attivare ed utilizzarla all’interno del nostro
report nel seguente modo:
ESEMPIO DI PROGRAMMA CHE RICHIAMA LA TRASFORMATION
PROGRAM
ZESEMPIO.
DATA: gv_xml_string TYPE string.
DATA: ls_xml_table TYPE ZST_RIVERSAMENTO,
gt_xml_table TYPE STANDARD TABLE OF ZST_RIVERSAMENTO.
START-OF-SELECTION.
PERFORM temp. "call proxy
* CALL TRANSFORMATION per convertire XML in Table SAP
PERFORM xml_response_to_abap CHANGING ls_xml_table.
PERFORM xml_response_to_abap CHANGING ls_xml_table.
END-OF-SELECTION.
FORM temp .
DATA: lt_string TYPE STANDARD TABLE OF string.
CLEAR: gv_xml_string.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'C:\Cartella\Riversamento.xml'
TABLES
data_tab = lt_string.
LOOP AT lt_string ASSIGNING FIELD-SYMBOL(<fs_xml>).
CONCATENATE gv_xml_string <fs_xml> INTO gv_xml_string.
ENDLOOP.
ENDFORM.
data_tab = lt_string.
LOOP AT lt_string ASSIGNING FIELD-SYMBOL(<fs_xml>).
CONCATENATE gv_xml_string <fs_xml> INTO gv_xml_string.
ENDLOOP.
ENDFORM.
FORM xml_response_to_abap CHANGING ls_xml_table TYPE ZST_RIVERSAMENTO.
CLEAR: ls_xml_table.
TRY .
CALL TRANSFORMATION zriversamento
SOURCE XML gv_xml_string
RESULT flussoriversamento = ls_xml_table.
APPEND ls_xml_table TO gt_xml_table.
CATCH cx_transformation_error.
"NO DUMP ONLY NO APPEND
ENDTRY.
ENDFORM.
TRY .
CALL TRANSFORMATION zriversamento
SOURCE XML gv_xml_string
RESULT flussoriversamento = ls_xml_table.
APPEND ls_xml_table TO gt_xml_table.
CATCH cx_transformation_error.
"NO DUMP ONLY NO APPEND
ENDTRY.
ENDFORM.
in cui “flussoriversamento” è il nome della ROOT inserita nella trasformation.
EBOOK: le mie guide sono visualizzabili cliccando sui link:
1. SAP EWM (Extended Warehouse Management)
3. SAP VIM (Vendor Invoice Management)
1. SAP EWM (Extended Warehouse Management)
3. SAP VIM (Vendor Invoice Management)
SE MI CONTATTATE IN PRIVATO, PAGATE LA META' DEL PREZZO DI AMAZON, E POTETE SCEGLIERE IL FORMATO WORD o PDF.
>>> RECENSIONI DEI LIBRI su Amazon Kindle <<<
Ebook: SAP CDS: https://www.amazon.it/dp/B0B9BD1RN3#customerReviews
Ebook: SAP MM: https://www.amazon.it/dp/B0C3MKD9BR#customerReviews
Ebook: SAP MII: https://www.amazon.it/dp/B0C4392MY9#customerReviews
Ebook: SAP VIM: https://www.amazon.it/dp/B0C6FBK8QN#customerReviews
Ebook: SAP MM: https://www.amazon.it/dp/B0C3MKD9BR#customerReviews
Ebook: SAP MII: https://www.amazon.it/dp/B0C4392MY9#customerReviews
Ebook: SAP VIM: https://www.amazon.it/dp/B0C6FBK8QN#customerReviews
Ebook: SAP EWM: https://www.amazon.it/dp/B0CL6TXP1V#customerReviews
Nessun commento:
Posta un commento