您的位置:首页 > 其它

客户主数据参考接口示例

2018-07-11 14:06 253 查看
FUNCTION ZSD_091_UPDATE .
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      T_INPUT STRUCTURE  ZSD091
*"      T_RETURN STRUCTURE  BAPIRETC OPTIONAL
*"----------------------------------------------------------------------
*  CONSTANTS:
*     g_object_task_i TYPE bus_ei_object_task VALUE 'I'.
*    g_object_task_c TYPE bus_ei_object_task VALUE 'C',
*    g_object_task_m TYPE bus_ei_object_task VALUE 'M',
*    g_object_task_u TYPE bus_ei_object_task VALUE 'U',
*    g_object_task_d TYPE bus_ei_object_task VALUE 'D'.
  DATA : g_object_task TYPE bus_ei_object_task.

  data : g_partner type but000-partner.

  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_but020           TYPE TABLE OF but020,
    ls_but020           TYPE but020,
    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.




    select
      partner
      into g_partner
      from but000
      where partner = t_input-partner
      .
    endselect.

    IF g_partner is initial.

      g_object_task = 'C'.

    ELSE.

      g_object_task = 'U'.

    ENDIF.

    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%' .
*    ELSEIF t_input-BU_GROUP = 'ZC02'  .
*    SELECT MAX( kunnr ) INTO  lv_partner   FROM  kna1 WHERE  kunnr LIKE '000002%' .
*    ELSEIF t_input-BU_GROUP = 'ZC04'  .
*    SELECT MAX( kunnr ) INTO lv_partner   FROM  kna1 WHERE  kunnr LIKE '000003%' .
*    ELSEIF t_input-BU_GROUP = 'ZC05'  .
*    SELECT MAX( kunnr ) INTO  lv_partner   FROM  kna1 WHERE  kunnr LIKE '000005%' .
*    ELSEIF t_input-BU_GROUP = 'ZC06'  .
*    SELECT MAX( kunnr ) 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 + 1 .
*   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 PARZA into @data(v_PARZA)  from KNVP where KUNNR = @ls_partner-header-object_instance-bpartner and PARVW = 'Z1'.




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

*    IF sy-subrc = 0 .
*
*      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_c.
    ls_partner-header-object_task                  = g_object_task.
    ls_partner-header-object_instance-bpartnerguid = ls_partner-header-object_instance-bpartner.
****业务合作伙伴数据的中心数据***********************************

    SELECT SINGLE partner_guid
      INTO lv_partner_guid
      FROM but000
      WHERE partner = ls_partner-header-object_instance-bpartner.
    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_c.
        ls_roles-task     = g_object_task.
        ls_roles-data_key = ls_tb003i-role.
        APPEND ls_roles TO lt_roles.
      ENDLOOP.
    ELSE.
*      ls_roles-task     = g_object_task_c.
      ls_roles-task     = g_object_task.
      ls_roles-data_key = t_input-role.
      APPEND ls_roles TO lt_roles.
    ENDIF.
    ls_partner-central_data-role-roles = lt_roles.


    CLEAR: ls_but020,ls_but020.
    SELECT *
      INTO TABLE lt_but020
      FROM but020
      WHERE partner = ls_partner-header-object_instance-bpartner.
    "取最新地址guid
    SORT lt_but020 BY partner addrnumber DESCENDING.
    READ TABLE lt_but020 INTO ls_but020 INDEX 1.


    "地址信息
    CLEAR lt_addresses.
*    ls_addresses-task = g_object_task_m.
    ls_addresses-task = g_object_task.
    ls_addresses-data_key-guid             = ls_but020-address_guid.
    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_c.
    ls_phone-contact-task            = g_object_task.
    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_c.
    ls_phone-contact-task            = g_object_task.
    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_c.
    ls_customer-header-object_task           = g_object_task.


    ls_customer-header-object_instance-kunnr = ls_partner-header-object_instance-bpartner.
*    ls_customer-header-object_instance-kunnr = t_input-kunnr.

    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_c
                                                          task = g_object_task

                                                          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_c
                                                   task = g_object_task

                                                   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_u
                                              task = g_object_task

                                              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-inco1   = ''
                                              data-inco2_l = t_input-inco2_l
*****************************************     BY HAND  13074 KANGDI  20180625

                                              data-inco2   = t_input-inco1
*
******************************************************************************

                                              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
*****************************************     BY HAND  13074 KANGDI  20180625
*
                                              datax-inco2   = abap_true
*
******************************************************************************

                                              datax-vwerk   = abap_true



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

                                                                             ( task           = g_object_task
                                                                               data_key-parvw = 'AG'
*                                                                               data-partner   = t_input-kunnr
                                                                               datax-partner  = abap_true  )

*                                                                             ( task           = g_object_task_u
                                                                             ( task           = g_object_task
                                                                               data_key-parvw = 'RE'
                                                                               datax-partner  = abap_true  )

*                                                                             ( task           = g_object_task_u
                                                                             ( task           = g_object_task
                                                                               data_key-parvw = 'RG'
                                                                               datax-partner  = abap_true  )

*                                                                             ( task           = g_object_task_u
                                                                             ( task           = g_object_task
                                                                               data_key-parvw = 'WE'
                                                                               datax-partner  = abap_true  )
                                                                               )

                                            )
                                          ).

    ls_data-partner  = ls_partner.
    ls_data-customer = ls_customer.

    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 1 TRANSPORTING NO FIELDS.
      IF sy-subrc EQ 0.
        CONCATENATE '经销商客户' t_input-partner '修改成功!' INTO t_return-message.
        t_return-type    = 'S'.
*        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
*                                    change_id        = g_object_task_c
                                  )
                                ).

        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
*                                        change_id      = g_object_task_c
                                      )
                                    ).

        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    = 'S'.

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



  ENDLOOP.


ENDFUNCTION.
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: