ABAP讀取BP+客戶+供應(yīng)商數(shù)據(jù)的代碼
背景
在MM模塊或MDG模塊的開發(fā)中,經(jīng)常出現(xiàn)BP客商批量下載或者分發(fā)的需求,對(duì)于選定的BP,有些ABAPer可能會(huì)通過ABAP SQL直接查詢相關(guān)的表,但是這種方法需要開發(fā)者對(duì)后臺(tái)表邏輯非常熟悉,且SQL數(shù)量相當(dāng)大,不符合本人一直的簡(jiǎn)潔(偷懶)作風(fēng),采用幾個(gè)簡(jiǎn)單的函數(shù),只需要輸入BP和客商編碼,就能讀取絕大多數(shù)的數(shù)據(jù),相當(dāng)哇噻。
相關(guān)函數(shù)
本文未讀取BP聯(lián)系人數(shù)據(jù),大家可以通過where-used-list獲取標(biāo)準(zhǔn)代碼中對(duì)相關(guān)函數(shù)的具體用法
| 函數(shù)/類 | 說明 |
|---|---|
| BUPA_OUTBOUND_GET_MAIN | 讀取BP數(shù)據(jù) |
| BUPA_OUTBOUND_GET_REL | 讀取BP聯(lián)系人數(shù)據(jù) |
| VMD_EI_API_EXTRACT | 讀取供應(yīng)商數(shù)據(jù) |
| CMD_EI_API_EXTRACT | 讀取客戶數(shù)據(jù) |
代碼示例
類型&變量定義
點(diǎn)擊查看代碼
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
點(diǎn)擊查看代碼
"讀取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')"中心數(shù)據(jù)
( 'BUP020')"銀行細(xì)目
( 'BUP050')"標(biāo)識(shí)號(hào)
( 'BUP060')"行業(yè)
( 'BUP080')"業(yè)務(wù)伙伴角色
( 'BUP190')"稅號(hào)
( 'BUP210')"業(yè)務(wù)合作伙伴地址
).
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.
讀取客戶
點(diǎn)擊查看代碼
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.
讀取供應(yīng)商
點(diǎn)擊查看代碼
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.
本文來自博客園,作者:長(zhǎng)沙鐵道學(xué)院-康帥傅,轉(zhuǎn)載請(qǐng)注明原文鏈接:http://www.rzrgm.cn/break-point/p/19064667

浙公網(wǎng)安備 33010602011771號(hào)