Stories

Detail Return Return

ABAP讀取BP+客户+供應商數據的代碼 - Stories Detail

背景

在MM模塊或MDG模塊的開發中,經常出現BP客商批量下載或者分發的需求,對於選定的BP,有些ABAPer可能會通過ABAP SQL直接查詢相關的表,但是這種方法需要開發者對後台表邏輯非常熟悉,且SQL數量相當大,不符合本人一直的簡潔(偷懶)作風,採用幾個簡單的函數,只需要輸入BP和客商編碼,就能讀取絕大多數的數據,相當哇噻。

相關函數

本文未讀取BP聯繫人數據,大家可以通過where-used-list獲取標準代碼中對相關函數的具體用法

函數/類 説明
BUPA_OUTBOUND_GET_MAIN 讀取BP數據
BUPA_OUTBOUND_GET_REL 讀取BP聯繫人數據
VMD_EI_API_EXTRACT 讀取供應商數據
CMD_EI_API_EXTRACT 讀取客户數據

代碼示例

類型&變量定義

點擊查看代碼
types:begin of ty_bp_general,
          bu_group   type string,
          partner    type string,
          bpext      type string,
          mc_name1   type string,
          name_org1  type string,
          name_last  type string,
          name_first type string,
          taxtype    type string,
          taxnumxl   type string,
          idnumber   type string,
          street     type string,
          post_code1 type string,
          city1      type string,
          country    type string,
          region     type string,
          langu      type string,
          tel_number type string,
          mob_number type string,
          fax_number type string,
          smtp_addr  type string,
          augrp      type string,
          legal_org  type string,
          found_dat  type string,
          ind_sector type string,
          name_co    type string,
          city2      type string,
          home_city  type string,
        end of ty_bp_general,
        begin of ty_bp_identification,
          partner  type string,
          type     type but0id-type,
          idnumber type but0id-idnumber,
        end of ty_bp_identification,
        begin of ty_bp_role,
          partner type string,
          rltyp   type bu_partnerrole,
        end of ty_bp_role,
        begin of ty_bp_bank,
          partner type string,
          banks   type string,
          bankl   type string,
          banka	  type string,
          bankn	  type string,
          bkref	  type string,
          koinh	  type string,
          bkont   type string,
        end of ty_bp_bank,
        begin of ty_vendor_company,
          lifnr type string,
          bukrs type string,
          akont type string,
          zuawa type string,
          qsrec type string,
          frgrp type string,
        end of ty_vendor_company,
        begin of ty_vendor_porg,
          lifnr type string,
          ekorg type string,
          verkf type string,
          telf1 type string,
          waers type string,
          zterm type string,
          kalsk type string,
          kzaut type string,
          webre type string,
        end of ty_vendor_porg,
        begin of ty_customer_company,
          kunnr type string,
          bukrs type string,
          akont type string,
          zuawa type string,
          zterm type string,
          zwels type string,
          zgrup type string,
        end of ty_customer_company,
        begin of ty_customer_sorg,
          kunnr	  type string,
          vkorg   type string,
          vtweg	  type string,
          spart	  type string,
          vkbur	  type string,
          vkgrp	  type string,
          bzirk	  type string,
          kdgrp	  type string,
          waers	  type string,
          kalks	  type string,
          vsbed	  type string,
          vwerk  type string,
          podkz	  type string,
          ktgrd	  type string,
          taxkd	  type string,
          inco1	  type string,
          inco2_l type string,
          inco3_l	type string,
          zterm	  type string,
          kkber	  type string,
          kvgr1	  type string,
          kvgr2   type string,
        end of ty_customer_sorg.

  data:mt_bp_general       type table of ty_bp_general,
       mt_bp_id            type table of ty_bp_identification,
       mt_bp_role          type table of ty_bp_role,
       mt_bp_bank          type table of ty_bp_bank,
       mt_vendor_company   type table of ty_vendor_company,
       mt_vendor_porg      type table of ty_vendor_porg,
       mt_customer_company type table of ty_customer_company,
       mt_customer_sorg    type table of ty_customer_sorg.

讀取BP

點擊查看代碼
"讀取BP信息
    data:lt_partner_data type bus_ei_extern_t,
         ls_fragment     type bus_ei_fragment,
         lt_fragment     type bus_ei_fragment_t,
         lt_idlist       type bus_ei_instance_t.

    lt_idlist = value #(
      for ls_bp in lt_business_partners
      (
        bpartner = ls_bp
      )
    ).

    lt_fragment = value #(
    ( 'BUP010')"中心數據
    ( 'BUP020')"銀行細目
    ( 'BUP050')"標識號
    ( 'BUP060')"行業
    ( 'BUP080')"業務夥伴角色
    ( 'BUP190')"税號
    ( 'BUP210')"業務合作伙伴地址
    ).

    call function 'BUPA_OUTBOUND_GET_MAIN'
      importing
        et_bupa_extern = lt_partner_data
      tables
        it_idlist      = lt_idlist
        it_fragments   = lt_fragment
      exceptions
        bp_not_found   = 1
        others         = 2.
    if sy-subrc <> 0.
* Implement suitable error handling here
    endif.

    loop at lt_partner_data into data(ls_partner_data).
      append initial line to mt_bp_general assigning field-symbol(<bp_general>).
      <bp_general>-partner = ls_partner_data-header-object_instance-bpartner.
      <bp_general>-bu_group = ls_partner_data-central_data-common-data-bp_control-grouping.
      <bp_general>-bpext = ls_partner_data-central_data-common-data-bp_centraldata-partnerexternal.
      data(bp_cate) = ls_partner_data-central_data-common-data-bp_control-category.
      if bp_cate eq '1'.
        <bp_general>-name_first = ls_partner_data-central_data-common-data-bp_person-firstname.
        <bp_general>-name_last = ls_partner_data-central_data-common-data-bp_person-lastname.
      elseif bp_cate eq '2'.
        <bp_general>-name_org1 =  ls_partner_data-central_data-common-data-bp_organization-name1 && ls_partner_data-central_data-common-data-bp_organization-name2.
      endif.
      <bp_general>-augrp = ls_partner_data-central_data-common-data-bp_centraldata-authorizationgroup.
      <bp_general>-legal_org = ls_partner_data-central_data-common-data-bp_organization-legalorg.
      <bp_general>-ind_sector = ls_partner_data-central_data-common-data-bp_organization-industrysector.
      <bp_general>-found_dat = ls_partner_data-central_data-common-data-bp_organization-foundationdate.

      read table ls_partner_data-central_data-taxnumber-taxnumbers into data(bp_tax) index 1.
      if sy-subrc eq 0.
        <bp_general>-taxtype = bp_tax-data_key-taxtype.
        <bp_general>-taxnumxl = cond #(
        when bp_tax-data_key-taxnumber is not initial then bp_tax-data_key-taxnumber
        else bp_tax-data_key-taxnumxl ).
      endif.
      loop at ls_partner_data-central_data-ident_number-ident_numbers into data(ls_bp_ident).
        if ls_bp_ident-data_key-identificationcategory = 'FS0001'.
          <bp_general>-idnumber = ls_bp_ident-data_key-identificationnumber.
        else.
          append initial line to mt_bp_id assigning field-symbol(<bp_ident>).
          <bp_ident>-partner = <bp_general>-partner.
          <bp_ident>-type  = ls_bp_ident-data_key-identificationcategory.
          <bp_ident>-idnumber = ls_bp_ident-data_key-identificationnumber.
        endif.
      endloop.

      loop at ls_partner_data-central_data-address-addresses into data(ls_bp_addr).
        if line_exists( ls_bp_addr-data-addr_usage-addr_usages[ data_key-addresstype = 'XXDEFAULT' ] ).
          <bp_general>-street = ls_bp_addr-data-postal-data-street.
          <bp_general>-post_code1 = ls_bp_addr-data-postal-data-postl_cod1.
          <bp_general>-city1 = ls_bp_addr-data-postal-data-city.
          <bp_general>-country = ls_bp_addr-data-postal-data-country.
          <bp_general>-region = ls_bp_addr-data-postal-data-region.
          <bp_general>-langu = ls_bp_addr-data-postal-data-langu.
          <bp_general>-name_co  = ls_bp_addr-data-postal-data-c_o_name.
          <bp_general>-city2  = ls_bp_addr-data-postal-data-district.
          <bp_general>-home_city  = ls_bp_addr-data-postal-data-home_city.

          read table ls_bp_addr-data-communication-phone-phone into data(ls_telephone) with key contact-data-r_3_user = '1'.
          if sy-subrc eq 0.
            <bp_general>-tel_number = ls_telephone-contact-data-telephone.
          endif.
          read table ls_bp_addr-data-communication-phone-phone into data(ls_cellphone) with key contact-data-r_3_user = '3'.
          if sy-subrc eq 0.
            <bp_general>-mob_number = ls_cellphone-contact-data-telephone.
          endif.
          read table ls_bp_addr-data-communication-fax-fax into data(ls_bp_fax) index 1.
          if sy-subrc eq 0.
            <bp_general>-fax_number = ls_bp_fax-contact-data-fax.
          endif.
          read table ls_bp_addr-data-communication-smtp-smtp into data(ls_bp_smtp) index 1.
          if sy-subrc eq 0.
            <bp_general>-smtp_addr = ls_bp_smtp-contact-data-e_mail.
          endif.
          exit.
        endif.
      endloop.

      loop at ls_partner_data-central_data-role-roles into data(ls_bp_role).
        append initial line to mt_bp_role assigning field-symbol(<bp_role>).
        <bp_role>-partner = <bp_general>-partner.
        <bp_role>-rltyp = ls_bp_role-data_key.
      endloop.

      loop at ls_partner_data-central_data-bankdetail-bankdetails into data(ls_bp_bank).
        append initial line to mt_bp_bank assigning field-symbol(<bp_bank>).
        <bp_bank>-partner = <bp_general>-partner.
        <bp_bank>-banks	= ls_bp_bank-data-bank_ctry.
        <bp_bank>-bankl   = ls_bp_bank-data-bank_key.
        <bp_bank>-bankn   = ls_bp_bank-data-bank_acct.
        <bp_bank>-bkref   = ls_bp_bank-data-bank_ref.
        <bp_bank>-koinh   = ls_bp_bank-data-accountholder.
        <bp_bank>-bkont	= ls_bp_bank-data-ctrl_key.
      endloop.
    endloop.

讀取客户

點擊查看代碼
data: ls_customer_in  type cmds_ei_main,
          ls_customer_out type cmds_ei_main.

    ls_customer_in-customers = value #(
    for ls_bp in lt_business_partners
    (
      header-object_task = 'M'
      header-object_instance-kunnr = ls_bp
    )
    ).

    try.
        "Extract Customers w/ performance optimization
        cvi_cl_process_info=>set_process(
          exporting
            iv_process = 'MDG'
            ).
        cmd_ei_api_extract=>get_data(
        exporting
          is_master_data = ls_customer_in
        importing
          es_master_data = ls_customer_out
        exceptions
          others         = 1 ).
        cvi_cl_process_info=>clear_process( ).
      catch cx_sy_dyn_call_illegal_method cx_sy_dyn_call_param_missing
        cx_sy_dyn_call_parameter_conv cx_sy_dyn_call_parameter_error.
        "Extract Customers w/o performance optimization
        cmd_ei_api_extract=>get_data(
        exporting
          is_master_data = ls_customer_in
        importing
          es_master_data = ls_customer_out
        exceptions
          others         = 1 ).
    endtry.

    loop at ls_customer_out-customers into data(ls_customer).
      loop at ls_customer-company_data-company into  data(ls_customer_company).
        append initial line to mt_customer_company assigning field-symbol(<customer_company>).
        <customer_company>-kunnr  = ls_customer-header-object_instance-kunnr.
        <customer_company>-bukrs  = ls_customer_company-data_key-bukrs.
        <customer_company>-akont  = ls_customer_company-data-akont.
        <customer_company>-zuawa  = ls_customer_company-data-zuawa.
        <customer_company>-zterm  = ls_customer_company-data-zterm.
        <customer_company>-zwels  = ls_customer_company-data-zwels.
        <customer_company>-zgrup  = ls_customer_company-data-zgrup.
      endloop.
      loop at ls_customer-sales_data-sales into data(ls_customer_sales).
        append initial line to mt_customer_sorg assigning field-symbol(<customer_sorg>).
        <customer_sorg>-kunnr	 = ls_customer-header-object_instance-kunnr.
        <customer_sorg>-vkorg	= ls_customer_sales-data_key-vkorg.
        <customer_sorg>-vtweg   = ls_customer_sales-data_key-vtweg.
        <customer_sorg>-spart   = ls_customer_sales-data_key-spart.
        <customer_sorg>-vkbur   = ls_customer_sales-data-vkbur.
        <customer_sorg>-vkgrp   = ls_customer_sales-data-vkgrp.
        <customer_sorg>-bzirk   = ls_customer_sales-data-bzirk.
        <customer_sorg>-kdgrp   = ls_customer_sales-data-kdgrp.
        <customer_sorg>-waers   = ls_customer_sales-data-waers.
        <customer_sorg>-kalks   = ls_customer_sales-data-kalks.
        <customer_sorg>-vsbed   = ls_customer_sales-data-vsbed.
        <customer_sorg>-vwerk   = ls_customer_sales-data-vwerk.
        <customer_sorg>-podkz   = ls_customer_sales-data-podkz.
        <customer_sorg>-ktgrd   = ls_customer_sales-data-ktgrd.
"        <customer_sorg>-taxkd   = ls_customer_sales-data-taxkd.
        <customer_sorg>-inco1   = ls_customer_sales-data-inco1.
        <customer_sorg>-inco2_l   = ls_customer_sales-data-inco2_l.
        <customer_sorg>-inco3_l   = ls_customer_sales-data-inco3_l.
        <customer_sorg>-zterm   = ls_customer_sales-data-zterm.
        <customer_sorg>-kkber   = ls_customer_sales-data-kkber.
        <customer_sorg>-kvgr1   = ls_customer_sales-data-kvgr1.
        <customer_sorg>-kvgr2   = ls_customer_sales-data-kvgr2.
      endloop.
    endloop.

讀取供應商

點擊查看代碼
 data:ls_supplier_in  type vmds_ei_main,
         ls_supplier_out type  vmds_ei_main.

    ls_supplier_in-vendors = value #(
    for ls_bp in lt_business_partners
    (
      header-object_task = 'M'
      header-object_instance-lifnr = ls_bp
    )
    ).

    try.
        "Extract Customers w/ performance optimization
        cvi_cl_process_info=>set_process(
        exporting
          iv_process = 'MDG'
          ).
        vmd_ei_api_extract=>get_data(
        exporting
          is_master_data = ls_supplier_in
        importing
          es_master_data = ls_supplier_out
        exceptions
          others         = 1 ).
        cvi_cl_process_info=>clear_process( )..
      catch cx_sy_dyn_call_illegal_method cx_sy_dyn_call_param_missing
        cx_sy_dyn_call_parameter_conv cx_sy_dyn_call_parameter_error.
        "Extract Customers w/o performance optimization
        vmd_ei_api_extract=>get_data(
        exporting
          is_master_data = ls_supplier_in
        importing
          es_master_data = ls_supplier_out
        exceptions
          others         = 1 ).
    endtry.

    loop at ls_supplier_out-vendors into data(ls_vendor).
      loop at ls_vendor-company_data-company into data(ls_vendor_company) .
        append initial line to mt_vendor_company assigning field-symbol(<vendor_company>).
        <vendor_company>-lifnr = ls_vendor-header-object_instance-lifnr.
        <vendor_company>-bukrs = ls_vendor_company-data_key-bukrs.
        <vendor_company>-akont = ls_vendor_company-data-akont.
        <vendor_company>-zuawa = ls_vendor_company-data-zuawa.
        <vendor_company>-qsrec = ls_vendor_company-data-qsrec.
        <vendor_company>-frgrp = ls_vendor_company-data-frgrp.
      endloop.
      loop at ls_vendor-purchasing_data-purchasing into data(ls_vendor_porg).
        append initial line to mt_vendor_porg assigning field-symbol(<vendor_porg>).
        <vendor_porg>-lifnr = ls_vendor-header-object_instance-lifnr.
        <vendor_porg>-ekorg = ls_vendor_porg-data_key-ekorg.
        <vendor_porg>-verkf = ls_vendor_porg-data-verkf.
        <vendor_porg>-telf1 = ls_vendor_porg-data-telf1.
        <vendor_porg>-waers = ls_vendor_porg-data-waers.
        <vendor_porg>-zterm = ls_vendor_porg-data-zterm.
        <vendor_porg>-kalsk = ls_vendor_porg-data-kalsk.
        <vendor_porg>-kzaut = ls_vendor_porg-data-kzaut.
        <vendor_porg>-webre = ls_vendor_porg-data-webre.
      endloop.
    endloop.

Add a new Comments

Some HTML is okay.