ABAP 客户主数据创建、修改

复制代码
FORM create_costumer  CHANGING is_data TYPE zsds018
                                es_return TYPE zsds019.

  DATA: l_task TYPE bus_ei_smtp_task." VALUE 'I'.
  DATA: l_msg TYPE string.

  DATA: ls_data   TYPE cvis_ei_extern,
        lt_data   TYPE cvis_ei_extern_t,
        lt_return TYPE bapiretm.

  DATA: ls_partner  TYPE bus_ei_extern,     "业务伙伴
        ls_customer TYPE cmds_ei_extern.    "客户

  DATA : lt_functions TYPE cmds_ei_functions_t,
         ls_functions TYPE cmds_ei_functions,
         lt_sales     TYPE cmds_ei_sales_t,
         ls_sales     TYPE cmds_ei_sales.

  DATA : lt_partnerguid_list TYPE bu_partner_guid_t.

  DATA : l_bpartnerguid TYPE bu_partner_guid,
         lv_kunnr       TYPE but000-partner.

  DATA : l_check TYPE bus_ei_smtp_task.
*         l_utask TYPE bus_ei_smtp_task.

  DATA : lt_zsdt019 TYPE TABLE OF zsdt019,
         ls_zsdt019 TYPE zsdt019.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = is_data-kunnr
    IMPORTING
      output = is_data-kunnr.

  SELECT SINGLE partner_guid,
                partner
                FROM but000 AS a
                INTO @DATA(ls_but000)
                WHERE partner = @is_data-kunnr.
  l_bpartnerguid = ls_but000-partner_guid.
  lv_kunnr       = ls_but000-partner.

  IF l_bpartnerguid IS INITIAL.
*    l_utask = is_data-zflag.
*****客户数据表头**********************************************
*    IF is_data-zflag = 'U'.
*      l_task = 'U'.
*      l_utask = 'U'.
*    ENDIF.
*    SELECT COUNT(*) FROM kna1 WHERE kunnr = is_data-kunnr.
*    IF sy-subrc = 0.
*      l_task = 'U'.
*      l_utask = 'U'.
*    ENDIF.
*  ELSE.
    TRY .
        l_bpartnerguid = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( ).
      CATCH cx_uuid_error.
    ENDTRY.
  ENDIF.
  IF is_data-zflag = 'D'.
    l_task  = 'U'.
  ELSE.
    l_task = is_data-zflag.
  ENDIF.
*  基础数据

  l_check = l_task.
*  IF l_task = 'I'.
  ls_partner-header-object_task                  = l_task.
*  ELSE.
*    ls_partner-header-object_task                  = l_utask.
*  ENDIF.
  ls_partner-header-object_instance-bpartnerguid = l_bpartnerguid.


*&-----角色
  IF is_data-bu_group = 'Z005'.
    ls_partner-central_data-role-roles = VALUE #( ( task = l_task data_key = 'FLCU00' ) ( task = l_task data_key = 'TR0600' ) ).
  ELSEIF is_data-bu_group = 'Z006'.
    ls_partner-central_data-role-roles = VALUE #( ( task = l_task data_key = 'FLCU01' ) ).
  ELSE.
    ls_partner-central_data-role-roles = VALUE #( ( task = l_task data_key = 'FLCU00' )
    ( task = l_task data_key = 'FLCU01' ) ).
  ENDIF.

*&-----业务合作伙伴数据的中心数据
  ls_partner-central_data-common = VALUE #(
  data = VALUE #( bp_control = VALUE #( category = '2'                                "业务伙伴类别
                                        grouping = is_data-bu_group                   "业务伙伴分组
                                       )

        bp_centraldata = VALUE #( title_key           = is_data-title_medi       "称谓
                                  searchterm1         = is_data-sort1_txt     "检索项
                                  searchterm2         = is_data-sort2_txt
*                                  partnerlanguage  = is_data-langu         "语言
                                  partnerlanguageiso  = is_data-langu         "语言
*                                  partnerexternal     = is_data-zsiskunnr       "客户编码
                                   )

        bp_organization = VALUE #( name1 = is_data-name_org1               "客户名称
                                   name2 = is_data-name_org2
                                    )
                                   )

        datax = VALUE #( bp_centraldata = VALUE #( title_key           = abap_true
                                                   searchterm1         = abap_true
                                                   searchterm2         = abap_true
*                                                   partnerlanguage     = abap_true
                                                   partnerlanguageiso  = abap_true
*                                                   partnerexternal  = abap_true
                          )

        bp_organization = VALUE #( name1 = abap_true
                                   name2 = abap_true
                                  )
                           )
        ).

*&-----标识编号
*  IF l_check = 'M'.
*    l_task = 'U'.
*  ENDIF.
  IF is_data-idnumber IS NOT INITIAL.
    IF l_task = 'U'.
      SELECT SINGLE * FROM but0id INTO @DATA(ls_but0id) WHERE partner = @is_data-kunnr AND type = 'BUP009'.
      ls_partner-central_data-ident_number-ident_numbers = VALUE #( ( task = 'D'
      data_key-identificationcategory = 'BUP009'
      data_key-identificationnumber   = ls_but0id-idnumber
      data-idinstitute                = ls_but0id-institute
      datax-idinstitute               = abap_true
      )  ).
    ENDIF.
    ls_partner-central_data-ident_number-ident_numbers = VALUE #( BASE ls_partner-central_data-ident_number-ident_numbers ( task = 'M'
    data_key-identificationcategory = 'BUP009'
    data_key-identificationnumber   = is_data-idnumber
    data-idinstitute                = is_data-institute
    datax-idinstitute               = abap_true

    )  ).
  ENDIF.


  IF is_data-bankacc IS NOT INITIAL.
    ls_partner-central_data-ident_number-ident_numbers =  VALUE #( BASE ls_partner-central_data-ident_number-ident_numbers ( task = l_task
    data_key-identificationcategory = 'BUP010'
    data_key-identificationnumber   = is_data-bankacc
*    data-idinstitute                = is_data-institute
*    datax-idinstitute                = abap_true
    )  ).
  ENDIF.

*&-----地址信息
  IF l_check = 'U'.
*    l_task = 'M'.
    ls_partner-central_data-address-addresses = VALUE #( ( task = '2'
    data = VALUE #( postal = VALUE #( data  = VALUE #(
          city         = is_data-city1         "城市
          postl_cod1   = is_data-post_code1    "邮政编码
          street       = is_data-street        "街道/门牌号
          str_suppl1   = is_data-str_suppl1
          str_suppl2   = is_data-str_suppl2
          str_suppl3   = is_data-str_suppl3
          country      = is_data-country       "国家
          region       = is_data-region        "地区(省份)
          langu        = is_data-langu         "语言代码
          )
          datax = VALUE #( c_o_name     = abap_true
          city         = abap_true
          postl_cod1   = abap_true
          street       = abap_true
          str_suppl1   = abap_true
          str_suppl2   = abap_true
          str_suppl3   = abap_true
          country      = abap_true
          region       = abap_true
          langu        = abap_true
          ) )
          communication-phone-current_state = 'X'
          communication-phone-phone = VALUE #( (
          contact = VALUE #( task = 'M'
          data-telephone  = is_data-tel_number
          data-extension  = is_data-tel_extens
          data-tel_no     = is_data-mob_number
          datax-extension = abap_true
          datax-telephone = abap_true
          datax-tel_no    = abap_true
          ) ) )

          communication-fax-current_state = 'X'
          communication-fax-fax = VALUE #( (
          contact = VALUE #( task = 'M'
          data-fax        = is_data-fax_number
          data-extension  = is_data-fax_extens
          datax-fax       = abap_true
          datax-extension = abap_true
          ) ) )
          communication-smtp-current_state = 'X'
          communication-smtp-smtp = VALUE #( (
          contact = VALUE #( task = 'U'
          data-e_mail  = is_data-smtp_addr
          datax-e_mail = abap_true
          ) ) )
          ) ) ).
  ELSE.
    ls_partner-central_data-address-addresses = VALUE #( ( task = l_task
    data = VALUE #( postal = VALUE #( data  = VALUE #(
                                                       city         = is_data-city1         "城市
                                                       postl_cod1   = is_data-post_code1    "邮政编码
                                                       street       = is_data-street        "街道/门牌号
                                                       str_suppl1   = is_data-str_suppl1
                                                       str_suppl2   = is_data-str_suppl2
                                                       str_suppl3   = is_data-str_suppl3
                                                       country      = is_data-country       "国家
                                                       region       = is_data-region        "地区(省份)
                                                       langu        = is_data-langu         "语言代码
          )
          datax = VALUE #( c_o_name     = abap_true
                           city         = abap_true
                           postl_cod1   = abap_true
                           street       = abap_true
                           str_suppl1   = abap_true
                           str_suppl2   = abap_true
                           str_suppl3   = abap_true
                           country      = abap_true
                           region       = abap_true
                           langu        = abap_true
          ) )

          communication-phone-phone = VALUE #( (
          contact = VALUE #( task = l_task
                             data-telephone  = is_data-tel_number
                             data-extension  = is_data-tel_extens
                             data-tel_no     = is_data-mob_number
                             datax-extension = abap_true
                             datax-telephone = abap_true
                             datax-tel_no    = abap_true
          ) ) )

          communication-fax-fax = VALUE #( (
          contact = VALUE #( task = l_task
          data-fax        = is_data-fax_number
          data-extension  = is_data-fax_extens
          datax-fax       = abap_true
          datax-extension = abap_true
          ) ) )

          communication-smtp-smtp = VALUE #( (
          contact = VALUE #( task = l_task
          data-e_mail  = is_data-smtp_addr
          datax-e_mail = abap_true
          ) ) )
          ) ) ).

  ENDIF.



*&------客户中心数据
  ls_customer-header-object_task = l_task.
  IF l_task = 'I'.
    ls_customer-central_data-central = VALUE #(
           data-ktokd = is_data-bu_group
          data-katr1 = is_data-katr1
          data-stcdt = '00'
          datax-ktokd = abap_true
         datax-stcdt = abap_true
         datax-katr1 = abap_true ).
*  ELSE.
*    ls_customer-header-object_task = l_utask.
  ENDIF.
*&------公司代码数据
  IF is_data-bu_group NE 'Z006'.
    IF is_data-bukrs IS NOT INITIAL.
*      ls_customer-company_data-current_state = 'X'.
      ls_customer-company_data-company = VALUE #( ( task              = l_task
                                                    data_key-bukrs    = is_data-bukrs
                                                    data  = VALUE #( akont = '1122000000'
                                                                     zterm = is_data-zterm1 )
                                                    datax = VALUE #( akont = abap_true
                                                                     zterm = abap_true )
            ) ).
    ENDIF.
  ENDIF.

  IF is_data-bu_group NE 'Z005'.

    IF is_data-bu_group NE 'Z006'.
      IF is_data-vkorg IS NOT INITIAL.

        ls_customer-sales_data-sales = VALUE #( (  task = l_task
        data_key = VALUE #( vkorg = is_data-vkorg
        vtweg = is_data-vtweg
        spart = is_data-spart )

        functions = VALUE #( functions = VALUE #( ( task = l_task
        data_key = VALUE #( parvw = 'RE' parza = '000' )
        )
        ( task = l_task
        data_key = VALUE #( parvw = 'AG' parza = '000' )
        )

        ( task = l_task
        data_key = VALUE #( parvw = 'WE' parza = '000' )
        )

        ( task = l_task
        data_key = VALUE #( parvw = 'RG' parza = '000' )
        )

        ) current_state = 'X' )

        data  = VALUE #(
*              vkbur = is_data-vkbur               "销售部门
*              inco1 = is_data-inco1               "国际贸易条款1
*              inco2 = is_data-inco2_l             "国际贸易条款2
*              vkgrp = is_data-vkgrp               "销售组
              bzirk = is_data-bzirk               "销售区域
*              kdgrp = is_data-kdgrp               "客户组
              waers = is_data-waers               "币别
              kalks = is_data-kalks               "客户定价过程
*              vwerk = '1101'                      "交货工厂
              vwerk = is_data-vwerk               "交货工厂
              ktgrd = is_data-ktgrd               "客户科目分配组
              vsbed = is_data-vsbed               "装运条件
              zterm = is_data-zterm2               "付款条件
              loevm = is_data-loevm )             "删除标识

              datax = VALUE #(
*              vkbur = abap_true
*              inco1 = abap_true
*              inco2 = abap_true
*              vkgrp = abap_true
              bzirk = abap_true
*              kdgrp = abap_true
              waers = abap_true
              kalks = abap_true
              ktgrd = abap_true
              kzazu = abap_true
              vwerk = abap_true
              vsbed = abap_true
              zterm = abap_true
              loevm = abap_true )

              ) ).
      ENDIF.

    ELSEIF is_data-bu_group = 'Z006'.
      IF is_data-vkorg IS NOT INITIAL.

        ls_customer-sales_data-sales = VALUE #( (  task = l_task
        data_key = VALUE #( vkorg = is_data-vkorg
        vtweg = is_data-vtweg
        spart = is_data-spart )

        functions = VALUE #( functions = VALUE #( ( task = l_task
        data_key = VALUE #( parvw = 'WE' parza = '000' )
        )
        ) current_state = 'X' )

        data  = VALUE #(
*              vkbur = is_data-vkbur               "销售部门
*              inco1 = is_data-inco1               "国际贸易条款1
*              inco2 = is_data-inco2_l             "国际贸易条款2
*              vkgrp = is_data-vkgrp               "销售组
              bzirk = is_data-bzirk               "销售区域
*              kdgrp = is_data-kdgrp               "客户组
              waers = is_data-waers               "币别
              kalks = is_data-kalks               "客户定价过程
*              vwerk = '1101'                      "交货工厂
              vwerk = is_data-vwerk               "交货工厂
              ktgrd = is_data-ktgrd               "客户科目分配组
              vsbed = is_data-vsbed               "装运条件
              zterm = is_data-zterm2               "付款条件
              loevm = is_data-loevm )             "删除标识

              datax = VALUE #(
*              vkbur = abap_true
*              inco1 = abap_true
*              inco2 = abap_true
*              vkgrp = abap_true
              bzirk = abap_true
*              kdgrp = abap_true
              waers = abap_true
              kalks = abap_true
              ktgrd = abap_true
              kzazu = abap_true
              vwerk = abap_true
              vsbed = abap_true
              zterm = abap_true
              loevm = abap_true )

              ) ).
      ENDIF.
    ENDIF.
  ENDIF.
*&-----税分类
  ls_customer-central_data-tax_ind-tax_ind = VALUE #( (  task = l_task
  data_key-aland = is_data-country
  data_key-tatyp = 'MWST'
  data-taxkd     = is_data-taxkd
  datax-taxkd    = abap_true
        ) ).

  ls_customer-central_data-tax_ind-current_state = 'X'.

  lt_data = VALUE #( ( partner = ls_partner customer = ls_customer ) ).

  CALL FUNCTION 'CVI_EI_INBOUND_MAI
    EXPORTING
      i_data   = lt_data
    IMPORTING
      e_return = lt_return.

  CLEAR: l_msg.
  LOOP AT lt_return INTO DATA(ls_return).
    LOOP AT ls_return-object_msg INTO DATA(ls_msg) WHERE type CA 'AEX'.
      l_msg = l_msg && |{ ls_msg-message };|.
    ENDLOOP.
  ENDLOOP.

  IF l_msg IS INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true.
    APPEND l_bpartnerguid TO lt_partnerguid_list.
*    SELECT SINGLE partner FROM but000 INTO LS_CUSTOMERS WHERE partner_guid = ls_return-object_key.
    DATA(lt_customers) = cvi_mapper=>get_instance( )->get_assigned_customers_for_bps( i_partner_guids = lt_partnerguid_list ).
    IF lt_customers IS NOT INITIAL.

      es_return-e_code = 'S'.
      es_return-e_partner = |{ lt_customers[ 1 ]-customer ALPHA = OUT }|.
      es_return-e_msg  = |客户创建/修改成功:{ es_return-e_partner }|.

      DATA(lv_kunnrx) = lt_customers[ 1 ]-customer.

      UPDATE zsdt020 SET kunnr = lv_kunnrx WHERE zsiskunnr = is_data-zsiskunnr.

      IF is_data-kunnr IS NOT INITIAL.
        ls_zsdt019-uuid = l_bpartnerguid.
        ls_zsdt019-partner = is_data-zsiskunnr.
        ls_zsdt019-kunnr   = lv_kunnrx.
        ls_zsdt019-bukrs   = is_data-bukrs.
        ls_zsdt019-usnam   = sy-uname.
        ls_zsdt019-datum   = sy-datum.
        ls_zsdt019-uzeit   = sy-uzeit.
        MODIFY zsdt019 FROM ls_zsdt019.
      ENDIF.
    ELSE.
      "可能创建成功了BP,但未创建成功Customer
      SELECT SINGLE partner FROM but000 INTO @DATA(lv_customers) WHERE partner_guid = @l_bpartnerguid.
      DATA(ls_cvis_error) = cvi_mapper=>get_instance( )->undo_assignments(
            i_for_partners = lt_partnerguid_list ).
      es_return-e_code = 'E'.
      es_return-e_msg  = '客户创建/修改出错,客户部分数据出错,请检查是否是BP伙伴功能问题'.
      es_return-e_partner = lv_customers.
    ENDIF.

  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    es_return-e_code = 'E'.
    es_return-e_msg  = l_msg.
  ENDIF.

ENDFORM.
复制代码

 

posted @   Delaine  阅读(1013)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示