从开发人员角度来看,B/P客户创建可以试用两种方法,第一种是使用BAPI FUNCTION,第二种是使用BAPI CALL METHOD。
个人更倾向于使用METHOD,因为METHOD方法只需要填充一个嵌套结构就可以实现B/P所有业务视图的填充,而BAPI FUNCTION在创建完客户后,需要调用很多其它的BAPI去扩展业务视图,代码量比较大。现在贴出两种实现方法。
CALL BAPI BAPI_BUPA_CREATE_FROM_DATA
DATA:l_partn_cat TYPE bapibus1006_head-partn_cat,
ls_central TYPE bapibus1006_central,
ls_partn_group TYPE bapibus1006_head,
ls_central_person TYPE bapibus1006_central_person,
ls_central_organ TYPE bapibus1006_central_organ,
l_partn_grp TYPE bapibus1006_head-partn_grp,
ls_central_group TYPE bapibus1006_central_group,
ls_address TYPE bapibus1006_address,
l_bpartner TYPE bapibus1006_head-bpartner,
lt_bapiadtel LIKE TABLE OF bapiadtel WITH HEADER LINE,
lt_bapiret2 LIKE TABLE OF bapiret2 WITH HEADER LINE,
lt_guid LIKE TABLE OF bus000___i WITH HEADER LINE,
lt_custo TYPE TABLE OF bus000_eew WITH HEADER LINE.
DATA:ls_but0bk TYPE but0bk,
lv_bkvid TYPE but0bk-bkvid,
lv_type TYPE char1,
l_str TYPE string,
l_role TYPE bapibus1006_head-partnerrole VALUE 'FLCU00'.
DATA:ls_bankdetail TYPE bapibus1006_bankdetail.
DATA:ls_bankdetail_x TYPE bapibus1006_bankdetail_x.
DATA:lt_return TYPE TABLE OF bapiret2.
DATA:ls_return TYPE bapiret2,
wa_return TYPE zfis_036_return.
"客户类型
l_partn_cat = '2'.
"客户全程
ls_central_organ-name1 = ps_in-name1.
"简称
ls_central-searchterm1 = ps_in-alias.
"创建日期
ls_central_organ-foundationdate = ps_in-time.
"国家代码
ls_address-country = 'CN'.
"城市
ls_address-city = 'GUANGZHOU'.
"邮政编码
ls_address-postl_cod1 = '000000'.
"街道
ls_address-street = ps_in-stras.
"账户组
CASE ps_in-ktokd.
WHEN '1'.
l_partn_grp = 'Z001'.
WHEN '2'.
l_partn_grp = 'Z003'.
WHEN '3'.
l_partn_grp = 'Z001'.
ENDCASE.
CLEAR lt_bapiadtel.
lt_bapiadtel-country = 'CN'.
lt_bapiadtel-std_no = 'X'.
"电话
lt_bapiadtel-telephone = '010-84522355'.
APPEND lt_bapiadtel.
ls_address-langu = '1'.
ls_address-street = 'BACK STRET'.
CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
EXPORTING
* USINESSPARTNEREXTERN =
partnercategory = l_partn_cat
partnergroup = l_partn_grp
centraldata = ls_central
centraldataperson = ls_central_person
centraldataorganization = ls_central_organ
centraldatagroup = ls_central_group
addressdata = ls_address
* UPLICATE_MESSAGE_TYPE =
* CCEPT_ERROR = ' '
IMPORTING
businesspartner = l_bpartner
TABLES
telefondata = lt_bapiadtel
* AXDATA =
* ELETEXDATA =
* ELEXDATA =
* _MAILDATA =
* MLADDRESSDATA =
* 400ADDRESSDATA =
* FCADDRESSDATA =
* RTADDRESSDATA =
* SFADDRESSDATA =
* RIADDRESSDATA =
* AGADDRESSDATA =
* DDRESSNOTES =
* OMMUNICATIONNOTES =
* OMMUNICATIONUSAGE =
* ELEFONDATANONADDRESS =
* AXDATANONADDRESS =
* ELETEXDATANONADDRESS =
* ELEXDATANONADDRESS =
* _MAILDATANONADDRESS =
* MLADDRESSDATANONADDRESS =
* 400ADDRESSDATANONADDRESS =
* FCADDRESSDATANONADDRESS =
* RTADDRESSDATANONADDRESS =
* SFADDRESSDATANONADDRESS =
* RIADDRESSDATANONADDRESS =
* AGADDRESSDATANONADDRESS =
* OMMUNICATIONNOTESNONADDRESS =
* OMMUNICATIONUSAGENONADDRESS =
return = lt_bapiret2
* DDRESSDUPLICATES =
.
IF lt_bapiret2[] IS INITIAL.
CALL FUNCTION 'BUP_MEMORY_BUT000_GET'
EXPORTING
iv_partner = l_bpartner
IMPORTING
es_but000 = lt_guid
EXCEPTIONS
not_found = 1
parameter_error = 2
bpext_not_unique = 3
OTHERS = 4.
READ TABLE lt_guid INDEX 1.
lt_custo-partnr_guid = lt_guid-partner_guid.
APPEND lt_custo.
CALL FUNCTION 'BUPA_CENTRAL_CI_CHANGE'
EXPORTING
is_bus000_eew = lt_custo.
IF sy-subrc EQ 0.
wa_return-kunnr = l_bpartner.
wa_return-ztf_type = ps_in-ztf_type.
wa_return-input = '客户创建成功!'.
wa_return-status = 'S'.
APPEND wa_return TO pt_return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ELSE.
CLEAR l_str.
LOOP AT lt_bapiret2 WHERE type = 'E'.
IF l_str IS INITIAL.
l_str = lt_bapiret2-message.
ELSE.
CONCATENATE l_str lt_bapiret2-message INTO l_str.
ENDIF.
ENDLOOP.
wa_return-ztf_type = ps_in-ztf_type.
wa_return-input = l_str.
wa_return-status = 'E'.
APPEND wa_return TO pt_return.
ENDIF.
*->添加银行数据
IF l_bpartner IS NOT INITIAL.
*->添加业务角色
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
EXPORTING
businesspartner = l_bpartner
businesspartnerrole = l_role
TABLES
return = lt_return.
ls_bankdetail-bank_ctry = ps_in-land1. "银行国家代码
ls_bankdetail-bank_key = ps_in-bankl. "银行代码
ls_bankdetail-bank_acct = ps_in-acc_num."银行账户
ls_bankdetail-bankaccountname = ps_in-koinh. "银行账户名称
ls_bankdetail-ctrl_key = '01'.
ls_bankdetail-accountholder = ps_in-koinh. "银行账户持有人
CALL FUNCTION 'BAPI_BUPA_BANKDETAIL_ADD'
EXPORTING
businesspartner = l_bpartner
bankdetaildata = ls_bankdetail
TABLES
return = lt_return.
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc NE 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
CLEAR lt_return[].
*->添加纳税人登记信息
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
EXPORTING
businesspartner = l_bpartner
taxtype = 'CN0'
taxnumber = ps_in-stceg
TABLES
return = lt_return.
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc NE 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
*->扩充公司代码数据
"更新BP
DATA:is_data TYPE cvis_ei_extern,
it_data TYPE cvis_ei_extern_t.
DATA rv_has_error TYPE abap_bool.
DATA:lv_message TYPE string, "错误消息
lw_bapireturn TYPE bapiret2.
DATA:text0(220) TYPE c.
DATA:l_partner TYPE bus_ei_extern,
l_partner_relation TYPE burs_ei_extern,
l_customer TYPE cmds_ei_extern,
l_company TYPE cmds_ei_company,
l_common TYPE bus_ei_bupa_central,
* l_role TYPE bus_ei_bupa_roles,
l_roles TYPE bus_ei_roles,
l_sales TYPE cmds_ei_sales,
l_tax_ind TYPE cmds_ei_tax_ind,
l_function TYPE cmds_ei_functions,
lv_partner_guid TYPE but000-partner_guid.
SELECT SINGLE
partner_guid
FROM but000
INTO lv_partner_guid
WHERE partner = l_bpartner.
l_partner-header-object_instance-bpartner = l_bpartner.
l_partner-header-object_instance-bpartnerguid = lv_partner_guid.
l_partner-header-object_task = 'U'.
l_customer-header-object_task = 'U'.
l_customer-header-object_instance-kunnr = l_bpartner.
l_company-task = 'M'.
l_company-data_key-bukrs = '1003'.
l_company-data-akont = '1221060200'.
l_company-datax-akont = 'X'.
* l_company-data-zuawa = <itab>-zuawa.
* l_company-datax-zuawa = 'X'.
* l_company-data-zterm = <itab>-zterm_b.
* l_company-datax-zterm = 'X'.
* l_company-data-zwels = <itab>-zwels.
* l_company-datax-zwels = 'X'.
APPEND l_company TO l_customer-company_data-company.
is_data-partner = l_partner.
is_data-customer = l_customer.
APPEND is_data TO it_data.
TRY.
cl_md_bp_maintain=>maintain(
EXPORTING i_data = it_data
IMPORTING e_return = DATA(lt_bapi_return)
).
CATCH cx_root INTO DATA(lo_excep2).
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = sy-msgid
msgnr = sy-msgno
msgv1 = sy-msgv1
msgv2 = sy-msgv2
msgv3 = sy-msgv3
msgv4 = sy-msgv4
IMPORTING
message_text_output = text0.
lv_message = text0.
rv_has_error = abap_true.
ENDTRY.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true
IMPORTING
return = lw_bapireturn.
ENDIF.
从代码里可以看到,B/P FUNCTION创建客户的主要步骤使用了多个BAPI来实现的,代码量比较大。
————————————————
版权声明:本文为CSDN博主「倔强的ABAPER」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sq1986127/article/details/83861783