METHOD zmm_i002_ii_si_sap_cmd_in~si_sap_cmd_in.
*** **** INSERT IMPLEMENTATION HERE **** ***
DATA: output_hd TYPE zmmi005_dt_mesg_hd,
output_body TYPE zsd_dt_hxm_res_msgbd_tab,
output_line TYPE zsd_dt_hxm_res_msgbd.
DATA: r_obj TYPE REF TO zco_si_unhxm_out.
DATA: out TYPE zsd_mt_hxm_res.
DATA:es_master_data_correct TYPE vmds_ei_main,
es_message_correct TYPE cvis_message,
es_master_data_defective TYPE vmds_ei_main,
es_message_defective TYPE cvis_message.
DATA:lv_flg.
DATA:ls_main TYPE vmds_ei_main,
ls_mesg TYPE cvis_message,
lt_msg TYPE bapiret2_t,
lwa_msg TYPE bapiret2,
lt_vend TYPE vmds_ei_extern_t,
lwa_vend TYPE vmds_ei_extern,
lt_company TYPE vmds_ei_company_t,
lwa_company TYPE vmds_ei_company,
lt_bankdetails TYPE cvis_ei_bankdetail_t,
lwa_bankdetails TYPE cvis_ei_cvi_bankdetail, "CVIS_EI_BANKDETAIL.
lt_purchasing TYPE vmds_ei_purchasing_t,
lwa_purchasing TYPE vmds_ei_purchasing,
lt_functions TYPE vmds_ei_functions_t,
lwa_functions TYPE vmds_ei_functions.
DATA: ilen TYPE i.
DATA: l_lifnr TYPE lifnr.
DATA:gv_bcy TYPE banks,
gw_add TYPE bapi1011_address,
gv_bck TYPE bankk,
gw_return TYPE bapiret2.
DATA: lt_lfbk TYPE STANDARD TABLE OF lfbk,
lw_lfbk TYPE lfbk.
DATA: nextno TYPE char8.
LOOP AT input-mt_sap_cmd-msgbd INTO DATA(ls_item).
ilen = strlen( ls_item-lifnr ).
IF ilen > 10.
output_line-msg = '供应商编码超长,请检查'.
output_line-msgcode = 'E'.
APPEND output_line TO output_body.
EXIT.
ELSE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_item-lifnr
IMPORTING
output = lwa_vend-header-object_instance-lifnr.
ENDIF.
l_lifnr = lwa_vend-header-object_instance-lifnr.
CASE ls_item-zflag.
WHEN '' OR 'A'.
-
主数据
IF ls_item-zflag = ‘’.
lwa_vend-header-object_task = ‘I’."创建/更改
ELSE.
lwa_vend-header-object_task = ‘U’."创建/更改
ENDIF.lwa_vend-central_data-central-data-ktokk = ls_item-ktokk. lwa_vend-central_data-central-data-stceg = ls_item-taxnumxl. lwa_vend-central_data-central-datax-stceg = 'X'. lwa_vend-central_data-central-datax-ktokk = 'X'.
*地址数据
IF ls_item-zflag = ‘’.
lwa_vend-central_data-address-task = ‘I’."创建/更改
ELSE.
lwa_vend-central_data-address-task = ‘U’."创建/更改
ENDIF.
lwa_vend-central_data-address-postal-data-title = ls_item-text15.
lwa_vend-central_data-address-postal-data-name = ls_item-name_org1.
lwa_vend-central_data-address-postal-data-langu = ls_item-spras.
lwa_vend-central_data-address-postal-data-country = ls_item-land1.
lwa_vend-central_data-address-postal-data-sort1 = ls_item-bu_sort1.
-
lwa_vend-central_data-address-postal-data-sort2 = ‘LSI’.
lwa_vend-central_data-address-postal-data-street = ls_item-stras. -
lwa_vend-central_data-address-postal-data-house_no = ls_item-stras.
lwa_vend-central_data-address-postal-data-postl_cod1 = ls_item-pstlz.
lwa_vend-central_data-address-postal-data-city = ls_item-ort01.
lwa_vend-central_data-address-postal-data-region = ls_item-regio.lwa_vend-central_data-address-postal-datax-title = 'X'. lwa_vend-central_data-address-postal-datax-name = 'X'. lwa_vend-central_data-address-postal-datax-langu = 'X'. lwa_vend-central_data-address-postal-datax-country = 'X'. lwa_vend-central_data-address-postal-datax-sort1 = 'X'.
-
lwa_vend-central_data-address-postal-datax-sort2 = 'X'. lwa_vend-central_data-address-postal-datax-street = 'X'.
-
lwa_vend-central_data-address-postal-datax-house_no = 'X'. lwa_vend-central_data-address-postal-datax-postl_cod1 = 'X'. lwa_vend-central_data-address-postal-datax-city = 'X'. lwa_vend-central_data-address-postal-datax-country = 'X'. lwa_vend-central_data-address-postal-datax-region = 'X'. "电话 CLEAR lwa_vend-central_data-address-communication-phone-phone[]. DATA:ls_phone LIKE LINE OF lwa_vend-central_data-address-communication-phone-phone. ls_phone-contact-task = 'I'. ls_phone-contact-data-telephone = ls_item-telf1. ls_phone-contact-datax-telephone = 'X'. APPEND ls_phone TO lwa_vend-central_data-address-communication-phone-phone. CLEAR ls_phone.
**银行数据
LOOP AT ls_item-hxm INTO DATA(ls_bank).
"20230511-不传银联号
SELECT SINGLE *
FROM bnka
INTO @DATA(s_bnka)
WHERE banka = @ls_bank-banka.
IF sy-subrc NE 0."银行不存在就创建银行再存
"20230511业务需求生成随机数10位AG********1
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '1' "上面起始编号前面的序号
object = 'ZBANKID' "编号对象
IMPORTING
number = nextno.
gv_bcy = ls_bank-banks.
gv_bck = 'AG' && nextno.
gw_add-bank_name = ls_bank-banka.
gw_add-region = ls_item-regio.
-
CALL FUNCTION 'BAPI_BANK_CREATE' EXPORTING bank_ctry = gv_bcy bank_key = gv_bck bank_address = gw_add IMPORTING return = gw_return bankkey = gv_bck. IF gv_bck IS NOT INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. CLEAR: nextno. ENDIF.
*****************************************************"20230511-不传银联号
SELECT *
INTO TABLE lt_lfbk
FROM lfbk
WHERE lifnr = l_lifnr.
IF sy-subrc <> 0.
lwa_bankdetails-task = 'I'.
"20230511取银行最新id
SELECT *
FROM bnka
INTO TABLE @DATA(lt_bnka)
WHERE banka = @ls_bank-banka.
SORT lt_bnka BY erdat DESCENDING.
READ TABLE lt_bnka INTO DATA(ls_bnka) INDEX 1.
lwa_bankdetails-data_key-bankl = ls_bnka-bankl. "银行编号
lwa_bankdetails-data_key-bankn = ls_bank-bankn. "银行帐户号码
lwa_bankdetails-data_key-banks = ls_bank-banks. "银行国家代码
-
lwa_bankdetails-data-koinh = ls_bank-koinh. "银行帐户编号 lwa_bankdetails-data-koinh = ls_bank-bankn. "20230119 lwa_bankdetails-datax-koinh = 'X'. APPEND lwa_bankdetails TO lt_bankdetails. CLEAR lwa_bankdetails. ELSE. SELECT SINGLE * INTO lw_lfbk FROM lfbk WHERE lifnr = l_lifnr
-
AND bankl = ls_bank-bankl AND banks = ls_bank-banks AND bankn = ls_bank-bankn. IF sy-subrc = 0. IF ls_item-zflag = 'A'. lwa_bankdetails-task = 'U'.
-
lwa_bankdetails-data_key-bankl = ls_bank-bankl. "银行编号 lwa_bankdetails-data_key-bankn = ls_bank-bankn. "银行帐户号码 lwa_bankdetails-data_key-banks = ls_bank-banks. "银行国家代码 lwa_bankdetails-data-koinh = ls_bank-bankn. "20230119 lwa_bankdetails-datax-koinh = 'X'. APPEND lwa_bankdetails TO lt_bankdetails. CLEAR lwa_bankdetails. ENDIF. ELSE. LOOP AT lt_lfbk INTO lw_lfbk. lwa_bankdetails-task = 'D'.
-
lwa_bankdetails-data_key-bankl = lw_lfbk-bankl. "银行编号 lwa_bankdetails-data_key-bankn = lw_lfbk-bankn. "银行帐户号码 lwa_bankdetails-data_key-banks = lw_lfbk-banks. "银行国家代码 APPEND lwa_bankdetails TO lt_bankdetails. CLEAR lwa_bankdetails. ENDLOOP. lwa_bankdetails-task = 'I'.
-
lwa_bankdetails-data_key-bankl = ls_bank-bankl. "银行编号 lwa_bankdetails-data_key-bankn = ls_bank-bankn. "银行帐户号码 lwa_bankdetails-data_key-banks = ls_bank-banks. "银行国家代码 lwa_bankdetails-data-koinh = ls_bank-bankn. "20230119 lwa_bankdetails-datax-koinh = 'X'. APPEND lwa_bankdetails TO lt_bankdetails. CLEAR lwa_bankdetails. ENDIF. ENDIF. ENDLOOP. lwa_vend-central_data-bankdetail-bankdetails = lt_bankdetails.
APPEND lwa_vend TO lt_vend.
ls_main-vendors = lt_vend.
WHEN 'B' OR 'C'.
lwa_vend-header-object_task = 'U'."创建/更改
-
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
-
EXPORTING
-
input = ls_item-lifnr
-
IMPORTING
-
OUTPUT = lwa_vend-header-object_instance-lifnr. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = lwa_vend-header-object_instance-lifnr IMPORTING output = lwa_vend-header-object_instance-lifnr. IF ls_item-zflag = 'B'. lwa_vend-central_data-central-data-loevm = 'X'. ELSE. lwa_vend-central_data-central-data-loevm = ''. ENDIF. lwa_vend-central_data-central-datax-loevm = 'X'. APPEND lwa_vend TO lt_vend. ls_main-vendors = lt_vend. WHEN OTHERS. ENDCASE. " vmd_ei_api=>initialize( ). CLEAR:es_master_data_correct,es_message_correct,es_master_data_defective,es_message_defective. CALL METHOD vmd_ei_api=>maintain_bapi EXPORTING
-
iv_test_run = SPACE
-
iv_collect_messages = SPACE is_master_data = ls_main IMPORTING es_master_data_correct = es_master_data_correct es_message_correct = es_message_correct es_master_data_defective = es_master_data_defective es_message_defective = es_message_defective.
-
CALL METHOD vmd_ei_api=>maintain
-
EXPORTING
** IV_TEST_RUN = SPACE
-
is_master_data = ls_main
-
IMPORTING
-
es_error = ls_mesg. IF es_message_defective IS INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'
-
IMPORTING
-
RETURN = . READ TABLE es_master_data_correct-vendors INTO DATA(ls_vendor) INDEX 1. output_line-orderunm1 = |ID_{ ls_item-zyl-yl1 }|. output_line-orderunm2 = ls_vendor-header-object_instance-lifnr. output_line-msgcode = 'S'. IF ls_item-zflag = 'B'. output_line-msg = |供应商{ output_line-orderunm2 ALPHA = OUT }冻结成功|. ELSEIF ls_item-zflag = 'C'. output_line-msg = |供应商{ output_line-orderunm2 ALPHA = OUT }解冻成功|. ELSE. output_line-msg = |供应商{ output_line-orderunm2 ALPHA = OUT }保存成功|. ENDIF. output_line-itemid = ls_item-itemid. APPEND output_line TO output_body. CLEAR output_line. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. IF ls_item-zflag = 'B'. output_line-msg = |供应商{ output_line-orderunm2 ALPHA = OUT }冻结失败|. ELSEIF ls_item-zflag = 'C'. output_line-msg = |供应商{ output_line-orderunm2 ALPHA = OUT }解冻失败|. ELSE. LOOP AT es_message_defective-messages INTO DATA(gs_message) WHERE type = 'E' . CONCATENATE output_line-msg gs_message-message INTO output_line-msg. ENDLOOP. ENDIF. output_line-orderunm1 = |ID_{ ls_item-zyl-yl1 }|. output_line-orderunm2 = ''. output_line-msgcode = 'E'. output_line-itemid = ls_item-itemid. APPEND output_line TO output_body. CLEAR output_line. ENDIF. CLEAR:ilen,ls_item.
ENDLOOP.
"反馈头信息
out-mt_hxm_res-msghd-msgid = input-mt_sap_cmd-msghd-msgid.
out-mt_hxm_res-msghd-tlgid = input-mt_sap_cmd-msghd-tlgid.
out-mt_hxm_res-msghd-tlgname = input-mt_sap_cmd-msghd-tlgname.
out-mt_hxm_res-msghd-dtsend = sy-datum && sy-uzeit.
out-mt_hxm_res-msghd-sender = ‘ERP’.
out-mt_hxm_res-msghd-receiver = input-mt_sap_cmd-msghd-sender.
"反馈行信息
out-mt_hxm_res-msgbd = output_body.
TRY .
CREATE OBJECT r_obj.
CALL METHOD r_obj->si_unhxm_out
EXPORTING
output = out.
COMMIT WORK AND WAIT.
CALL FUNCTION ‘ZFUN_PO_LOG’
EXPORTING -
OUTPUT1 = output2 = out. CATCH cx_ai_system_fault.
ENDTRY.
ENDMETHOD.