前情提要
仅列出常用的BAPI,大家可以到具体的函数组中发现更多用法;角色可以创建的时候直接维护,或者单独维护;找不到BAPI的,比如公司代码,使用API来维护。
BAPI清单
创建BP
BAPI | 功能 |
---|
BAPI_BUPA_CREATE_FROM_DATA | 创建BP, 包括中心数据、地址等 |
BAPI_BUPA_FS_CREATE_FROM_DATA2 | 功能同上,多一个角色分配功能 |
角色维护
BAPI | 功能 |
---|
BAPI_BUPA_ROLES_GET_2 | 获取分配的Role(按日期) |
BAPI_BUPA_ROLE_ADD_2 | 添加Role |
BAPI_BUPA_ROLE_CHANGE | 修改已存在的Role属性 |
BAPI_BUPA_ROLE_EXIST_CHECK_2 | 校验Role是否存在 |
BAPI_BUPA_ROLE_REMOVE | 删除已分配的Role |
中心数据维护
BAPI | 功能 |
---|
BAPI_BUPA_CENTRAL_GETDETAIL | 获取中心数据 |
BAPI_BUPA_CENTRAL_CHANGE | 修改中心数据 |
地址信息维护
BAPI | 功能 |
---|
BAPI_BUPA_ADDRESSES_GET | 获取所有地址信息 |
BAPI_BUPA_ADDRESS_ADD | 添加地址信息 |
BAPI_BUPA_ADDRESS_CHANGE | 修改已存在的地址信息 |
BAPI_BUPA_ADDRESS_GETDETAIL | 获取某个地址的详细信息 |
BAPI_BUPA_ADDRESS_GET_NUMBERS | 获取地址对应的address number |
BAPI_BUPA_ADDRESS_REMOVE | 删除地址信息 |
银行信息维护
BAPI | 功能 |
---|
BAPI_BUPA_BANKDETAILS_GET | 获取所有的银行信息 |
BAPI_BUPA_BANKDETAIL_ADD | 添加银行信息 |
BAPI_BUPA_BANKDETAIL_CHANGE | 修改银行信息 |
BAPI_BUPA_BANKDETAIL_GETDETAIL | 获取单个银行的详细信息 |
BAPI_BUPA_BANKDETAIL_NUMBERS | 获取银行ID |
BAPI_BUPA_BANKDETAIL_REMOVE | 删除银行信息 |
Identification Number(标识号/证件号码)
BAPI | 功能 |
---|
BAPI_IDENTIFICATIONDETAILS_GET | 获取所有标识号 |
BAPI_IDENTIFICATION_GET_DETAIL | 获取单个标识号的详细信息 |
BAPI_IDENTIFICATION_ADD | 新增标识号 |
BAPI_IDENTIFICATION_CHANGE | 修改标识号 |
BAPI_IDENTIFICATION_REMOVE | 删除标识号 |
API
API | 功能 |
---|
CMD_EI_API_EXTRACT | 读取BP客户信息 |
VMD_EI_API_EXTRACT | 读取BP供应商信息 |
VMD_EI_API | 维护BP供应商 |
CMD_EI_API | 维护BP客户 |
CL_MD_BP_MAINTAIN | 维护BP(较全功能) |
增强
BADI | 功能 |
---|
PARTNER_UPDATE | BP创建或修改 |
ADDRESS_UPDATE | BP地址(通信)数据维护 |
表清单(更新中)
BP
客户
供应商
API示例代码(维护公司代码)
form maintain_cust_company using u_bp_basic type zsmdg_bp_input_basic_req
u_bp_comp_tab type zmdg_bp_input_company_req_t
changing c_return_table type bapiret2_tab.
"获取BP关联的客户编码,默认1对1
select single partner,
b~partner_guid,
customer
from but000 as b
inner join cvi_cust_link as c
on c~partner_guid eq b~partner_guid
where partner eq @u_bp_basic-bp_header
into @data(ls_bp_cust).
data:ls_master_data type cmds_ei_main,
ls_customer type cmds_ei_extern,
ls_central type cmds_ei_cmd_central,
ls_company type cmds_ei_company,
lt_company type cmds_ei_company_t,
ls_message type cvis_message.
clear ls_master_data.
clear ls_customer.
loop at u_bp_comp_tab into data(ls_bp_comp).
ls_company-task = 'M'.
ls_company-data_key-bukrs = ls_bp_comp-company.
ls_company-data-akont = '1122010000'.
ls_company-data-loevm = ls_bp_comp-loevm_b.
ls_company-datax-akont = abap_true.
ls_company-datax-loevm = abap_true.
append ls_company to lt_company.
endloop.
ls_central-data-ktokd = 'DEBI'.
ls_central-datax-ktokd = abap_true.
ls_customer = value
header = value
object_instance = value
object_task = 'M' )
central_data = value
central = ls_central
address = value
name = u_bp_basic-zzbpnm
city = u_bp_basic-zzcity
country = u_bp_basic-ref_posta
langu = '1'
)
datax = value
name = abap_true
city = abap_true
country = abap_true
langu = abap_true
)
)
)
)
company_data = value
).
append ls_customer to ls_master_data-customers.
cmd_ei_api=>initialize( ).
cmd_ei_api=>lock( iv_kunnr = ls_bp_cust-customer ).
cmd_ei_api=>maintain(
exporting
is_master_data = ls_master_data
importing
es_error = ls_message
).
cmd_ei_api=>unlock( iv_kunnr = ls_bp_cust-customer ).
read table ls_message-messages transporting no fields with key type = 'E'.
if sy-subrc ne 0.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = abap_true.
else.
call function 'BAPI_TRANSACTION_ROLLBACK'.
endif.
append lines of ls_message-messages to c_return_table.
endform.
form maintain_ven_company using u_bp_basic type zsmdg_bp_input_basic_req
u_bp_comp_tab type zmdg_bp_input_company_req_t
changing c_return_table type bapiret2_tab.
"获取BP关联的供应商编码,默认1对1
select single partner,
b~partner_guid,
vendor
from but000 as b
inner join cvi_vend_link as v
on v~partner_guid eq b~partner_guid
where partner eq @u_bp_basic-bp_header
into @data(ls_bp_vend).
data:ls_master_data type vmds_ei_main,
ls_vendor type vmds_ei_extern,
ls_company type vmds_ei_company,
lt_company type vmds_ei_company_t,
ls_central type vmds_ei_vmd_central,
ls_message type cvis_message.
clear ls_master_data.
clear ls_vendor.
loop at u_bp_comp_tab into data(ls_bp_comp).
ls_company-task = 'M'.
ls_company-data_key-bukrs = ls_bp_comp-company.
ls_company-data-akont = '2202020000'.
ls_company-data-loevm = ls_bp_comp-loevm_b.
ls_company-datax-akont = abap_true.
ls_company-datax-loevm = abap_true.
append ls_company to lt_company.
endloop.
ls_central-data-ktokk = 'KRED'.
ls_central-datax-ktokk = abap_true.
ls_vendor = value
header = value
object_instance = value
object_task = 'M' )
central_data = value
central = ls_central
address = value
name = u_bp_basic-zzbpnm
city = u_bp_basic-zzcity
country = u_bp_basic-ref_posta
langu = '1'
)
datax = value
name = abap_true
city = abap_true
country = abap_true
langu = abap_true
)
)
)
)
company_data = value
).
append ls_vendor to ls_master_data-vendors.
vmd_ei_api=>initialize( ).
vmd_ei_api=>lock( iv_lifnr = ls_bp_vend-vendor ).
vmd_ei_api=>maintain(
exporting
is_master_data = ls_master_data
importing
es_error = ls_message
).
vmd_ei_api=>unlock( iv_lifnr = ls_bp_vend-vendor ).
read table ls_message-messages transporting no fields with key type = 'E'.
if sy-subrc ne 0.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = abap_true.
else.
call function 'BAPI_TRANSACTION_ROLLBACK'.
endif.
append lines of ls_message-messages to c_return_table.
endform.
备注
多个BAPI连续使用的话,好像要单独commit, 比如先创建BP的中心数据,然后按顺序分配维护地址,分配角色,维护银行,维护公司代码等,如果中间步骤出错,可以考虑停止,或者是跳过错误的步骤,进行下一步。