ABAP 内表与XML的相互转换

ABAP 内表与XML转换

1、需求说明

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

2、创建转换编辑器

  • 首先在SE11建立后面需要使用的结构和表结构
    结构ZSDETAIL:
    ABAP 内表与XML的相互转换_第1张图片

    表类型ZTDETAIL:
    ABAP 内表与XML的相互转换_第2张图片

    结构ZSXML001:
    ABAP 内表与XML的相互转换_第3张图片

    表类型ZTXML001:
    ABAP 内表与XML的相互转换_第4张图片

  1. 事务码STRANS建立转换器。
    ABAP 内表与XML的相互转换_第5张图片

    选择简单转换
    ABAP 内表与XML的相互转换_第6张图片

    以图形方式编辑
    ABAP 内表与XML的相互转换_第7张图片

    右键插入新行
    ABAP 内表与XML的相互转换_第8张图片

    选择参考的类型,此处的TYPE类型是SE11中创建的表类型
    ABAP 内表与XML的相互转换_第9张图片

    插入行后整个结构如下:
    ABAP 内表与XML的相互转换_第10张图片

    回到源代码:
    ABAP 内表与XML的相互转换_第11张图片

    完成XML格式
    ABAP 内表与XML的相互转换_第12张图片

3、代码实现

*&---------------------------------------------------------------------*
*& Report ZABAP_XML
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zabap_xml.
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_ekpo-ebelp = '00020'.
gs_ekpo-loekz = 'Y'.
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.

4、执行结果

在这里插入图片描述

你可能感兴趣的:(SAP,ABAP,xml,abap)