1需求說明
在系統交互中需要將SAP內表轉換為XML文件,發送給其他系統,並且將其他系統返回的XML文件轉換為SAP內表。
2創建轉換編輯器
事務代碼:STRANS

選擇簡單轉換

以圖形方式編輯

右鍵插入新行

選擇參考的類型。此處的TYPE類型是SE11中創建的表類型

SE11表類型如下

結構為嵌套結構,其中包含詳細信息的表類型

詳細信息表類型

其中包含兩個詳細信息字段

插入行后整個結構如下

在源代碼中將會看到如下信息

完成XML格式

3代碼實現
3.1內表與XML轉換
定義變量

頭行內表賦值

將內表轉換為XML,並將返回的二進制字符串轉為XML字符串

將XML轉換為內表

3.2源代碼
DATA:LT_EKKO TYPE ZTXML001,
GT_EKKO TYPE ZTXML001,
GS_EKKO TYPE ZSXML001,
GT_EKPO TYPE ZTDETAIL,
GS_EKPO TYPE ZSDETAIL,
XML_XSTRING TYPE XSTRING,
XML_STRING TYPE STRING,
LO_OREF TYPE REF TO CX_ST_ERROR,
LV_MESSAGE TYPE CHAR200. "輸出參數
"行結構
GS_EKPO-EBELP = '00010'.
GS_EKPO-LOEKZ = 'X'.
APPEND GS_EKPO TO GT_EKPO.
"頭結構
GS_EKKO-ID = '111'.
GS_EKKO-EBELN = '4100000011'.
GS_EKKO-BUKRS = '2000'.
GS_EKKO-DETAIL = GT_EKPO.
APPEND GS_EKKO TO GT_EKKO.
"將內表轉換為XML
TRY .
CALL TRANSFORMATION ZXMLTEST001
SOURCE POHEADER = GT_EKKO
RESULT XML XML_XSTRING.
"2進制轉換XML字符串不亂碼
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
IM_XSTRING = XML_XSTRING "二進制字符串
IM_ENCODING = 'UTF-8'
IMPORTING
EX_STRING = XML_STRING. "返回的xml字符串
CATCH CX_ST_ERROR INTO LO_OREF.
"傳輸XML轉換錯誤
LV_MESSAGE = LO_OREF->GET_TEXT( ) .
"報錯日志保存
ENDTRY.
WRITE /:XML_STRING.
"將XML轉換為內表
TRY.
CALL TRANSFORMATION ZXMLTEST001
SOURCE XML XML_STRING
RESULT POHEADER = LT_EKKO.
CATCH CX_ST_ERROR INTO LO_OREF.
"返回XML解析錯誤
LV_MESSAGE = LO_OREF->GET_TEXT( ).
ENDTRY.
WRITE /:LV_MESSAGE.
