ABAP和XML資料格式互相轉換的兩種方式

i042416發表於2018-09-17

ABAP和XML資料格式互相轉換是廣大開發人員經常遇到的需求。本文介紹兩種方式。

1. ABAP提供了一個工具類cl_proxy_xml_transform,通過它的兩個方法abap_to_xml_xstring和xml_xstring_to_abap實現兩種格式的互換。

看具體例子:

REPORT zxm.
DATA: ls_abap TYPE zzcrmost__pro001dotproduct1.
DATA: ls_line LIKE LINE OF ls_abap-item.
ls_line-logsys = 'AG3'.
ls_line-object_family = '0401'.
ls_line-product_id = 'MCF-0001'.
ls_line-product_type = '01'.
APPEND ls_line TO ls_abap-item.
ls_line-logsys = 'QDD'.
ls_line-object_family = '0402'.
ls_line-product_id = 'MCF-0002'.
ls_line-product_type = '02'.
APPEND ls_line TO ls_abap-item.
DATA(xml) = cl_proxy_xml_transform=>abap_to_xml_xstring( EXPORTING abap_data = ls_abap ddic_type = 'ZZCRMOST__PRO001DOTPRODUCT1' ).
DATA: ls_abap2 LIKE ls_abap,
ls_abap3 LIKE ls_abap.
cl_proxy_xml_transform=>xml_xstring_to_abap( EXPORTING ddic_type = 'ZZCRMOST__PRO001DOTPRODUCT1' xml = xml IMPORTING abap_data = ls_abap2 ).
ASSERT ls_abap2 = ls_abap.

最後一行的ASSERT語句,說明從ABAP格式轉換成XML格式,再轉換成ABAP格式,轉換前的ABAP資料和轉換後的ABAP資料是完全相同的。

上述ABAP程式碼使用到的結構體zzcrmost__pro001dotproduct1型別定義如下:

ABAP和XML資料格式互相轉換的兩種方式

如果我們單步除錯工具類cl_proxy_xml_transform,發現它也沒有神奇之處,

ABAP和XML資料格式互相轉換的兩種方式

內部生成了一個ABAP simple transformation,以此來實現ABAP和XML格式的互相轉換。

ABAP和XML資料格式互相轉換的兩種方式

在偵錯程式裡記錄下這個生成的transformation ID,然後用事務碼STRANS開啟,就可以看到明細了。

ABAP和XML資料格式互相轉換的兩種方式

2. 有了方法1單步除錯發現simple transformation的提示,我們可以用另一種更簡單的辦法實現兩種格式的互換,即直接呼叫simple transformation:

DATA: lv_xml TYPE string.CALL TRANSFORMATION id SOURCE b = ls_abap RESULT XML lv_xml.

生成的XML的根節點名稱為b,因為上面程式碼呼叫引數SOURCE,將ABAP變數ls_abap傳入時,繫結的引數名為“b”。

CALL TRANSFORMATION id SOURCE XML lv_xml RESULT b = ls_abap3.

ASSERT ls_abap2 = ls_abap3. 用這種方式進行ABAP->XML->ABAP仍然能得到最初的ABAP變數的值。

要獲取更多Jerry的原創技術文章,請關注公眾號"汪子熙"或者掃描下面二維碼:


ABAP和XML資料格式互相轉換的兩種方式

ABAP和XML資料格式互相轉換的兩種方式


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2214338/,如需轉載,請註明出處,否則將追究法律責任。

相關文章