SAP交货单过账接口(无批次)分享
一、接口逻辑
1)输入参数和输出参数

2)业务逻辑




二、接口代码




FUNCTION z_fmsd_dn_post.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_DATA_GD) TYPE ZSBC_IF_GD OPTIONAL
*" VALUE(I_INPUT) TYPE STRING OPTIONAL
*" EXPORTING
*" VALUE(E_OUTPUT) TYPE STRING
*"----------------------------------------------------------------------
DATA:ls_input TYPE zssd_input_009,
lt_output TYPE zttbc_msg.
CALL FUNCTION 'ZFM_BREAK_POINT' .
CLEAR:ls_input,lt_output,gv_status_017,gs_input_009.
IF i_input IS NOT INITIAL.
CALL FUNCTION 'Z_FMBC_JSONTOABAP'
EXPORTING
i_json = i_input
IMPORTING
e_data = ls_input.
ENDIF.
IF ls_input IS INITIAL.
PERFORM frm_set_msg TABLES lt_output
USING 'E' '00' '001' '请检查JSON结构与SAP ABAP结构 是否一致!'.
PERFORM frm_write_log_new
USING 'SD0028' lt_output i_data_gd i_input e_output 'E'.
EXIT.
ENDIF.
PERFORM frm_check_likp_data TABLES lt_output USING ls_input.
IF lt_output IS NOT INITIAL.
PERFORM frm_write_log_new
USING 'SD0028' lt_output i_data_gd i_input e_output 'E'.
EXIT.
ENDIF.
MOVE-CORRESPONDING ls_input TO gs_input_009.
DATA lv_mblnr TYPE mblnr .
DATA ls_output TYPE zssd_dnpost_output.
PERFORM frm_dn_post TABLES lt_output USING ls_input CHANGING lv_mblnr .
ls_output = VALUE #( mblnr = lv_mblnr zs_outmsg = lt_output ) .
PERFORM frm_write_log_new
USING 'SD0028' ls_output i_data_gd i_input e_output gv_status_017.
* PERFORM frm_write_log_new
* USING 'SD0028' lt_output i_data_gd i_input e_output gv_status_017.
CLEAR:gs_input_009.
ENDFUNCTION.





FUNCTION Z_FMBC_JSONTOABAP.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(I_JSON) TYPE STRING
*" EXPORTING
*" REFERENCE(E_DATA) TYPE DATA
*"----------------------------------------------------------------------
DATA: CL_DESERIALIZER TYPE REF TO ZCL_TREX_JSON_DESERIALIZER.
DATA: LV_CX_SY_CONVERSION_NO_NUMBER TYPE REF TO CX_SY_CONVERSION_NO_NUMBER,
LV_CX_TREX_SERIALIZATION TYPE REF TO CX_TREX_SERIALIZATION.
DATA: LV_MESSAGE TYPE STRING,
LV_MSG_TYP TYPE C.
DATA:LV_JSON TYPE STRING.
LV_JSON = I_JSON.
REPLACE ALL OCCURRENCES OF REGEX `\[[#[:blank:]]{1,}\]` IN LV_JSON WITH `[]`.
REPLACE ALL OCCURRENCES OF ':null' IN LV_JSON WITH ':""'.
* IF I_JSON IS INITIAL OR I_JSON = '[]'.
* RETURN.
* ENDIF.
IF LV_JSON IS INITIAL OR LV_JSON = '[]'.
RETURN.
ENDIF.
CREATE OBJECT CL_DESERIALIZER.
TRY.
CL_DESERIALIZER->DESERIALIZE(
EXPORTING
* JSON = I_JSON
JSON = LV_JSON
IMPORTING
ABAP = E_DATA ).
CATCH CX_SY_CONVERSION_NO_NUMBER INTO LV_CX_SY_CONVERSION_NO_NUMBER..
