ABAP 内表与XML转换

时间:2023-01-12 13:24:55

1需求说明

在系统交互中需要将SAP内表转换为XML文件,发送给其他系统,并且将其他系统返回的XML文件转换为SAP内表。

2创建转换编辑器

事务代码:STRANS

ABAP 内表与XML转换

选择简单转换

ABAP 内表与XML转换

以图形方式编辑

ABAP 内表与XML转换

右键插入新行

ABAP 内表与XML转换

选择参考的类型。此处的TYPE类型是SE11中创建的表类型

ABAP 内表与XML转换

SE11表类型如下

ABAP 内表与XML转换

结构为嵌套结构,其中包含详细信息的表类型

ABAP 内表与XML转换

详细信息表类型

ABAP 内表与XML转换

其中包含两个详细信息字段

ABAP 内表与XML转换

插入行后整个结构如下

ABAP 内表与XML转换

在源代码中将会看到如下信息

ABAP 内表与XML转换

完成XML格式

ABAP 内表与XML转换

3代码实现

3.1内表与XML转换

定义变量

ABAP 内表与XML转换

头行内表赋值

ABAP 内表与XML转换

将内表转换为XML,并将返回的二进制字符串转为XML字符串

ABAP 内表与XML转换

将XML转换为内表

ABAP 内表与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.