Tcode SE37 : Function Builder
- Create Bapi Name BAPI_CHANGE_SVO
In tab
Import :
Tables :
Source :
Table Definition :
*
types:
begin of ty_data,
col_01 type resb-potx1,"(025), "(025),
col_02(055),
col_03(018),
col_04(025),
col_05(025),
col_06(050),
col_07(025),
col_08(025),
col_09(010),
col_10(025),
col_11(025),
col_12(4) type n,
col_13(018),
col_14(025),
col_15(025),
col_16(050),
col_17(025),
col_18(025),
col_19(040),
col_20(010),
col_21 type aufnr,
col_22 type lifnr,
col_23 type eban-bnfpo,
col_24(1), "Indicator Update or Delete,
col_25(1), "Status
col_26(25), "Sold to Party
rsnum(6) type n, "resb-rsnum,
rspos(4) type n,"resb-rspos,
banfn type ebkn-banfn,
bnfpo type ebkn-bnfpo,
loekz type ebkn-loekz,
ktext type aufk-ktext,
end of ty_data,
begin of ty_resb,
aufnr type aufnr,
rsnum(6) type n,
rspos(4) type n,
status(1),
lnitm(4) type n,
end of ty_resb,
begin of ty_eban,
banfn type eban-banfn,
matnr type eban-matnr,
bnfpo type ebkn-bnfpo,
loekz type ebkn-loekz,
aufnr type ebkn-aufnr,
end of ty_eban.
data : it_dat1 type table of ty_data with header line,
wa_dat1 type ty_data,
it_resb type table of ty_resb with header line,
wa_resb type ty_resb,
it_eban type table of ty_eban with header line,
wa_eban type ty_eban,
g_refnum(6) type n,
g_rsnum type rsnum,
g_kunum type kunum,
g_kunum_old type kunum.
field-symbols : <it_dat1> type ty_data,
<it_eban> type ty_eban,
<it_resb> type ty_resb.
* Source
*Bapi's
data lt_return type standard table of bapiret2.
data ls_return like line of lt_return .
data lt_methods type standard table of bapi_alm_order_method.
data ls_methods like line of lt_methods.
data lt_component type standard table of bapi_alm_order_component.
data ls_component like line of lt_component.
data lt_component_up type standard table of bapi_alm_order_component_up .
data ls_component_up like line of lt_component_up.
data lt_numbers type standard table of bapi_alm_numbers.
data lt_d_components type table of bapi_alm_order_component_e.
data ls_d_components type bapi_alm_order_component_e.
data lt_componentx type table of bapi_alm_order_component_up.
data ls_componentx type bapi_alm_order_component_up.
data lt_d_partner type table of bapi_alm_order_partner.
data ls_d_partner type bapi_alm_order_partner.
data lt_d_partner_n type table of bapi_alm_order_partn_mul.
data ls_d_partner_n type bapi_alm_order_partn_mul.
data lt_d_partner_up type table of bapi_alm_order_partn_mul_up.
data ls_d_partner_up type bapi_alm_order_partn_mul_up.
data lt_d_header type table of bapi_alm_order_headers_i.
data ls_d_header type bapi_alm_order_headers_i.
clear wa_dat1.
refresh it_dat1.
loop at i_detail.
wa_dat1-col_01 = i_detail-external_key.
wa_dat1-col_02 = i_detail-operation_code.
wa_dat1-col_03 = i_detail-control_key.
wa_dat1-col_04 = i_detail-operation_short_text.
wa_dat1-col_05 = i_detail-qty_open.
wa_dat1-col_06 = i_detail-price.
wa_dat1-col_07 = i_detail-material_group.
wa_dat1-col_08 = i_detail-purchasing_group.
wa_dat1-col_09 = i_detail-sales_org.
wa_dat1-col_10 = i_detail-vendor_code.
wa_dat1-col_11 = i_detail-tracking_no.
wa_dat1-col_12 = i_detail-component_item_no.
wa_dat1-col_13 = i_detail-material_code.
wa_dat1-col_14 = i_detail-qty.
wa_dat1-col_15 = i_detail-storage_loc.
wa_dat1-col_16 = i_detail-plant.
wa_dat1-col_17 = i_detail-uom.
wa_dat1-col_18 = i_detail-activity_start_time.
wa_dat1-col_19 = i_detail-activity_start_time.
wa_dat1-col_21 = salesorder.
wa_dat1-col_20 = i_detail-cost_center.
wa_dat1-col_23 = i_detail-line_item_pr.
wa_dat1-col_24 = i_detail-change_id.
wa_dat1-col_25 = i_detail-status.
wa_dat1-col_26 = i_detail-kode_stp.
g_kunum = wa_dat1-col_26.
select single lifnr into wa_dat1-col_22
from resb
where aufnr = salesorder.
* and rspos = wa_dat1-col_12.
append wa_dat1 to it_dat1.
endloop.
refresh : lt_methods,lt_component,lt_component_up.
clear ls_methods.
clear ls_component.
clear ls_component_up.
*Get Reservation No.
loop at it_dat1 assigning <it_dat1>.
select single rsnum rspos meins
into (<it_dat1>-rsnum,<it_dat1>-rspos,<it_dat1>-col_20)
from resb
where potx1 eq <it_dat1>-col_01
and aufnr eq salesorder.
g_rsnum = <it_dat1>-rsnum.
modify it_dat1 from <it_dat1> .
endloop.
**
if g_rsnum is not initial.
* Get SVO
* Clear salesorder.
loop at it_dat1 assigning <it_dat1>.
if <it_dat1>-col_20 is initial.
<it_dat1>-col_20 = <it_dat1>-col_10.
endif.
endloop.
if salesorder is not initial.
* Get data for Delete
select * from resb into corresponding fields of table it_resb
where aufnr eq salesorder.
* Compare exit and Delete
sort it_resb by rsnum rspos.
sort it_dat1 by rsnum rspos.
loop at it_resb assigning <it_resb>.
read table it_dat1 assigning <it_dat1> with key rsnum = <it_resb>-rsnum
rspos = <it_resb>-rspos
binary search.
if sy-subrc eq 0.
<it_resb>-lnitm = <it_dat1>-col_12.
if <it_dat1>-col_24 = 'D'.
<it_resb>-status = <it_dat1>-col_24.
else.
<it_resb>-status = <it_dat1>-col_24.
endif.
endif.
endloop.
* Delete Component
sort it_resb by rsnum rspos.
delete it_resb where status ne 'D'.
endif.
************** Add Component ***************************
g_refnum = 1.
clear : ls_component,ls_methods,lt_return.
refresh : lt_component,lt_methods,lt_return.
loop at it_dat1 into wa_dat1 where rsnum eq '0000000000'
and col_24 = 'U'.
*-- Component Mapping
add 1 to ls_methods-refnumber.
ls_methods-refnumber = g_refnum. "wa_dat1-col_22 .
ls_methods-objecttype = 'COMPONENT'.
ls_methods-method = 'CREATE'.
ls_methods-objectkey = salesorder.
append ls_methods to lt_methods.
clear ls_methods.
ls_methods-refnumber = g_refnum.
ls_methods-method = 'SAVE'.
append ls_methods to lt_methods.
ls_component-activity = '0010'.
ls_component-material = wa_dat1-col_13.
* ls_component-price = 0 / 100.
ls_component-price_unit = '1'.
ls_component-requirement_quantity = wa_dat1-col_14.
*Mrp
if wa_dat1-col_04(3) = 'EXT'.
concatenate '000' wa_dat1-col_10 into wa_dat1-col_10.
ls_component-vendor_no = wa_dat1-col_10.
else. "Internal
if wa_dat1-col_20 is not initial.
ls_component-mrp_relevant = '1'.
endif.
endif.
ls_component-preq_name = sy-uname.
ls_component-plant = '2000'.
ls_component-pur_group = wa_dat1-col_08.
ls_component-matl_group = wa_dat1-col_07.
ls_component-purch_org = '1000'.
ls_component-item_number = wa_dat1-col_12.
ls_component-trackingno = wa_dat1-col_11.
ls_component-stge_loc = wa_dat1-col_15.
ls_component-item_text1 = wa_dat1-col_01.
append ls_component to lt_component.
g_refnum = g_refnum + 1.
endloop.
clear ls_component_up.
ls_component_up-activity = 'X'.
ls_component_up-material = 'X'.
ls_component_up-price = 'X'.
ls_component_up-price_unit = 'X'.
ls_component_up-requirement_quantity = 'X'.
ls_component_up-requirement_quantity_unit = 'X'.
ls_component_up-vendor_no = 'X'.
ls_component_up-preq_name = 'X'.
ls_component_up-mrp_relevant = 'X'.
ls_component_up-plant = 'X'.
ls_component_up-matl_group = 'X'.
ls_component_up-purch_org = 'X'.
ls_component_up-item_number = 'X'.
ls_component_up-stge_loc = 'X'.
ls_component_up-trackingno = 'X'.
ls_component_up-item_text1 = 'X'.
append ls_component_up to lt_component_up.
call function 'BAPI_ALM_ORDER_MAINTAIN'
tables
it_methods = lt_methods
it_component = lt_component
it_component_up = lt_component_up
return = lt_return
et_numbers = lt_numbers.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
endif.
* ************** Change ***************************
* Get data
call function 'BAPI_ALM_ORDER_GET_DETAIL'
destination 'NONE'
exporting
number = salesorder
it_header = lt_d_header
tables
et_components = lt_d_components[]
et_partner = lt_d_partner[]
return = lt_return[].
if g_kunum is initial.
* ************** Change Component ***************************
clear ls_d_components.
sort it_dat1 by col_12.
loop at lt_d_components into ls_d_components.
read table it_dat1 assigning <it_dat1>
with key col_12 = ls_d_components-item_number
binary search.
if sy-subrc eq 0.
ls_d_components-requirement_quantity = <it_dat1>-col_14.
if <it_dat1>-col_15 is initial.
ls_d_components-stge_loc = <it_dat1>-col_15.
endif.
modify lt_d_components from ls_d_components.
endif.
endloop.
g_refnum = 1.
clear : ls_component,ls_methods,lt_return.
refresh : lt_component,lt_methods,lt_return.
sort lt_d_components by item_number.
loop at lt_d_components into ls_d_components.
*-- Component Mapping
ls_methods-refnumber = g_refnum .
ls_methods-objecttype = 'COMPONENT'.
ls_methods-method = 'CHANGE'.
concatenate salesorder '0010'
into ls_methods-objectkey.
append ls_methods to lt_methods.
*
clear ls_methods.
ls_methods-method = 'SAVE'.
append ls_methods to lt_methods.
ls_component-reserv_no = ls_d_components-reserv_no.
ls_component-res_item = ls_d_components-res_item.
ls_component-material = ls_d_components-material.
ls_component-item_number = ls_d_components-item_number .
ls_component-activity = '0010'.
ls_component-plant = '2000'.
ls_component-pur_group = ls_d_components-pur_group.
ls_component-requirement_quantity = ls_d_components-requirement_quantity .
ls_component-requirement_quantity_unit = ls_d_components-requirement_quantity_unit.
ls_component-item_text1 = ls_d_components-item_text1.
ls_component-vendor_no = ls_d_components-vendor_no.
ls_component-trackingno = ls_d_components-trackingno.
ls_component-stge_loc = ls_d_components-stge_loc.
ls_componentx-material = 'X'.
ls_componentx-item_number = 'X'.
ls_componentx-activity ='X'.
ls_componentx-plant = 'X'.
ls_componentx-pur_group = 'X'.
ls_componentx-requirement_quantity = 'X'.
ls_componentx-requirement_quantity_unit = 'X'.
ls_componentx-item_text1 = 'X'.
ls_componentx-vendor_no = 'X'.
ls_componentx-trackingno = 'X'.
ls_componentx-stge_loc = 'X'.
append ls_componentx to lt_componentx.
append ls_component to lt_component.
add 1 to g_refnum.
endloop.
call function 'BAPI_ALM_ORDER_MAINTAIN'
tables
it_methods = lt_methods
it_component = lt_component
it_component_up = lt_componentx "lt_component_up
return = lt_return
et_numbers = lt_numbers.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
*************** Change Sold to Party ***************************
else.
.
clear : ls_methods,lt_return.
refresh : lt_methods,lt_return.
*Old Partner
loop at lt_d_partner into ls_d_partner.
g_kunum_old = ls_d_partner-partner_old.
endloop.
*Table methods
ls_methods-refnumber = '1'.
ls_methods-objecttype = 'PARTNER'.
ls_methods-method = 'CHANGE'.
ls_methods-objectkey = salesorder.
append ls_methods to lt_methods.
ls_methods-refnumber = '2'.
ls_methods-objecttype = ''.
ls_methods-method = 'SAVE'.
ls_methods-objectkey = salesorder.
append ls_methods to lt_methods.
ls_d_partner_n-orderid = salesorder.
ls_d_partner_n-partn_role = 'AG'.
ls_d_partner_n-partn_role_old = 'AG'.
ls_d_partner_n-partner = g_kunum.
ls_d_partner_n-partner_old = g_kunum_old.
append ls_d_partner_n to lt_d_partner_n.
ls_d_partner_up-orderid = salesorder.
ls_d_partner_up-partn_role = 'X'.
ls_d_partner_up-partner = 'X'.
ls_d_partner_up-partn_role_old = 'AG'.
ls_d_partner-partner_old = g_kunum_old.
append ls_d_partner_up to lt_d_partner_up.
call function 'BAPI_ALM_ORDER_MAINTAIN'
tables
it_methods = lt_methods
it_partner = lt_d_partner_n
it_partner_up = lt_d_partner_up
return = lt_return.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
endif.
************ Delete Component ***************************
g_refnum = 1.
clear : ls_component,ls_methods,lt_return.
refresh : lt_component,lt_methods.
if it_resb[] is not initial.
clear : ls_component,ls_methods,lt_return.
refresh : lt_component,lt_methods.
loop at it_resb into wa_resb .
*-- Component Mapping
ls_methods-refnumber = g_refnum. "1.
ls_methods-objecttype = 'COMPONENT'.
ls_methods-method = 'DELETE'.
concatenate salesorder '0010'
into ls_methods-objectkey.
append ls_methods to lt_methods.
ls_component-reserv_no = wa_resb-rsnum.
ls_component-res_item = wa_resb-rspos.
ls_component-item_number = wa_resb-lnitm.
ls_component-activity = '0010'.
ls_component_up-item_number = 'X'.
append ls_component to lt_component.
append ls_component_up to lt_component_up.
clear ls_methods.
ls_methods-method = 'SAVE'.
append ls_methods to lt_methods.
add 1 to g_refnum.
endloop.
call function 'BAPI_ALM_ORDER_MAINTAIN'
tables
it_methods = lt_methods
it_component = lt_component
it_component_up = lt_component_up
return = lt_return
et_numbers = lt_numbers.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
endif.
* Get PR Doc
select eban~banfn eban~matnr
eban~bnfpo eban~loekz ebkn~aufnr
into corresponding fields of table it_eban
from eban
inner join ebkn on ebkn~banfn eq eban~banfn
and ebkn~bnfpo eq eban~bnfpo
where ebkn~aufnr eq salesorder.
* Update Data
loop at it_dat1 assigning <it_dat1>.
read table it_eban assigning <it_eban> with key
aufnr = salesorder
bnfpo = <it_dat1>-col_23
binary search.
if sy-subrc eq 0.
<it_dat1>-banfn = <it_eban>-banfn.
<it_dat1>-bnfpo = <it_eban>-bnfpo.
<it_dat1>-loekz = <it_eban>-loekz.
endif.
* SVO Des
select single ktext
into <it_dat1>-ktext
from aufk
where aufnr = salesorder.
endloop.