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.