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:效果