SAP MM供应商主数据维护接口分享
一、接口逻辑
1)外围系统:适用于走OA或SRM系统创建供应商与SAP交互
2)输入参数和输出参数
3)程序逻辑
- 社会统一信用代码防呆:当供应商代码为空且国家”为“CN”时,从表BUT000中,当ZBILL_ZTAXID = “社会统一信用代码”,且BU_GROUP = ZK01或ZK02,取PARTNER值。如果有记录,则返回消息TYPE = E,MESSAGE = “当前社会统一信用代码已存在供应商编码:XXXXXX!”;
- 供应商全称防呆:当供应商代码为空,从表BUT000中,当NAME_ORG1 = “全称”前40位且NAME_ORG2 = “全称”后40位,且BU_GROUP = ZK01或ZK02,取PARTNER值。如果有记录,则返回消息TYPE = E,MESSAGE = “当前供应商全称已存在编码:XXXXXX!”;
- 供应商接口联系人数据:如果超过5行,则返回消息TYPE = E,MESSAGE = “联系人信息最多为5个”;
- 数据转换:供应商接口联系人数据,将每一行分别并写入BUT000中联系人1到5中;
- 调用类方法CL_MD_BP_MAINTAIN=>MAINTAIN处理。如果成功,则返回消息TYPE = S,MESSAGE = “供应商XXXX维护成功!”;否则返回消息TYPE = E,MESSAGE = “供应商维护失败!”;
二、供应商增强&接口代码
1)供应商主数据增强字段
2)接口代码
FUNCTION z_fmmm_0022.
*"----------------------------------------------------------------------
*"*"本地接口:
*" 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 zsmm_input_022,
lt_contact TYPE zttmm_input_022_contact,
lt_bank TYPE zttmm_input_022_bank,
lt_bukrs TYPE zttmm_input_022_bukrs,
lt_ekorg TYPE zttmm_input_022_ekorg,
ls_output TYPE zsmm_output_022,
ls_output_sing TYPE zsmm_output_022_sing.
IF i_input IS NOT INITIAL.
CALL FUNCTION 'Z_FMBC_JSONTOABAP2'
EXPORTING
i_json = i_input
IMPORTING
e_data = ls_input.
ENDIF.
IF ls_input IS INITIAL.
* PERFORM frm_set_msg TABLES ls_output_sing USING 'E' '00' '001' '请检查JSON结构与SAP ABAP结构 是否一致!'.
ls_output_sing-type = 'E'.
ls_output_sing-message = '请检查JSON结构与SAP ABAP结构 是否一致!'.
APPEND ls_output_sing TO ls_output-messagelist.
PERFORM frm_write_log_new USING 'MM0022' ls_output i_data_gd i_input e_output 'E'.
EXIT.
ENDIF.
MOVE-CORRESPONDING ls_input TO ls_output.
lt_contact = ls_input-contact_list.
lt_bank = ls_input-bank_list.
lt_bukrs = ls_input-bukrs_list.
lt_ekorg = ls_input-ekorg_list.
DELETE lt_contact WHERE zlno = ''.
DELETE lt_bank WHERE bankl = ''.
DELETE lt_bukrs WHERE bukrs = ''.
DELETE lt_ekorg WHERE ekorg = ''.
DATA: lv_table TYPE char20,
lv_spras TYPE char2,
lv_lifnr TYPE lfa1-lifnr,
ls_partner TYPE bus_ei_extern, "ҵ
ls_vendor TYPE vmds_ei_extern, " Ӧ
lv_mode TYPE char1, " ģʽ
lv_bu_bkvid TYPE n LENGTH 4,
lv_bpartnerguid TYPE bu_partner_guid, "bu_partner_guid_bapi,
lt_roles TYPE bus_ei_bupa_roles_t,
ls_roles TYPE bus_ei_bupa_roles,
lt_addresses TYPE bus_ei_bupa_address_t,
ls_addresses TYPE bus_ei_bupa_address,
* ls_central_data TYPE vmds_ei_central_data,
lt_bankdetails TYPE bus_ei_bupa_bankdetail_t,
ls_bankdetails TYPE bus_ei_bupa_bankdetail,
* ls_header TYPE vmds_ei_header,
* ls_central TYPE vmds_ei_vmd_central,
ls_data TYPE cvis_ei_extern,
lt_data TYPE cvis_ei_extern_t,
lt_return TYPE bapiretm,
ls_return TYPE bapireti,
lt_return1 TYPE bus_bapiret2_t,
ls_msg TYPE bapiretc,
lwa_bus000_eew TYPE bus000_eew.
CLEAR: lv_table,lv_spras,lv_lifnr,ls_partner,ls_vendor,lv_bpartnerguid,
lv_mode,ls_roles,lt_roles,lt_addresses,ls_addresses,
lt_bankdetails,ls_bankdetails,ls_data,lt_data,
lt_return,ls_output_sing,ls_msg.
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT'
EXPORTING
input = sy-langu
IMPORTING
output = lv_spras.
"check
IF ls_input-bu_group IS INITIAL.
ls_output_sing-type = 'E'.
ls_output_sing-message = '账户组不能为空'.
RETURN.
ENDIF.
lv_lifnr = ls_input-lifnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_lifnr
&nbs