SAP B/P 初步研究(二)

从开发人员角度来看,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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值