S4 BP 更新
FUNCTION zmdm_customer_s4.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_BASIC) TYPE ZZMDMS042
*" TABLES
*" ACC_TAB TYPE ZZMDMT019
*" SALE_TAB TYPE ZZMDMT020
*" T_KNBK TYPE ZZMDMT043
*" PART_TAB TYPE ZZMDMT021
*" EXTEND_RES_TAB STRUCTURE ZZMDMS022
*"----------------------------------------------------------------------
DATA: lt_data TYPE cvis_ei_extern_t,
ls_data TYPE cvis_ei_extern,
ls_bpinput TYPE ty_head,
ls_but000 TYPE but000,
lt_return TYPE bapiretm,
lv_message TYPE string,
lv_sybrc TYPE sy-subrc.
DATA: lwa_part_tab TYPE zzmdms021.
DATA: lt_sale_tab TYPE zzmdmt020 WITH HEADER LINE.
DATA: lt_knvp_2 TYPE TABLE OF knvp,
lwa_knvp_2 TYPE knvp.
CLEAR: gv_bpguid ,gv_kunnr ,gv_bpnum, gv_task.
**清除接口传的空数据
DELETE sale_tab WHERE vkorg = ''.
DELETE acc_tab WHERE bukrs = ''.
DELETE part_tab WHERE parvw = ''.
ls_bpinput = i_basic.
ls_bpinput-land1 = 'CN'.
* Ls_bpinput-spras = sy-langu.
IF ls_bpinput-kunnr IS INITIAL.
gv_task = 'I' . "创建
ELSE.
ls_bpinput-kunnr = |{ ls_bpinput-kunnr ALPHA = IN }|.
gv_kunnr = ls_bpinput-kunnr.
gv_bpnum = ls_bpinput-kunnr.
SELECT SINGLE a~partner_guid
b~partner
INTO ( gv_bpguid ,gv_bpnum )
FROM cvi_cust_link AS a INNER JOIN but000 AS b ON a~partner_guid = b~partner_guid
WHERE a~customer = gv_kunnr.
IF sy-subrc <> 0 .
* IF ls_bpinput-ktokd = 'Z002' OR
* ls_bpinput-ktokd = 'Z001' OR
* ls_bpinput-ktokd = 'Z005' .
gv_task = 'I' . "创建
* ELSE.
* extend_res_tab[] = VALUE #( BASE extend_res_tab[] ( kunnr = gv_kunnr
* zkunnr = |{ gv_kunnr ALPHA = OUT }|
* msg_type = 'E'
* message = '不存在该客户,无法修改' ) ).
* ENDIF .
ELSE.
gv_task = 'U' . "修改
ENDIF.
IF sale_tab[] IS NOT INITIAL.
CLEAR:lt_sale_tab,lt_sale_tab[].
LOOP AT sale_tab.
lt_sale_tab-kunnr = |{ sale_tab-kunnr ALPHA = IN }|.
lt_sale_tab-vkorg = sale_tab-vkorg."销售组织
lt_sale_tab-vtweg = sale_tab-vtweg."分销渠道
lt_sale_tab-spart = sale_tab-spart."产品组
APPEND lt_sale_tab.
CLEAR lt_sale_tab.
ENDLOOP.
CLEAR:lt_knvp_2,lwa_knvp_2.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE lt_knvp_2
FROM knvp
FOR ALL ENTRIES IN lt_sale_tab
WHERE kunnr = lt_sale_tab-kunnr "客户编号
AND vkorg = lt_sale_tab-vkorg "销售组织
AND vtweg = lt_sale_tab-vtweg "分销渠道
AND spart = lt_sale_tab-spart "产品组
AND parvw = 'Z1'.
LOOP AT lt_knvp_2 INTO lwa_knvp_2.
lwa_part_tab-kunnr = lwa_knvp_2-kunnr ." 客户编号
lwa_part_tab-vkorg = lwa_knvp_2-vkorg." 销售组织
lwa_part_tab-vtweg = lwa_knvp_2-vtweg." 分销渠道
lwa_part_tab-spart = lwa_knvp_2-spart ." 产品组
lwa_part_tab-parvw = lwa_knvp_2-parvw ." 合作伙伴功能
lwa_part_tab-parza = lwa_knvp_2-parza." 合作伙伴计数器
lwa_part_tab-kunn2 = lwa_knvp_2-kunn2." 业务伙伴的客户号
APPEND lwa_part_tab TO part_tab.
CLEAR lwa_part_tab.
ENDLOOP.
ENDIF.
ENDIF.
LOOP AT part_tab INTO lwa_part_tab
WHERE kunn2 <> '' .
lwa_part_tab-kunn2 = |{ lwa_part_tab-kunn2 ALPHA = IN }|.
SELECT COUNT(*)
FROM cvi_cust_link AS a
WHERE a~customer = lwa_part_tab-kunn2.
* IF sy-subrc <> 0 .
* extend_res_tab[] = VALUE #( BASE extend_res_tab[] ( kunnr = lwa_part_tab-kunn2
* zkunnr = |{ lwa_part_tab-kunn2 ALPHA = OUT }|
* msg_type = 'E'
* message = '不存在该合作伙伴,无法使用' ) ).
* ELSE.
MODIFY part_tab FROM lwa_part_tab.
* ENDIF .
ENDLOOP.
IF extend_res_tab[] IS NOT INITIAL .
RETURN .
ENDIF .
PERFORM frm_build_cus_partdata TABLES t_knbk
extend_res_tab[]
USING ls_bpinput
CHANGING ls_data .
IF extend_res_tab[] IS NOT INITIAL .
RETURN .
ENDIF .
PERFORM frm_build_customer_data TABLES acc_tab[]
sale_tab[]
part_tab[]
extend_res_tab[]
USING ls_bpinput
CHANGING ls_data .
IF extend_res_tab[] IS NOT INITIAL .
RETURN .
ENDIF .
APPEND ls_data TO lt_data.
CALL FUNCTION 'CVI_EI_INBOUND_MAIN'
EXPORTING
i_data = lt_data
IMPORTING
e_return = lt_return.
LOOP AT lt_return INTO DATA(ls_return).
SORT ls_return-object_msg BY type id number message .
DELETE ADJACENT DUPLICATES FROM ls_return-object_msg COMPARING type id number message .
LOOP AT ls_return-object_msg INTO DATA(ls_mes)
WHERE type = 'E' OR type = 'A'.
lv_message = lv_message && ls_mes-message.
ENDLOOP.
ENDLOOP.
IF lv_message IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
CLEAR lv_sybrc.
IF gv_task = 'I' .
IF gv_kunnr IS INITIAL .
SELECT SINGLE customer INTO gv_kunnr
FROM cvi_cust_link
WHERE partner_guid = gv_bpguid.
ENDIF .
lv_message = '客户创建成功' .
ELSE.
lv_message = '客户修改成功' .
ENDIF .
extend_res_tab[] = VALUE #( BASE extend_res_tab[] ( kunnr = gv_kunnr
zkunnr = |{ gv_kunnr ALPHA = OUT }|
msg_type = 'S'
message = lv_message ) ).
DATA lw_customer TYPE zzsdt038 .
DATA lt_customer TYPE TABLE OF zzsdt038 .
CLEAR:lt_customer[] ,lw_customer.
lw_customer-kunnr = gv_kunnr . "客户编号
lw_customer-name1 = i_basic-name1. "客户名称
lw_customer-zzfxqd = i_basic-zzfxqd. "主分销渠道
lw_customer-regio = i_basic-regio. "省
lw_customer-ort01 = i_basic-ort01. "市
lw_customer-ort02 = i_basic-ort02. "区
lw_customer-zfl1 = i_basic-zfl1. "经营模式
lw_customer-zfl2 = i_basic-zfl2. "部门
lw_customer-zfl = i_basic-zfl. "一级渠道
lw_customer-zxsdq = i_basic-zxsdq. "销售大区(编码)
lw_customer-zxssq = i_basic-zxssq. "销售省区(编码)
lw_customer-zzarea = i_basic-zzarea. "区域市场
lw_customer-zzarea_t = i_basic-zzarea_t. "区域市场描述
lw_customer-zzarea2 = i_basic-zzarea2. "二级区域市场
lw_customer-zzarea2_t = i_basic-zzarea2_t. "二级区域市场描述
lw_customer-zxsdq_t = i_basic-zxsdq_t."销售大区描述
lw_customer-zxssq_t = i_basic-zxssq_t."销售省区描述
lw_customer-zzfxqd_t = i_basic-zzfxqd_t."主分销渠道描述
lw_customer-zfl3 = i_basic-zfl3."子渠道 "add--hjl--20231217--
APPEND lw_customer TO lt_customer.
CLEAR lw_customer.
MODIFY zzsdt038 FROM TABLE lt_customer.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ENDIF.
DATA ls_kna1 TYPE kna1 .
SELECT SINGLE * INTO ls_kna1 FROM kna1 WHERE kunnr = gv_kunnr .
IF sy-subrc = 0.
UPDATE kna1 SET datlt = i_basic-extension1
telbx = i_basic-extension2
WHERE kunnr = gv_kunnr.
UPDATE adrc SET extension1 = i_basic-extension1
extension2 = i_basic-extension2
WHERE addrnumber = ls_kna1-adrnr .
COMMIT WORK AND WAIT .
ENDIF .
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
lv_sybrc = 4.
IF gv_task = 'I' . "创建
lv_message = '客户创建失败:' && lv_message .
ELSE.
lv_message = '客户修改失败:' && lv_message.
ENDIF .
extend_res_tab[] = VALUE #( BASE extend_res_tab[] ( kunnr = i_basic-kunnr
zkunnr = |{ i_basic-kunnr ALPHA = OUT }|
msg_type = 'E'
message = lv_message ) ).
ENDIF .
**3 写入WS LOG
PERFORM frm_call_method28 TABLES extend_res_tab.
ENDFUNCTION.
浙公网安备 33010602011771号