客户主数据创建接口示例

FUNCTION zsd_091_new.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      T_INPUT STRUCTURE  ZSD091
*"      T_RETURN STRUCTURE  BAPIRETC OPTIONAL
*"----------------------------------------------------------------------
  CONSTANTS:
     g_object_task_i TYPE bus_ei_object_task VALUE 'I'.
  DATA:
    lt_data             TYPE cvis_ei_extern_t,
    ls_data             TYPE cvis_ei_extern,
    lt_return           TYPE bapiretm,
    ls_return           TYPE bapireti,
    ls_partner          TYPE bus_ei_extern,
    ls_customer         TYPE cmds_ei_extern,
    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,
    lt_phone            TYPE bus_ei_bupa_telephone_t,
    ls_phone            TYPE bus_ei_bupa_telephone,
    lv_partner_guid     TYPE bu_partner_guid,
    lt_tb003i           TYPE TABLE OF tb003i,
    ls_tb003i           TYPE tb003i,
    lv_error            TYPE c,
    ls_cvis_error       TYPE cvis_error,
    lt_partnerguid_list TYPE bu_partner_guid_t,
    ls_partnerguid_list TYPE bu_partner_guid,
    lt_customer_list    TYPE cvis_cust_link_t,
    ls_customer_list    TYPE cvi_cust_link,
    lt_n_ukmbp_cms      TYPE TABLE OF ukm_s_bp_cms_upd,
    lt_n_ukmbp_cms_sgm  TYPE TABLE OF ukm_s_bp_cms_sgm_upd,
    lt_ukm_chck_rule    TYPE TABLE OF ukm_chck_rule,
    lt_ukm_limit_rules  TYPE TABLE OF ukm_limit_rules.

    SELECT *
    INTO TABLE lt_tb003i
    FROM tb003i
    WHERE rltgr LIKE 'Z%'.

  SELECT *
    INTO TABLE lt_ukm_chck_rule
    FROM ukm_chck_rule.

  SELECT *
    INTO TABLE lt_ukm_limit_rules
    FROM ukm_limit_rules.


  LOOP AT t_input.

*            t_input-BU_GROUP     = 'ZC01'      .
*            t_input-ROLE         = 'ZC01'      .
*            t_input-SORTL        = '有效'      .
*            t_input-LAND1        = 'CN'        .
*            t_input-SPRAS        = '1'         .
*            t_input-KUKLA        = '10'        .
*            t_input-KATR1        = '1A'        .
*            t_input-KATR2        = '2D'        .
*            t_input-KATR3        = '3L'        .
*            t_input-KATR4        = '4J'        .
*            t_input-KATR5        = '5A'        .
*            t_input-LIMIT_RULE   = 'B2B-EXIST' .
*            t_input-RISK_CLASS   = 'E'         .
*            t_input-CHECK_RULE   = '01'         .
*            t_input-BUKRS        = '1000'      .
*            t_input-AKONT        = '1122010200'.
*            t_input-ZUAWA        = '001'         .
*            t_input-ZTERM        = 'Z000'      .
*            t_input-VKORG        = 1000      .
*            t_input-VTWEG        = '00'        .
*            t_input-SPART        = '00'        .
*            t_input-BZIRK        = '000002'    .
*            t_input-KALKS        = 5         .
*            t_input-WAERS        = 'CNY'       .
*            t_input-VWERK        = '1000'      .
*            t_input-VSBED        = '01'        .
*            t_input-ZTERM1        = 'Z000'      .
*            t_input-KTGRD        = '01'        .
*            t_input-TAXKD        = 1         .
*            t_input-INCO1        = 'CFR'      .
*            t_input-INCO2_L      = 'SKG条款'   .



    CLEAR:
      ls_data,
      lt_data,
      lv_error.

    if t_input-BU_GROUP 'ZC01' .
*    SELECT MAX( kunnr ) INTO @DATA(lv_partner)  FROM  kna1 WHERE  kunnr LIKE '000001%' .

     SELECT  MAXpartner )
     INTO  @DATA(lv_partner)
     FROM but000
     WHERE partner LIKE '000001%' .

    ELSEIF t_input-BU_GROUP 'ZC02'  .
    SELECT MAXkunnr INTO  lv_partner   FROM  kna1 WHERE  kunnr LIKE '000002%' .
    ELSEIF t_input-BU_GROUP 'ZC04'  .
    SELECT MAXkunnr INTO lv_partner   FROM  kna1 WHERE  kunnr LIKE '000003%' .
    ELSEIF t_input-BU_GROUP 'ZC05'  .
    SELECT MAXkunnr INTO  lv_partner   FROM  kna1 WHERE  kunnr LIKE '000005%' .
    ELSEIF t_input-BU_GROUP 'ZC06'  .
    SELECT MAXkunnr INTO  lv_partner  FROM  kna1 WHERE  kunnr LIKE '000009%' .
    endif.
    "   10001~19999
"20001~29999
"公司编码
"3001~39999
"50001~59999
"900000
   IF t_input-BU_GROUP <> 'ZC03'  .
    t_input-partner lv_partner + .
   ENDIF.

    ls_partner-header-object_instance-bpartner     t_input-partner.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  ls_partner-header-object_instance-bpartner
      IMPORTING
        output ls_partner-header-object_instance-bpartner.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  t_input-kunnr
      IMPORTING
        output t_input-kunnr.

*    SELECT SINGLE but000~partner
*     INTO  @lv_partner
*     FROM but000
*     WHERE partner = @t_input-partner .

    SELECT SINGLE but000~partner
     INTO  @lv_partner
     FROM but000
     WHERE partner @ls_partner-header-object_instance-bpartner .

    IF sy-subrc .

      t_return-type    'E'.
      t_return-message '此经销商' && t_input-partner  && '已存在!'.

      APPEND t_return.

      CONTINUE.
    ENDIF.

    IF t_input-limit_rule IS INITIAL.
      t_return-type    'E'.
      t_return-message '信贷限额的规则不能为空!'.
      APPEND t_return.

      CONTINUE.
    ELSE.
      READ TABLE lt_ukm_limit_rules WITH KEY limit_rule t_input-limit_rule
                                             TRANSPORTING NO FIELDS.
      IF sy-subrc <> 0.
        t_return-type    'E'.
        t_return-message '信贷限额的规则' && t_input-limit_rule && '不存在!'.
        APPEND t_return.

        CONTINUE.
      ENDIF.
    ENDIF.

    IF t_input-check_rule IS NOT INITIAL.
      READ TABLE lt_ukm_chck_rule WITH KEY check_rule t_input-check_rule
                                           TRANSPORTING NO FIELDS .
      IF sy-subrc <> 0.
        t_return-type    'E'.
        t_return-message '信用检查的规则' && t_input-check_rule && '不存在!'.
        APPEND t_return.

        CONTINUE.
      ENDIF.
    ENDIF.

    "基本信息
    TRY .
        lv_partner_guid cl_uuid_factory=>create_system_uuid)->create_uuid_x16).
*        IF lines( t_return ) > 0.
*          t_return-MESSAGE_V2 = t_input-partner .
*        MODIFY t_return .
*        endif.
      CATCH cx_uuid_error.

        "返回消息
    ENDTRY.
    ls_partner-header-object_task                  g_object_task_i.
    ls_partner-header-object_instance-bpartnerguid lv_partner_guid.
****业务合作伙伴数据的中心数据***********************************


    ls_partner-central_data-common-data-bp_control-category 2.                 "业务伙伴类别
    ls_partner-central_data-common-data-bp_control-grouping t_input-bu_group.  "业务伙伴分组

*    ls_partner-central_data-common-data-bp_centraldata-partnerexternal = t_input-adext.
    ls_partner-central_data-common-data-bp_centraldata-title_key       '0003'"称谓
    ls_partner-central_data-common-data-bp_centraldata-searchterm1     t_input-sortl.      "检索项
    ls_partner-central_data-common-datax-bp_centraldata-searchterm1    abap_true.

    ls_partner-central_data-common-data-bp_organization-name1          t_input-name1.     "名称
    ls_partner-central_data-common-datax-bp_organization-name1         abap_true.

    CLEAR:lt_roles.
    READ TABLE lt_tb003i WITH KEY rltgr t_input-role
                                  TRANSPORTING NO FIELDS.
    IF sy-subrc 0.
      LOOP AT lt_tb003i INTO ls_tb003i WHERE rltgr t_input-role.
        CLEAR ls_roles.
        ls_roles-task     g_object_task_i.
        ls_roles-data_key ls_tb003i-role.
        APPEND ls_roles TO lt_roles.
      ENDLOOP.
    ELSE.
      ls_roles-task     g_object_task_i.
      ls_roles-data_key t_input-role.
      APPEND ls_roles TO lt_roles.
    ENDIF.
    ls_partner-central_data-role-roles lt_roles.

    "地址信息
    CLEAR lt_addresses.
    ls_addresses-task g_object_task_i.
    ls_addresses-data-postal-data-city              t_input-ort01.
    ls_addresses-data-postal-data-street            t_input-stras.            "街道
    ls_addresses-data-postal-data-country           t_input-land1.            "国家
    ls_addresses-data-postal-data-langu             t_input-spras.            "语言
    ls_addresses-data-postal-data-extaddressnumber  t_input-adext.
    ls_addresses-data-postal-data-region            t_input-regio.
    ls_addresses-data-postal-datax-city             abap_true.
    ls_addresses-data-postal-datax-street           abap_true.
    ls_addresses-data-postal-datax-country          abap_true.
    ls_addresses-data-postal-datax-langu            abap_true.
    ls_addresses-data-postal-datax-extaddressnumber abap_true.
    ls_addresses-data-postal-datax-region           abap_true.
    "电话
    CLEAR lt_phone.
    ls_phone-contact-task            g_object_task_i.
    ls_phone-contact-data-telephone  t_input-telf1.    "电话1
    ls_phone-contact-datax-telephone abap_true.
    ls_phone-contact-datax-r_3_user  abap_true.
    ls_phone-contact-datax-tel_no    abap_true.
    APPEND ls_phone TO lt_phone.
    "移动电话
    CLEAR lt_phone.
    ls_phone-contact-task            g_object_task_i.
    ls_phone-contact-data-telephone  t_input-mob_number.    "电话1
    ls_phone-contact-data-r_3_user   '3'.             "移动电话
    ls_phone-contact-datax-telephone abap_true.
    ls_phone-contact-datax-r_3_user  abap_true.
    APPEND ls_phone TO lt_phone.

    ls_addresses-data-communication-phone-phone lt_phone.

    APPEND ls_addresses TO lt_addresses.
    ls_partner-central_data-address-addresses lt_addresses.
****客户的通用数据***********************************
    ls_customer-header-object_task           g_object_task_i.
    ls_customer-header-object_instance-kunnr ls_partner-header-object_instance-bpartner.

    ls_customer-central_data-central VALUE #data-kukla t_input-kukla
                                                data-bahns t_input-bahns
                                                data-bahne t_input-bahne
                                                data-katr1 t_input-katr1
                                                data-katr2 t_input-katr2
                                                data-katr3 t_input-katr3
                                                data-katr4 t_input-katr4
                                                data-katr5 t_input-katr5

                                                datax-kukla abap_true
                                                datax-bahns abap_true
                                                datax-bahne abap_true
                                                datax-katr1 abap_true
                                                datax-katr2 abap_true
                                                datax-katr3 abap_true
                                                datax-katr4 abap_true
                                                datax-katr5 abap_true
                                              ).

****税率数据************************************************
    ls_customer-central_data-tax_ind-tax_ind VALUE #task g_object_task_i

                                                          data_key-aland 'CN'
                                                          data_key-tatyp 'MWST'

                                                          data-taxkd  t_input-taxkd

                                                          datax-taxkd abap_true )
                                                      ).
****公司代码数据************************************************
    ls_customer-company_data-company =  VALUE #task g_object_task_i

                                                   data_key-bukrs t_input-bukrs

                                                   data-akont t_input-akont
                                                   data-zuawa t_input-zuawa
                                                   data-zterm t_input-zterm

                                                   datax-akont abap_true
                                                   datax-zuawa abap_true
                                                   datax-zterm abap_true )
                                               ).

****销售数据************************************************
    ls_customer-sales_data-sales VALUE #task g_object_task_i

                                              data_key-vkorg t_input-vkorg
                                              data_key-spart t_input-spart
                                              data_key-vtweg t_input-vtweg

                                              data-bzirk   t_input-bzirk
                                              data-konda   t_input-konda
                                              data-kalks   t_input-kalks
                                              data-vsbed   t_input-vsbed
                                              data-zterm   t_input-zterm1
                                              data-waers   t_input-waers
                                              data-ktgrd   t_input-ktgrd
                                              data-inco1   t_input-inco1
                                              data-inco2_l t_input-inco2_l
                                              data-vwerk   t_input-vwerk

                                              datax-bzirk   abap_true
                                              datax-konda   abap_true
                                              datax-kalks   abap_true
                                              datax-vsbed   abap_true
                                              datax-zterm   abap_true
                                              datax-waers   abap_true
                                              datax-ktgrd   abap_true
                                              datax-inco1   abap_true
                                              datax-inco2_l abap_true
                                              datax-vwerk   abap_true

                                              functions-functions VALUE #task           g_object_task_i
                                                                               data_key-parvw 'Z1'
                                                                               data-partner   t_input-kunnr
                                                                               datax-partner  abap_true  )
                                                                             "默认以下合作伙伴功能,必须全部传入。。。否则客户相关数据创建失败
                                                                             task           g_object_task_i
                                                                               data_key-parvw 'AG'
                                                                               datax-partner  abap_true  )

                                                                             task           g_object_task_i
                                                                               data_key-parvw 'RE'
                                                                               datax-partner  abap_true  )

                                                                             task           g_object_task_i
                                                                               data_key-parvw 'RG'
                                                                               datax-partner  abap_true  )

                                                                             task           g_object_task_i
                                                                               data_key-parvw 'WE'
                                                                               datax-partner  abap_true  )        )

                                            )
                                          ).

    ls_data-partner  ls_partner.
    ls_data-customer ls_customer.
    ls_data-ensure_create-create_customer abap_true.
    APPEND ls_data TO lt_data.

    cl_md_bp_maintain=>maintain(
      EXPORTING
        i_data   lt_data
      IMPORTING
        e_return lt_return ).

    LOOP AT lt_return INTO ls_return.

      LOOP AT ls_return-object_msg INTO t_return WHERE type 'E' OR type 'A'.
        lv_error abap_true.
        APPEND t_return.
      ENDLOOP.

    ENDLOOP.

    IF lv_error space.
      CLEAR t_return.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait abap_true.

* 根据伙伴GUID取出客户编号
      CLEAR:
        lt_partnerguid_list,
        lt_customer_list.

      ls_partnerguid_list ls_partner-header-object_instance-bpartnerguid.
      APPEND ls_partnerguid_list TO lt_partnerguid_list.
      lt_customer_list cvi_mapper=>get_instance)->get_assigned_customers_for_bps(
                                                i_partner_guids lt_partnerguid_list ).
      READ TABLE lt_customer_list INDEX TRANSPORTING NO FIELDS.
      IF sy-subrc EQ 0.
        CONCATENATE '经销商客户' t_input-partner '创建成功!' INTO t_return-message.
        t_return-type    'S'.
        t_return-id    t_input-partner.
*        OUT_RETURN-type    = 'S'.
        "创建客户信贷数据
        lt_n_ukmbp_cms VALUE #partner          ls_partner-header-object_instance-bpartner
                                    check_rule       t_input-check_rule
                                    limit_rule       t_input-limit_rule
                                    risk_class       t_input-risk_class
                                    risk_class_chgdt sy-datum
                                    change_id        g_object_task_i
                                  )
                                ).

        lt_n_ukmbp_cms_sgm VALUE #partner        ls_partner-header-object_instance-bpartner
                                        credit_limit   t_input-credit_limit
                                        limit_chg_date sy-datum
                                        change_id      g_object_task_i
                                      )
                                    ).

        CALL FUNCTION 'UKM_DB_UKMBP_CMS_EXECUTE'
          TABLES
            n_ukmbp_cms     lt_n_ukmbp_cms
            n_ukmbp_cms_sgm lt_n_ukmbp_cms_sgm
          EXCEPTIONS
            error_message   1.

        IF sy-subrc <> 0.
          t_return-message t_return-message && '经销商客户创建信贷出错!'.
*          OUT_RETURN-message = OUT_RETURN-message && '网点客户创建信贷出错!'.
        ENDIF.

      ELSE.
        "可能创建成功了BP,但未创建成功Customer

        ls_cvis_error cvi_mapper=>get_instance)->undo_assignments(
                                                i_for_partners lt_partnerguid_list ).

        t_return-message '经销商客户创建出错,经销商客户部分数据出错,请检查是否是BP伙伴功能问题'.
        t_return-type    'E'.

*        OUT_RETURN-message = '网点客户创建出错,网点客户部分数据出错,请检查是否是BP伙伴功能问题'.
*        OUT_RETURN-type    = 'S'.
      ENDIF.
      APPEND t_return.
    ELSE.

      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.



  ENDLOOP.


ENDFUNCTION.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值