SAP[ABAP] XML跟内表互相转换


1:创建函数
1.1  SE37创建一个ZFM_614_SEND_POXML函数

2.代码

FUNCTION zfm_614_send_poxml.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(INPUTXML) TYPE  STRING
*"  EXPORTING
*"     VALUE(OUTPUTXML) TYPE  STRING
*"----------------------------------------------------------------------


  DATA:lt_zsmm_kf614_xml1 TYPE TABLE OF zsmm_kf614_xml1,
       ls_zsmm_kf614_xml1 TYPE zsmm_kf614_xml1,
       ls_zsmm_kf614_po1  TYPE zsmm_kf614_po1,
       ls_ztwz_table002   TYPE ztwz_table002,
       ls_ztwz_table003   TYPE ztwz_table003.


  DATA:lo_error            TYPE REF TO cx_transformation_error,
       lv_transerrorstring TYPE string.

  DATA:lt_source_itab TYPE abap_trans_srcbind_tab,
       ls_source      TYPE abap_trans_srcbind,
       lo_data        TYPE REF TO data.

  FIELD-SYMBOLS:<fs_tab> TYPE STANDARD TABLE.

  TYPES:BEGIN OF ty_ret,
          flag,
        END OF ty_ret .

  DATA:ls_ret TYPE ty_ret.


IF INPUTXML IS INITIAL.

CONCATENATE:

'<?xml version="1.0" encoding="UTF-8"?>'
'<ROOT>'
'<NUMBER>0000000040</NUMBER>'
'<DATE>2023-10-31</DATE>'
'<ITEMS>'
'<EBELN>4500001510</EBELN>'
'<BUKRS>H100</BUKRS>'
'<BSART>NB</BSART>'
'<LOEKZ/>'
'<STATU>9</STATU>'
'<AEDAT>2023-10-09</AEDAT>'
'<ERNAM>KF157</ERNAM>'
'<EBELP>00010</EBELP>'
'<MATNR/>'
'<MENGE>1.0</MENGE>'
'<MEINS>LE</MEINS>'
'<TEST/>'
'<TEST2/>'
'</ITEMS>'
'</ROOT>'

INTO INPUTXML .
ENDIF.
*XML转换为表

  CREATE DATA lo_data TYPE TABLE OF zsmm_kf614_xml1.
  UNASSIGN <fs_tab>.
  ASSIGN lo_data->* TO <fs_tab>.
  GET REFERENCE OF <fs_tab> INTO ls_source-value.

  ls_source-name = 'O'.
  APPEND ls_source TO lt_source_itab.


  TRY.
      CALL TRANSFORMATION zstrans_kf614_xml1
        SOURCE XML   inputxml
        RESULT order = ls_zsmm_kf614_xml1.
    CATCH cx_transformation_error INTO lo_error.
      lv_transerrorstring = lo_error->get_text( ).
  ENDTRY.

  ls_ret-flag = 'OKKK'.

*表转换为XML
  TRY.
      CALL TRANSFORMATION zstrans_kf614_retxml1
        SOURCE data = ls_ret
        RESULT XML outputxml.
    CATCH cx_transformation_error INTO lo_error.
      lv_transerrorstring = lo_error->get_text( ).
  ENDTRY.


  ls_ztwz_table002-create_num = ls_zsmm_kf614_xml1-number.
  ls_ztwz_table002-inputxml = inputxml.
  ls_ztwz_table002-create_date = sy-datum.
  ls_ztwz_table002-create_name = sy-uname.

  MODIFY ztwz_table002 FROM ls_ztwz_table002.
  COMMIT WORK.

  ls_ztwz_table003-create_num = ls_zsmm_kf614_xml1-number.
  ls_ztwz_table003-outputxml = outputxml.
  ls_ztwz_table003-create_date = sy-datum.
  ls_ztwz_table003-create_name = sy-uname.

  MODIFY ztwz_table003 FROM ls_ztwz_table003.
  COMMIT WORK.

ENDFUNCTION.

2.1 TCODE:STRANS创建转换
 转换1:ZSTRANS_KF614_XML1
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
  <tt:root name="ORDER"/>
  <tt:template>
    <ROOT>
      <NUMBER>
        <tt:value ref=".ORDER.NUMBER"/>
      </NUMBER>
      <DATE>
        <tt:value ref=".ORDER.DATE"/>
      </DATE>

      <ITEMS>
        <tt:loop name="LINE" ref=".ORDER.ITEMS">

          <EBELN>
            <tt:value ref="$LINE.EBELN"/>
          </EBELN>
          <BUKRS>
            <tt:value ref="$LINE.BUKRS"/>
          </BUKRS>
          <BSART>
            <tt:value ref="$LINE.BSART"/>
          </BSART>
          <LOEKZ>
            <tt:value ref="$LINE.LOEKZ"/>
          </LOEKZ>
          <STATU>
            <tt:value ref="$LINE.STATU"/>
          </STATU>
          <AEDAT>
            <tt:value ref="$LINE.AEDAT"/>
          </AEDAT>
          <ERNAM>
            <tt:value ref="$LINE.ERNAM"/>
          </ERNAM>
          <EBELP>
            <tt:value ref="$LINE.EBELP"/>
          </EBELP>
          <MATNR>
            <tt:value ref="$LINE.MATNR"/>
          </MATNR>
          <MENGE>
            <tt:value ref="$LINE.MENGE"/>
          </MENGE>
          <MEINS>
            <tt:value ref="$LINE.MEINS"/>
          </MEINS>
          <TEST>
            <tt:value ref="$LINE.TEST"/>
          </TEST>
          <TEST2>
            <tt:value ref="$LINE.TEST2"/>
          </TEST2>


        </tt:loop>
      </ITEMS>

    </ROOT>
  </tt:template>
</tt:transform>

转换2: ZSTRANS_KF614_RETXML1
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
  <tt:root name="data"/>
  <tt:template>

    <flag tt:value-ref=".data.flag"/>

  </tt:template>
</tt:transform>

3:效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值