ABAP 客户主数据创建

1、功能说明:

1.1、创建/修改客户主数据
1.2、维护通用/公司代码/销售/信贷视图

2、代码

*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IS_INPUT) TYPE  xxx
*"  EXPORTING
*"     REFERENCE(ES_OUTPUT) TYPE  xxx
*"----------------------------------------------------------------------
  "根据伙伴GUID号取出客户编号
  DATA:lt_partnerguid_list TYPE bu_partner_guid_t,
       ls_partnerguid_list LIKE LINE OF lt_partnerguid_list,
       lt_cust_list        TYPE cvis_cust_link_t,
       ls_cust_list        TYPE cvi_cust_link.
  DATA : lv_str1 TYPE char200,
         lv_str2 TYPE char200,
         lv_str3 TYPE char20.
  DATA : ls_zsmm_009 TYPE zsmm_009 .

  DATA :lt_data  TYPE cvis_ei_extern_t,
        lv_boole TYPE boole_d,
        lv_task1 TYPE char1,
        lv_task2 TYPE char1.

  DATA : lv_kunnr TYPE kunnr,
         lv_vkorg TYPE vkorg,
         lv_vtweg TYPE vtweg,
         lv_spart TYPE spart.

  DATA : lt_functions TYPE TABLE OF cmds_ei_functions,
         ls_functions TYPE cmds_ei_functions.

  DEFINE field_check.
    IF &1 IS INITIAL .
      es_output-mt_oa057_resp-msg = es_output-mt_oa057_resp-msg && &2 .
    ENDIF .
  END-OF-DEFINITION.

  DATA lv_uuid  TYPE but000-partner_guid. "UUID
  DATA(ls_basic)   = is_input-mt_oa057_req-input-basic_view .
  DATA(lt_bank)    = is_input-mt_oa057_req-input-bank_view .
  DATA(lt_company) = is_input-mt_oa057_req-input-company_view .
  DATA(lt_sales)   = is_input-mt_oa057_req-input-sales_view .
  DATA(ls_umk)     = is_input-mt_oa057_req-input-umk_view .

  field_check :ls_basic-zflag        '操作标识/' .
*  field_check :ls_basic-partner_role '角色/' .
  field_check :ls_basic-bu_group     '客户分组/' .
  field_check :ls_basic-name_org1    '客户名称/' .
  field_check :ls_basic-bu_sort1     '客户简称/' .
  field_check :ls_basic-street       '注册地址/' .
  field_check :ls_basic-land1        '国家/' .
  field_check :ls_basic-region       '省份/' .
  field_check :ls_basic-ort01        '城市/' .
*  field_check :ls_basic-taxtype      '税类别/' .
*  field_check :ls_basic-taxnumxl     '税号/' .
  field_check :ls_basic-zoaid        'OA流程编号/' .

  IF es_output-mt_oa057_resp-msg IS NOT INITIAL .
    es_output-mt_oa057_resp-type = 'E' .
    SHIFT es_output-mt_oa057_resp-msg RIGHT DELETING TRAILING '/'.
    es_output-mt_oa057_resp-msg = es_output-mt_oa057_resp-msg && '不能为空' .
  ELSE .
    lv_str1 = ls_basic-name_org1 .
    lv_str2 = ls_basic-street .

    ls_basic-partner = lv_kunnr = |{ ls_basic-partner ALPHA = IN }|.

    CASE ls_basic-zflag.
      WHEN '0'.
        ls_basic-zflag = 'I' .
      WHEN '1'.
        ls_basic-zflag = 'U' .
    ENDCASE.

    CHECK ls_basic-zflag = 'I' OR ls_basic-zflag = 'U' .

    CASE ls_basic-zflag.
      WHEN 'I'.
        lv_task1 = 'I' .
        lv_task2 = 'I' .
      WHEN 'U'.
        lv_task1 = 'M' .
        lv_task2 = 'U' .
    ENDCASE.

    APPEND INITIAL LINE TO lt_data ASSIGNING FIELD-SYMBOL(<fs_data>) .

*---抬头数据
    <fs_data>-partner-header-object_task = lv_task1.
    IF ls_basic-zflag = 'I' .
      TRY .
          lv_uuid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
        CATCH cx_uuid_error.
      ENDTRY.
    ELSEIF ls_basic-zflag = 'U' .
      SELECT SINGLE partner_guid INTO lv_uuid
        FROM but000
        WHERE partner = lv_kunnr .
    ENDIF .

*---中心数据
    " 合作伙伴数据
    IF ls_basic-zflag = 'I' .
      <fs_data>-partner-central_data-common-data-bp_control-category        = '2'. " 业务伙伴类别
      <fs_data>-partner-central_data-common-data-bp_control-grouping        = ls_basic-bu_group. " 业务伙伴分组
      <fs_data>-partner-central_data-role-roles = VALUE #( ( task = 'I' data_key = 'FLCU00' )
                                                           ( task = 'I' data_key = 'FLCU01' )
                                                           ( task = 'I' data_key = 'UKM000' ) ).
    ELSE .
      <fs_data>-partner-header-object_instance-bpartner = |{ ls_basic-partner ALPHA = IN }|.
      <fs_data>-partner-header-object = lv_uuid. "GUID
      <fs_data>-partner-header-object_instance-bpartnerguid = lv_uuid. "GUID
    ENDIF .
    <fs_data>-partner-header-object_instance-bpartnerguid = lv_uuid. "GUID
    <fs_data>-partner-central_data-common-data-bp_organization-name1      = lv_str1+0(40).  " 组织名称1
    <fs_data>-partner-central_data-common-data-bp_organization-name2      = lv_str1+40(40). " 组织名称2
    <fs_data>-partner-central_data-common-data-bp_organization-name3      = lv_str1+80(40). " 组织名称3
    <fs_data>-partner-central_data-common-data-bp_centraldata-searchterm1 = ls_basic-bu_sort1. " 客户简称
    <fs_data>-partner-central_data-common-datax-bp_organization-name1      = 'X'. " 组织名称1
    <fs_data>-partner-central_data-common-datax-bp_organization-name2      = 'X'. " 组织名称2
    <fs_data>-partner-central_data-common-datax-bp_organization-name3      = 'X'. " 组织名称3
    <fs_data>-partner-central_data-common-datax-bp_centraldata-searchterm1 = 'X'. " 客户简称

    <fs_data>-partner-finserv_data-common-data-fsbp_centrl-group_feature = ls_basic-group_feature.  "关联方标识
    <fs_data>-partner-finserv_data-common-datax-fsbp_centrl-group_feature = 'X'.  "关联方标识

    IF ls_basic-remark_1 IS NOT INITIAL .
      <fs_data>-partner-finserv_data-common-data-fsbp_centrl-unw_remark = ls_basic-remark_1.  "联系人职位
      <fs_data>-partner-finserv_data-common-datax-fsbp_centrl-unw_remark = 'X'.  "联系人职位
    ENDIF .

*---地址数据
    IF ls_basic-zflag = 'U' .
      SELECT SINGLE address_guid
        INTO @DATA(lv_address_guid)
        FROM but020
        WHERE partner = @ls_basic-partner.
    ENDIF .
    CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
      EXPORTING
        input            = ls_basic-spras
      IMPORTING
        output           = ls_basic-spras
      EXCEPTIONS
        unknown_language = 1
        OTHERS           = 2.

    APPEND VALUE #( task = lv_task1
                    data_key-guid                    = lv_address_guid
                    data-postal-data-standardaddress = abap_true
                    data-postal-data-street          = lv_str2+0(60)          "注册地址
                    data-postal-data-str_suppl1      = lv_str2+60(40)         "注册地址
                    data-postal-data-country         = ls_basic-land1                 "国家
                    data-postal-data-region          = ls_basic-region                "省份
                    data-postal-data-city            = ls_basic-ort01                 "城市
                    data-postal-data-postl_cod1      = ls_basic-pstlz                 "邮编
                    data-postal-data-langu           = ls_basic-spras                 "语言
                    data-postal-data-c_o_name        = ls_basic-name1

                    data-postal-datax-standardaddress = 'X'
                    data-postal-datax-street          = 'X'         "注册地址
                    data-postal-datax-str_suppl1      = 'X'         "注册地址
                    data-postal-datax-country         = 'X'         "国家
                    data-postal-datax-region          = 'X'         "省份
                    data-postal-datax-city            = 'X'         "城市
                    data-postal-datax-postl_cod1      = 'X'         "邮编
                    data-postal-datax-langu           = 'X'         "语言
                    data-postal-datax-c_o_name        = 'X' )
                    TO <fs_data>-partner-central_data-address-addresses .

*---客户联系信息
    READ TABLE <fs_data>-partner-central_data-address-addresses ASSIGNING FIELD-SYMBOL(<fs_address>) INDEX 1.
    IF ls_basic-telf1_1 IS NOT INITIAL .
      APPEND VALUE #( contact-task   = lv_task2
                      contact-data-telephone  = ls_basic-telf1_1
                      contact-data-r_3_user   = '3'
                      contact-datax-telephone = 'X'
                      contact-datax-r_3_user  = 'X' )         "电话号
                   TO <fs_address>-data-communication-phone-phone .
    ENDIF .

    IF ls_basic-telf1_2 IS NOT INITIAL .
      APPEND VALUE #( contact-task   = lv_task2
                      contact-data-telephone  = ls_basic-telf1_2
                      contact-data-r_3_user   = '3'
                      contact-datax-telephone = 'X'
                      contact-datax-r_3_user  = 'X' )         "电话号
                   TO <fs_address>-data-communication-phone-phone .
    ENDIF .

    IF ls_basic-email1 IS NOT INITIAL .
      APPEND VALUE #( contact-task   = lv_task2
                      contact-data-e_mail  = ls_basic-email1
                      contact-datax-e_mail = 'X' )         "邮箱
                   TO <fs_address>-data-communication-smtp-smtp .
    ENDIF .

    IF ls_basic-email2 IS NOT INITIAL .
      APPEND VALUE #( contact-task   = lv_task2
                      contact-data-e_mail  = ls_basic-email2
                      contact-datax-e_mail = 'X' )         "邮箱
                   TO <fs_address>-data-communication-smtp-smtp .
    ENDIF .

*---税号
    IF ls_basic-taxnumxl IS NOT INITIAL .
      APPEND VALUE #( task = lv_task2
                      data_key-taxtype   = ls_basic-taxtype                              "税类别
                      data_key-taxnumber = ls_basic-taxnumxl                             "税号
                      data_key-taxnumxl  = ls_basic-taxnumxl )                           "税号
                   TO <fs_data>-partner-central_data-taxnumber-taxnumbers .
    ENDIF .
*---银行数据
    LOOP AT lt_bank INTO DATA(ls_bank) .
      lv_str3 = ls_bank-bankn .
      APPEND VALUE #( task            = 'I'
                      data_key        = |{ ls_bank-bkvid ALPHA = IN }| " 银行明细标识
                      data-bank_ctry  = ls_bank-banks " 银行国家代码
                      datax-bank_ctry = 'X'
                      data-bank_key   = ls_bank-bankl " 银行代码
                      datax-bank_key  = 'X'
                      data-bank_acct  = lv_str3+0(18) " 银行帐户号码
                      datax-bank_acct = 'X'
                      data-bank_ref   = lv_str3+18(2) "ls_bank-bkref " 参考细节
                      datax-bank_ref  = 'X' )
                   TO <fs_data>-partner-central_data-bankdetail-bankdetails .
      "如果银行主数据不存在或发生变化,需要做创建或修改银行主数据
      MOVE-CORRESPONDING ls_bank TO ls_zsmm_009 .
      PERFORM frm_handle_bank USING ls_zsmm_009 CHANGING lv_msg_line.
      IF lv_msg_line IS NOT INITIAL.
        IF es_output-mt_oa057_resp-msg IS INITIAL.
          es_output-mt_oa057_resp-msg = lv_msg_line.
        ELSE.
          es_output-mt_oa057_resp-msg = es_output-mt_oa057_resp-msg && '|' && lv_msg_line.
        ENDIF.
      ENDIF.
      CLEAR : ls_bank ,lv_str3.
    ENDLOOP .

    "即是客户又是供应商
    IF ls_basic-lifnr IS NOT INITIAL .
      <fs_data>-customer-central_data-central-data-lifnr = ls_basic-lifnr .
      <fs_data>-customer-central_data-central-datax-lifnr = 'X' .
    ENDIF .

*------------------------------------------------------------------
* 客户数据
*------------------------------------------------------------------
*---抬头数据
    <fs_data>-customer-header-object_task = lv_task2.
    IF ls_basic-zflag = 'I' .
      <fs_data>-ensure_create-create_customer = abap_true.
      <fs_data>-customer-header-object_task = 'I'.
    ELSE .
      <fs_data>-customer-header-object_task = 'U'.
      <fs_data>-customer-header-object_instance-kunnr = |{ ls_basic-partner ALPHA = IN }| .
    ENDIF.

    "公司代码数据
    IF ls_basic-bu_group <> 'ZC03' .
      LOOP AT lt_company INTO DATA(ls_company) .
        IF ls_basic-zflag = 'I' .
          lv_comp_task = 'I' .
        ELSE.
          SELECT COUNT(*) FROM knb1 WHERE kunnr = ls_basic-partner AND bukrs = ls_company-bukrs .
          IF sy-subrc = 0 ."更新
            lv_comp_task = 'U' .
          ELSE ."新建
            lv_comp_task = 'I' .
          ENDIF .
        ENDIF .
        APPEND VALUE #( task           = lv_comp_task
                        data_key-bukrs = ls_company-bukrs                       "公司代码
                        data-akont     = |{ ls_company-akont ALPHA = IN }|      "统驭科目
                        datax-akont    = 'X'                                    "统驭科目
                        data-zterm     = ls_company-zterm                       "付款条件
                        datax-zterm    = 'X' )                                  "付款条件
                     TO <fs_data>-customer-company_data-company .
        CLEAR : ls_company .
      ENDLOOP .
    ENDIF .

    IF ls_basic-bu_group <> 'ZC02' .
      LOOP AT  lt_sales INTO DATA(ls_sales) .
*---业务伙伴数据
        lt_functions = VALUE #( ( data_key-parvw = 'AG' data-defpa = 'X' datax-defpa = 'X' )
                                ( data_key-parvw = 'RE' data-defpa = 'X' datax-defpa = 'X' )
                                ( data_key-parvw = 'RG' data-defpa = 'X' datax-defpa = 'X' )
                                ( data_key-parvw = 'WE' data-defpa = 'X' datax-defpa = 'X' ) ) .
*---销售数据
        APPEND VALUE #( task = lv_task2
                        data_key-vkorg      = ls_sales-vkorg
                        data_key-vtweg      = ls_sales-vtweg
                        data_key-spart      = ls_sales-spart
                        data-waers          = ls_sales-waers
                        data-kalks          = '1'
                        data-vsbed          = ls_sales-vsbed
                        data-inco1          = ls_sales-inco1
                        data-inco2_l        = ls_sales-inco2_l
                        data-zterm          = ls_sales-zterm
                        data-ktgrd          = ls_sales-ktgrd
                        functions-functions = lt_functions
                        datax-waers         = 'X'
                        datax-kalks         = 'X'
                        datax-vsbed         = 'X'
                        datax-inco1         = 'X'
                        datax-inco2_l       = 'X'
                        datax-zterm         = 'X'
                        datax-ktgrd         = 'X' )
                     TO <fs_data>-customer-sales_data-sales .
*---销项税
        APPEND VALUE #( task           = lv_task2
                        data_key-aland = 'CN'
                        data_key-tatyp = 'MWST'
                        data-taxkd     = ls_sales-taxkd
                        datax-taxkd    = 'X' )
                     TO <fs_data>-customer-central_data-tax_ind-tax_ind .
        CLEAR : ls_sales .
      ENDLOOP .
    ENDIF .

    IF es_output-mt_oa057_resp-msg IS INITIAL.
*---客户主数据模拟维护
      "若是修改的情况,先删除银行数据在重建
      IF ls_basic-zflag = 'U' .
        SELECT * INTO TABLE @DATA(lt_but0bk)
                FROM but0bk
                WHERE partner = @lv_kunnr.

        LOOP AT lt_but0bk INTO DATA(ls_but0bk).
          CALL FUNCTION 'BUPA_BANKDETAIL_REMOVE'
            EXPORTING
              iv_partner = ls_but0bk-partner
              iv_bkvid   = ls_but0bk-bkvid.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
          WAIT UP TO '0.5' SECONDS .
        ENDLOOP.
      ENDIF .

      cl_md_bp_maintain=>maintain(
        EXPORTING
          i_data   = lt_data
        IMPORTING
          e_return = DATA(lt_return) ).
      LOOP AT lt_return INTO DATA(ls_return) .
        SORT ls_return-object_msg BY id number message.
        DELETE ADJACENT DUPLICATES FROM ls_return-object_msg COMPARING id number message.
        LOOP AT ls_return-object_msg INTO DATA(ls_error) WHERE type CA 'AEX'.
          IF es_output-mt_oa057_resp-msg IS INITIAL.
            es_output-mt_oa057_resp-msg = ls_error-message.
          ELSE.
            CONCATENATE es_output-mt_oa057_resp-msg ls_error-message INTO es_output-mt_oa057_resp-msg SEPARATED BY '|'.
          ENDIF.
        ENDLOOP.
        IF sy-subrc = 0 .
          EXIT .
        ENDIF .
      ENDLOOP .

      IF es_output-mt_oa057_resp-msg IS INITIAL .
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        WAIT UP TO 1 SECONDS .
        "根据UUID获取供应商编码
        ls_partnerguid_list = lv_uuid.
        APPEND ls_partnerguid_list TO lt_partnerguid_list.

        lt_cust_list = cvi_mapper=>get_instance( )->get_assigned_customers_for_bps(
        i_partner_guids = lt_partnerguid_list ).

        IF lt_cust_list IS NOT INITIAL .
          READ TABLE lt_cust_list INTO ls_cust_list INDEX 1.
          IF sy-subrc EQ 0.
            es_output-mt_oa057_resp-data-kunnr = ls_cust_list-customer.
          ENDIF.
        ENDIF .
        es_output-mt_oa057_resp-type = 'S' .
        es_output-mt_oa057_resp-msg  = '客户维护成功'.

        IF ls_basic-bu_group = 'ZC03' AND ls_basic-zflag = 'I'."更新送货地址
          CLEAR : lv_msg_line .
          PERFORM frm_change_custom USING lt_sales ls_cust_list-customer lv_kunnr  CHANGING lv_msg_line.
          IF lv_msg_line IS NOT INITIAL .
            es_output-mt_oa057_resp-msg = es_output-mt_oa057_resp-msg && '/送货地址更新失败' && lv_msg_line .
          ENDIF .
        ENDIF .

        IF ls_umk IS NOT INITIAL ."信贷试图维护
          CLEAR : lv_msg_line .
          PERFORM frm_create_ukmd USING ls_umk ls_cust_list-customer CHANGING lv_msg_line .
          IF lv_msg_line IS NOT INITIAL .
            es_output-mt_oa057_resp-msg = es_output-mt_oa057_resp-msg && '/信贷视图维护失败失败' && lv_msg_line .
          ENDIF .
        ENDIF .

        IF ls_basic-taxnumxl IS NOT INITIAL .

          DO 10 TIMES.
            SELECT SINGLE * FROM dfkkbptaxnum INTO @DATA(ls_tax)
                        WHERE partner EQ @ls_cust_list-customer.
            IF sy-subrc EQ 0.
              IF ls_tax-taxtype EQ 'CN5'.
                CALL FUNCTION 'BAPI_BUPA_TAX_REMOVE'
                  EXPORTING
                    businesspartner = ls_cust_list-customer
                    taxtype         = 'CN5'.
                CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
                  EXPORTING
                    businesspartner = ls_cust_list-customer
                    taxtype         = 'CN0'
                    taxnumber       = CONV char20( ls_basic-taxnumxl ).
                CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
              ENDIF.
              EXIT.
            ELSE.
              WAIT UP TO '0.2' SECONDS.
            ENDIF.
          ENDDO.
        ENDIF .
      ELSE .
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        es_output-mt_oa057_resp-type = 'E'.
        es_output-mt_oa057_resp-msg  = '客户创建失败' && es_output-mt_oa057_resp-msg.
      ENDIF .
    ELSE .
      es_output-mt_oa057_resp-type = 'E' .
    ENDIF.
  ENDIF .


FORM frm_handle_bank USING ps_data TYPE zsmm_009 CHANGING pv_msg TYPE string.
  DATA: lv_bank_key TYPE bankk,
        ls_return   TYPE bapiret2.

  SELECT SINGLE * FROM bnka
  WHERE banks EQ @ps_data-banks
  AND bankl EQ @ps_data-bankl
  INTO @DATA(ls_bnka).

  IF sy-subrc EQ 0.
    IF ls_bnka-banka EQ ps_data-banka.
    ELSE. "银行名称发生修改
      CALL FUNCTION 'BAPI_BANK_CHANGE'
        EXPORTING
          bankcountry   = ps_data-banks
          bankkey       = ps_data-bankl
          bank_address  = VALUE bapi1011_address( bank_name = ps_data-banka )
          bank_addressx = VALUE bapi1011_addressx( bank_name = abap_true )
*         BANK_DETAIL   =
*         BANK_DETAILX  =
*         BANK_ADDRESS1 =
*         BANK_ADDRESS1X            =
*         I_CHECK_BEFORE_SAVE       =
        IMPORTING
          return        = ls_return.
      IF ls_return-type CA 'AEX'.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        IF pv_msg IS INITIAL.
          pv_msg = TEXT-006 && ls_return-message.
        ELSE.
          pv_msg = pv_msg && ',' && ls_return-message.
        ENDIF.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
      ENDIF.
    ENDIF.
  ELSE.
    CALL FUNCTION 'BAPI_BANK_CREATE'
      EXPORTING
        bank_ctry    = ps_data-banks
        bank_key     = ps_data-bankl
        bank_address = VALUE bapi1011_address( bank_name = ps_data-banka )
      IMPORTING
        return       = ls_return
        bankkey      = lv_bank_key.
    IF lv_bank_key IS NOT INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      IF pv_msg IS INITIAL.
        pv_msg = TEXT-005 && ls_return-message.
      ELSE.
        pv_msg = pv_msg && ',' && ls_return-message.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_change_custom
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LS_CUST_LIST_CUSTOMER
*&      --> LS_BASIC_PARTNER
*&      <-- LV_MSG_LINE
*&---------------------------------------------------------------------*
FORM frm_change_custom  USING    p_lt_input    TYPE zpodt_oa057_req_sales_view_tab
                                 p_ls_customer TYPE kunnr
                                 p_ls_kunnr    TYPE kunnr
                        CHANGING p_lv_msg_line TYPE string.
  DATA :lt_data      TYPE cvis_ei_extern_t,
        lv_uuid      TYPE but000-partner_guid,
        lt_functions TYPE TABLE OF cmds_ei_functions,
        ls_functions TYPE cmds_ei_functions.
  APPEND INITIAL LINE TO lt_data ASSIGNING FIELD-SYMBOL(<fs_data>) .
  <fs_data>-partner-header-object_task = 'M'.
  <fs_data>-partner-header-object_instance-bpartner = |{ p_ls_kunnr ALPHA = IN }|.
  SELECT SINGLE partner_guid INTO lv_uuid
    FROM but000
    WHERE partner = <fs_data>-partner-header-object_instance-bpartner.
  <fs_data>-partner-header-object = lv_uuid.
  <fs_data>-partner-header-object_instance-bpartnerguid = lv_uuid. "GUID
  LOOP AT p_lt_input INTO DATA(ls_input) .
    lt_functions = VALUE #( ( task = 'I' data_key-parvw = 'WE' data-partner = p_ls_customer datax-partner = 'X' ) ) .
    APPEND VALUE #( task = 'M'
                    data_key-vkorg      = ls_input-vkorg
                    data_key-vtweg      = ls_input-vtweg
                    data_key-spart      = ls_input-spart
                    functions-functions = lt_functions )
                 TO <fs_data>-customer-sales_data-sales .
  ENDLOOP .
  cl_md_bp_maintain=>maintain(
    EXPORTING
      i_data   = lt_data
    IMPORTING
      e_return = DATA(lt_return) ).

  LOOP AT lt_return INTO DATA(ls_return) .
    SORT ls_return-object_msg BY id number message.
    DELETE ADJACENT DUPLICATES FROM ls_return-object_msg COMPARING id number message.
    LOOP AT ls_return-object_msg INTO DATA(ls_error) WHERE type CA 'AEX'.
      p_lv_msg_line = ls_error-message.
    ENDLOOP.
  ENDLOOP .
  IF p_lv_msg_line IS NOT INITIAL .
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE .
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ENDIF .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_create_ukmd
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LS_UMK
*&      --> LS_CUST_LIST_CUSTOMER
*&      <-- LV_MSG_LINE
*&---------------------------------------------------------------------*
FORM frm_create_ukmd  USING    p_ls_umk TYPE zpodt_oa057_req_umk_view
                               p_ls_cust_list_customer TYPE kunnr
                      CHANGING p_lv_msg_line TYPE string.
  DATA: io_facade        TYPE REF TO cl_ukm_facade,
        io_bupa_factory  TYPE REF TO cl_ukm_bupa_factory,
        io_partner       TYPE REF TO cl_ukm_business_partner,
        io_account       TYPE REF TO cl_ukm_account,
        lw_bp_credit_sgm TYPE ukm_s_bp_cms_sgm.

  DATA: lwa_ukm_s_bp_cms TYPE ukm_s_bp_cms.
  DATA: lv_partner      TYPE bu_partner,
        lv_credit_sgmnt TYPE ukm_credit_sgmnt.

*  创建'MAINTAIN'对象
*  io_facade  = cl_ukm_facade=>create( i_activity = cl_ukm_cnst_eventing=>bp_maintenance ).
*  io_bupa_factory = io_facade->get_bupa_factory( ).
  io_bupa_factory = cl_ukm_facade=>create( i_activity = cl_ukm_cnst_eventing=>bp_maintenance )->get_bupa_factory( ).

  lv_partner      = p_ls_cust_list_customer. "客户代码
  lv_credit_sgmnt = p_ls_umk-credit_sgmnt."信用段

  io_partner = io_bupa_factory->get_business_partner( lv_partner ).
  io_partner->get_bp_cms( IMPORTING es_bp_cms = lwa_ukm_s_bp_cms ).

  lwa_ukm_s_bp_cms-risk_class = p_ls_umk-risk_class. "风险类
  lwa_ukm_s_bp_cms-check_rule = p_ls_umk-check_rule. "检查规则
  lwa_ukm_s_bp_cms-limit_rule = p_ls_umk-limit_rule. "计分规则

  io_partner->set_bp_cms( lwa_ukm_s_bp_cms ).

  CALL METHOD io_bupa_factory->get_credit_account
    EXPORTING
      i_partner         = lv_partner
      i_credit_sgmnt    = lv_credit_sgmnt
    RECEIVING
      ro_credit_account = io_account.

  io_account->get_bp_cms_sgm( IMPORTING es_bp_cms_sgm = lw_bp_credit_sgm ).

  lw_bp_credit_sgm-credit_limit   = p_ls_umk-credit_limit."信用额度

  io_account->set_bp_cms_sgm( EXPORTING is_bp_cms_sgm = lw_bp_credit_sgm ).

  io_bupa_factory->save_all( EXPORTING i_upd_task = abap_false
                             RECEIVING et_return  = DATA(c_return) ).

  LOOP AT c_return INTO DATA(ls_ret) WHERE msgty CA 'EA' .
    p_lv_msg_line = p_lv_msg_line && ls_ret-message .
    CLEAR : ls_ret .
  ENDLOOP .

ENDFORM.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

消气伟消消气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值