SAP BP供应商创建(cl_md_bp_maintain=>maintain 通讯信息完全导入指南)

=> 注意事项

  • 批量创建时不能用 commit work and wait;必须用 CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’;真操蛋!!!

1. 代码

  DATA: lt_bp_data   TYPE cvis_ei_extern_t,
        ls_bp_data   TYPE cvis_ei_extern,
        lt_bp_return TYPE bapiretm,
        ls_bp_return TYPE bapireti,
        ls_bapiretc  TYPE bapiretc.

  DATA: lv_runmode     TYPE flag,       "是否创建模式
        lv_ktokk       TYPE ktokk,        "供应商帐户组
        lv_vendor      TYPE but000-partner,
        lv_guid        TYPE but000-partner_guid,         "BP GUID
        lv_object_task TYPE bus_ei_object_task.

  DATA: lt_zmmt004_conf TYPE TABLE OF zmmt004_conf,
        ls_zmmt003_conf TYPE zmmt003_conf,
        ls_zmmt004_conf TYPE zmmt004_conf,
        lt_zmmt003_log  TYPE TABLE OF zmmt003_log,
        ls_but020       TYPE but020.

  FIELD-SYMBOLS: <fs_response>     TYPE zsif_mm_o008_res_0004,
                 <fs_sup_linkmans> TYPE zsif_mm_o008_res_0006.

  DATA: lv_date  TYPE sy-datum,
        lv_time  TYPE sy-uzeit,
        lv_tabix TYPE sy-tabix.


  DATA: ls_return TYPE bapiret2.

  DATA: ls_bp_address TYPE bus_ei_bupa_address.

  "统一日期时间参数
  lv_date = sy-datum.
  lv_time = sy-uzeit.

  "获取BP供应商公司主数据扩充公司配置表
  SELECT * FROM zmmt004_conf INTO TABLE lt_zmmt004_conf.

  "日志记录GUID
  gv_uuid = zcl_abap_comm=>get_system_uuid( ).

  LOOP AT ps_response_data-list ASSIGNING <fs_response>.
    IF <fs_response>-sup_id IS INITIAL.                  "外部给号,必须存在编码才能执行
      CONTINUE.
    ENDIF.

    "BP是否存在
    READ TABLE gt_zmmt003_conf INTO ls_zmmt003_conf WITH KEY sup_id = <fs_response>-sup_id BINARY SEARCH.
    IF sy-subrc = 0.
      lv_ktokk =   'Z009'.                "业务合作伙伴组
      lv_vendor = ls_zmmt003_conf-lifnr.   "关联公司BP编码替换
    ELSE.
      lv_ktokk = 'V001'.
      lv_vendor = <fs_response>-sup_id.
    ENDIF.

    lv_vendor = |{ lv_vendor ALPHA = IN }|.
    SELECT SINGLE partner_guid INTO lv_guid FROM but000 WHERE partner = lv_vendor.
    IF sy-subrc = 0.
      lv_runmode = 'U'.
      SELECT SINGLE * FROM but020 INTO ls_but020 WHERE partner = lv_vendor.
    ELSE.
      lv_runmode = 'I'.
      lv_guid = zcl_abap_comm=>get_system_uuid( ).
    ENDIF.

    "BP GUID
    ls_bp_data-partner-header = VALUE #( object_task = lv_runmode                                                                            "task
                                         object_instance = VALUE #( bpartner = lv_vendor                                                     "供应商编码
                                                                    bpartnerguid = lv_guid ) ).                                              "BP GUID
    "BP Central common
    ls_bp_data-partner-central_data-common = VALUE #( data = VALUE #( bp_control = VALUE #( grouping = lv_ktokk                              "业务伙伴分组
                                                                                            category = '2' )                                 "业务伙伴类别
                                                                      bp_centraldata = VALUE #( "searchterm1 = <fs_response>-sup_abbreviation "搜索项1
                                                                                                title_key = '0003' )                         "称谓
                                                                      bp_organization = VALUE #( name1 = <fs_response>-sup_name )            "名称
                                                                      zzcusr = <fs_response>-create_user_name                                "创建人
                                                                      zzcdat = <fs_response>-create_date                                     "创建时间
                                                                      zzuusr = <fs_response>-update_user_name                                "更新人
                                                                      zzudat = <fs_response>-update_date                                     "更新时间
                                                                      zzasn_flag = SWITCH #( <fs_response>-asn_flag WHEN 'Y' THEN 'X' ELSE '' ) )  "ASN标识

                                                      datax = VALUE #( bp_centraldata = VALUE #( "searchterm1 = abap_true
                                                                                                 title_key = abap_true
                                                                                                  partnerlanguage = abap_true )
                                                                       bp_organization = VALUE #( name1 = abap_true )
                                                                       zzcusr = abap_true
                                                                       zzcdat = abap_true
                                                                       zzuusr = abap_true
                                                                       zzudat = abap_true
                                                                       zzasn_flag = abap_true ) ).
    "BP Central bank
*    ls_bp_data-partner-central_data-bankdetail = VALUE #(  ).
    "BP Central tax
    ls_bp_data-partner-central_data-taxnumber-current_state = abap_true.
    ls_bp_data-partner-central_data-taxnumber-taxnumbers = VALUE #( ( task = SWITCH #( lv_runmode WHEN 'I' THEN 'I' ELSE 'M' )
                                                                      data_key = VALUE #( taxtype = 'CN0'                                    "税号类别
                                                                                          taxnumber = <fs_response>-sup_registration_number ) ) ).  "业务合作伙伴税号
    "BP communication 电话&邮件信息
    LOOP AT <fs_response>-link_man_info_dto_list ASSIGNING FIELD-SYMBOL(<fs_link_man_info_dto_list>).
      IF <fs_link_man_info_dto_list>-linkman_mobile IS NOT INITIAL.
        APPEND VALUE #( contact = VALUE #( task = lv_runmode
                                           data = VALUE #( country = 'CN'                                                  "电话/传真号所属的国家/地区
                                                           std_no = SWITCH #( <fs_link_man_info_dto_list>-linkman_flag WHEN 'Y' THEN 'X' ELSE '' )   "标准
                                                           telephone =  <fs_link_man_info_dto_list>-linkman_mobile         "电话号码:区号 + 号码
                                                            r_3_user = '2' )                                               "标识符:电话是固定电话
                                           datax = VALUE #( std_no = abap_true country = abap_true telephone = abap_true  ) ) "r_3_user = abap_true
                        remark-remarks = VALUE #( ( task = lv_runmode
                                                  data = VALUE #( langu = '1'
                                                                  comm_notes = <fs_link_man_info_dto_list>-linkman_name )
                                                  datax = VALUE #( langu = abap_true comm_notes = abap_true ) ) )
                      ) TO ls_bp_data-partner-central_data-communication-phone-phone.
        ls_bp_data-partner-central_data-communication-phone-current_state = abap_true.
      ENDIF.

      IF <fs_link_man_info_dto_list>-linkman_telephone IS NOT INITIAL.
        APPEND VALUE #( contact = VALUE #( task = lv_runmode
                                           data = VALUE #( country = 'CN'                                                  "电话/传真号所属的国家/地区
                                                           std_no = SWITCH #( <fs_link_man_info_dto_list>-linkman_flag WHEN 'Y' THEN 'X' ELSE '' )   "标准
                                                           telephone =  <fs_link_man_info_dto_list>-linkman_telephone      "电话号码:区号 + 号码
                                                            r_3_user = '1' )                                               "标识符:电话是固定电话
                                           datax = VALUE #( std_no = abap_true country = abap_true telephone = abap_true  ) ) "r_3_user = abap_true
                        remark-remarks = VALUE #( ( task = lv_runmode
                                                  data = VALUE #( langu = '1'
                                                                  comm_notes = <fs_link_man_info_dto_list>-linkman_name )
                                                  datax = VALUE #( langu = abap_true comm_notes = abap_true ) ) )
                      ) TO ls_bp_data-partner-central_data-communication-phone-phone.
        ls_bp_data-partner-central_data-communication-phone-current_state = abap_true.
      ENDIF.

      APPEND VALUE #( contact = VALUE #( task = lv_runmode
                                         data = VALUE #( country = 'CN'                                                  "电话/传真号所属的国家/地区
                                                         consnumber = sy-tabix
                                                         std_no = SWITCH #( <fs_link_man_info_dto_list>-linkman_flag   WHEN 'Y' THEN 'X' ELSE '' )               "标准
                                                         telex_no =  <fs_link_man_info_dto_list>-linkman_position )      "职位
                                         datax = VALUE #( std_no = abap_true telex_no = abap_true consnumber = abap_true ) )
                      remark-remarks = VALUE #( ( task = lv_runmode
                                                data = VALUE #( langu = '1'
                                                                comm_notes = <fs_link_man_info_dto_list>-linkman_name )
                                                datax = VALUE #( langu = abap_true comm_notes = abap_true ) ) )
                    ) TO ls_bp_data-partner-central_data-communication-tlx-tlx.
      ls_bp_data-partner-central_data-communication-tlx-current_state = abap_true.

      APPEND VALUE #( contact = VALUE #( task = lv_runmode
                                   data = VALUE #( std_no = SWITCH #( <fs_link_man_info_dto_list>-linkman_flag   WHEN 'Y' THEN 'X' ELSE '' )               "标准
                                                   e_mail =  <fs_link_man_info_dto_list>-linkman_email )           "邮箱
                                   datax = VALUE #( std_no = abap_true e_mail = abap_true ) )
                remark-remarks = VALUE #( ( task = SWITCH #( lv_runmode WHEN 'I' THEN 'I' ELSE 'M' )
                                          data = VALUE #( langu = '1'
                                                          comm_notes = <fs_link_man_info_dto_list>-linkman_name )
                                          datax = VALUE #( langu = abap_true comm_notes = abap_true ) ) )
              ) TO ls_bp_data-partner-central_data-communication-smtp-smtp.
      ls_bp_data-partner-central_data-communication-smtp-current_state = abap_true.

    ENDLOOP.

    "BP Central Address
    ls_bp_address = VALUE #( task = SWITCH #( lv_runmode WHEN 'I' THEN 'I' ELSE 'M' )
                             data_key-guid = ls_but020-address_guid
*                           data_key-operation           = 'XXDFLT'
                             data-postal-data = VALUE #( langu = '1'
                                                         country = 'CN'
                                                         street = <fs_response>-sup_registration_address                     "地址
                                                         city = 'INIT'
                                                         postl_cod1 = '000000' ) "SWITCH #( <fs_response>-sup_office_zip_code
                                                                               " WHEN space THEN '000000'
                                                                               " ELSE <fs_response>-sup_office_zip_code ) )  "邮编
                             data-postal-datax = VALUE #(  langu = abap_true
                                                           country = abap_true
                                                           street = abap_true
                                                           city = abap_true
                                                           postl_cod1 = abap_true ) ).

    "URI信息
    LOOP AT <fs_response>-type_det_info_dto_list ASSIGNING FIELD-SYMBOL(<fs_type_det_info_dto_list>).
      APPEND VALUE #( contact = VALUE #( task = lv_runmode
                                         data = VALUE #( std_no = SWITCH #( <fs_type_det_info_dto_list>-main_flag   WHEN 'Y' THEN 'X' ELSE '' )
                                                         uri_type = 'HPG'
                                                         uri = |{ <fs_type_det_info_dto_list>-one_det_id }/{ <fs_type_det_info_dto_list>-two_det_id }/| &&  "一级分类/二级分类/三级分类/四级分类
                                                               |{ <fs_type_det_info_dto_list>-three_det_id }/{ <fs_type_det_info_dto_list>-four_det_id }| )
                                         datax = VALUE #( std_no = abap_true uri_type = abap_true uri = abap_true ) )
                      remark-remarks = VALUE #( ( task = lv_runmode
                                                data = VALUE #( langu = '1'
                                                                comm_notes = |{ <fs_type_det_info_dto_list>-one_det_name }/{ <fs_type_det_info_dto_list>-two_det_name }/| && "一级分类描述/二级分类描述/三级分类描述/四级分类描述
                                                                             |{ <fs_type_det_info_dto_list>-three_det_name }/{ <fs_type_det_info_dto_list>-four_det_name }| )
                                                datax = VALUE #( langu = abap_true comm_notes = abap_true ) ) )
                     ) TO ls_bp_address-data-communication-uri-uri.
      ls_bp_data-partner-central_data-communication-uri-current_state = abap_true.
    ENDLOOP.

    ls_bp_data-partner-central_data-address-current_state = abap_true.
    APPEND ls_bp_address TO ls_bp_data-partner-central_data-address-addresses.
    CLEAR: ls_bp_address.

    IF lv_ktokk NE   'Z009'.
      "BP Central Role
      ls_bp_data-partner-central_data-role-roles = VALUE #( ( task = lv_runmode data_key = 'FLVN00' data-valid_from = sy-datum  data-valid_to  = '99991231' datax-valid_from = abap_true  datax-valid_to  = abap_true )
                                                            ( task = lv_runmode data_key = 'FLVN01' data-valid_from = sy-datum  data-valid_to  = '99991231' datax-valid_from = abap_true  datax-valid_to  = abap_true ) ).

      ls_bp_data-vendor-header = VALUE #( object_instance-lifnr = lv_vendor
                                          object_task = lv_runmode ).
      ls_bp_data-vendor-central_data-central = VALUE #( data = VALUE #( stcd5 = <fs_response>-sup_registration_number ktokk = lv_ktokk )
                                                          datax = VALUE #( stcd5 = abap_true ktokk = abap_true ) ).
      "bp_ven_company
      LOOP AT lt_zmmt004_conf INTO ls_zmmt004_conf.
        APPEND VALUE #( task = SWITCH #( lv_runmode WHEN 'I' THEN 'I' ELSE 'M' )
                        data_key-bukrs = ls_zmmt004_conf-bukrs      "公司代码
                        data = VALUE #( akont  = '0002121001'       "总帐中的统驭科目
                                        waers  = 'CNY'
                                        reprf  = abap_true  )
                        datax = VALUE #( akont  = abap_true
                                         reprf  = abap_true  ) )
                                        TO ls_bp_data-vendor-company_data-company.
      ENDLOOP.
      ls_bp_data-vendor-company_data-current_state = abap_true.
      "BP_PURCHASING
      ls_bp_data-vendor-purchasing_data-purchasing = VALUE #( ( task = SWITCH #( lv_runmode WHEN 'I' THEN 'I' ELSE 'M' )
                                                                data_key-ekorg = '1000'                      "采购组织
                                                                data = VALUE #( ekgrp = 'A01'                "采购组
                                                                                waers = 'CNY'
                                                                                webre = abap_true
                                                                                bstae = SWITCH #( <fs_response>-asn_flag WHEN 'Y' THEN '0004' ELSE '' )  )          "基于收货的发票校验
                                                                datax = VALUE #( ekgrp = abap_true
                                                                                 waers = abap_true
                                                                                 webre = abap_true
                                                                                 bstae = abap_true ) ) ).
      ls_bp_data-vendor-purchasing_data-current_state = abap_true.
    ENDIF.
    APPEND ls_bp_data TO lt_bp_data.

    "单条处理
    cl_md_bp_maintain=>maintain(
      EXPORTING
        i_data = lt_bp_data
      IMPORTING
        e_return = lt_bp_return ).


    IF line_exists( ls_bp_return-object_msg[ type = 'A' ] ) OR
        line_exists( ls_bp_return-object_msg[ type = 'E' ] ) OR
        line_exists( ls_bp_return-object_msg[ type = 'X' ] ).
      LOOP AT  ls_bp_return-object_msg INTO ls_bapiretc WHERE type = 'A' OR type = 'E' OR type = 'X'.
        APPEND VALUE #( zif_guid = gv_uuid lifnr = lv_vendor zdate = lv_date ztime = lv_time zuser = sy-uname
                        zmsgty = ls_bapiretc-type zmsgid = ls_bapiretc-id zmsgno = ls_bapiretc-number
                        zmsgtx = ls_bapiretc-message ) TO lt_zmmt003_log.
        EXIT.
      ENDLOOP.

      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
        IMPORTING
          return = ls_return.
    ELSE.
      APPEND VALUE #( zif_guid = gv_uuid lifnr = lv_vendor zdate = lv_date ztime = lv_time zuser = sy-uname
                      zmsgty = 'S' zmsgtx = TEXT-t02 ) TO lt_zmmt003_log.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait   = abap_true
        IMPORTING
          return = ls_return.

    ENDIF.
    CLEAR: ls_bp_data,lt_bp_data,lv_runmode,lv_object_task,lv_ktokk,lv_vendor,lv_guid,ls_zmmt003_conf,ls_zmmt004_conf,ls_but020,lt_bp_return.
  ENDLOOP.

  IF lt_zmmt003_log IS NOT INITIAL.
    MODIFY zmmt003_log FROM TABLE lt_zmmt003_log.
  ENDIF.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cl_gui_frontend_services=>file_save_dialog是一个SAP ABAP中的类,用于在GUI前端应用程序中调用文件保存对话框。通过使用这个类,可以方便地在SAP系统中将数据保存到本地文件系统中。在调用file_save_dialog时,可以指定文件保存对话框的标题、文件类型、默认文件名、默认目录等参数,从而可以定制保存对话框的外观和行为。 使用file_save_dialog可以让用户通过GUI界面来选择保存文件的位置和命名,从而提高了用户体验和操作的便利性。同时,也可以通过这个类来进行文件的合法性验证,确保用户保存的文件符合系统要求和业务规则。通过file_save_dialog,可以有效地管理文件的保存过程,保证了文件操作的安全性和准确性。 在使用cl_gui_frontend_services=>file_save_dialog时,需要注意合理设置对话框的参数,包括文件类型、默认文件名等,以确保用户可以方便地选择保存的文件类型和文件名,从而减少用户操作过程中的错误和混乱。另外,也需要注意在调用保存对话框后处理用户的选择结果,确保所选的文件能够成功保存到指定的位置。 总之,cl_gui_frontend_services=>file_save_dialog是SAP ABAP中一个非常实用的类,通过它可以轻松地在GUI前端应用程序中实现文件保存对话框,提高了用户体验和系统操作的便利性,同时也保证了文件操作的安全性和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值