This blog is to help those who are looking for some exits for interfaces. We are trying to collate number of exits which can help in interfaces.
1. MATMAS – Outbound idoc
i. EXIT_SAPLMV01_002 – This can help in Outbound idocs where we have to modify values as per requirement. example code below:
DATA: ls_E1MARAM TYPE e1maram,
ls_ZE1AUSP TYPE ze1ausp,
ls_ZE1MARAM TYPE ze1maram,
ls_EDIDD TYPE edidd,
ls_ZE1MVKEM TYPE ze1mvkem,
ls_E1MVKEM TYPE e1mvkem
.
CONSTANTS: lc_ZE1AUSP TYPE char7 VALUE 'ZE1AUSP',
lc_ZE1MARAM TYPE char8 VALUE 'ZE1MARAM',
lc_ZMATEXT TYPE char7 VALUE 'ZMATEXT',
lc_ZE1MVKEM TYPE char8 VALUE 'ZE1MVKEM'
.
idoc_cimtype = lc_ZMATEXT.
CASE segment_name.
WHEN 'E1MARAM'.
ls_E1MARAM = idoc_data-sdata.
"Fetch data from AUSP and add to custom fields
SELECT * INTO TABLE @DATA(lt_ausp) FROM ausp WHERE objek = @f_mara-matnr.
IF sy-subrc IS INITIAL.
idoc_cimtype = lc_ZMATEXT.
LOOP AT lt_ausp ASSIGNING FIELD-SYMBOL(<fs_ausp>).
ls_zE1AUSP-objek = <fs_ausp>-objek.
CALL FUNCTION 'CONVERSION_EXIT_ATINN_OUTPUT'
EXPORTING
input = <fs_ausp>-atinn
IMPORTING
output = ls_zE1AUSP-atinn.
* ls_zE1AUSP-atinn = <fs_ausp>-atinn.
ls_zE1AUSP-atwrt = <fs_ausp>-atwrt.
ls_edidd-segnam = lc_ZE1AUSP.
MOVE ls_zE1AUSP TO ls_edidd-sdata.
"Append to final table
APPEND ls_edidd TO idoc_data.
CLEAR:ls_edidd.
ENDLOOP.
ENDIF
ENDCASE.
ENDIF.
2) Good movement Interface(WMMBXY) : This EXIT_SAPLLMDE_002 can help you with Goods movement inbound idoc.
3) Invoice idoc(EXIT_SAPLVEDF_002) : This EXIT_SAPLVEDF_002 can help you with INVOIC02 outbound idoc.
4) BADI ME_BAPI_PO_CUST – For PO inbound idocs. There are different methods for inbound and outbound . This can help you with changing values for PO. Sample code below for inbound idocs:
Below code is changing few values and also ensuring if ref. PO field is available then new PO gets created with ref. PO:
"Initialization
CONSTANTS: lc_zbp1 TYPE char4 VALUE 'ZBP1'.
DATA: lt_ret TYPE STANDARD TABLE OF bapiret2,
lt_con TYPE STANDARD TABLE OF bapimepocond,
ls_con TYPE bapimepocond,
ls_conx TYPE bapimepocondx
.
"Refersh all variables
CLEAR: lt_ret, lt_con,
ls_con, ls_conx
.
"If vendor is not initial
IF ch_poheader-vendor IS NOT INITIAL.
"Do the conversion
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = ch_poheader-vendor
IMPORTING
output = ch_poheader-vendor.
* "Select from BUT000 based on ext. number and BU Group
SELECT SINGLE partner FROM but000 INTO @DATA(lv_partn1) WHERE bpext = @ch_poheader-vendor
AND bu_group = @lc_zbp1
.
IF sy-subrc IS INITIAL.
"Change LIFNR
ch_poheader-vendor = lv_partn1.
ENDIF.
ENDIF.
"look for PO, if it exists!
CALL FUNCTION 'BAPI_PO_GETDETAIL'
EXPORTING
purchaseorder = ch_poheader-po_number
TABLES
return = lt_ret
* pocond = lt_con
.
IF lt_ret IS NOT INITIAL.
* Create new PO case
LOOP AT ch_itemcond ASSIGNING FIELD-SYMBOL(<fs_cond>).
IF <fs_cond>-cond_type IS NOT INITIAL.
IF <fs_cond>-cond_type EQ 'PBXX'.
<fs_cond>-change_id = 'U'.
ELSE.
<fs_cond>-change_id = 'I'.
ENDIF.
ENDIF.
ENDLOOP.
ELSE.
"Commenting below FM would take away dump
* CALL FUNCTION 'BAPI_PO_GETDETAIL1'
* EXPORTING
* purchaseorder = ch_poheader-po_number
* TABLES
* return = lt_ret
* pocond = lt_con.
"Fetch conditon records !
SELECT SINGLE ebeln,
knumv INTO ( @DATA(lv_ebeln), @DATA(lv_knumv) )
FROM ekko WHERE ebeln = @ch_poheader-po_number.
IF sy-subrc IS INITIAL.
SELECT * FROM prcd_elements INTO TABLE @DATA(lt_prcd)
WHERE knumv = @lv_knumv
AND kposn = '1'
.
ENDIF.
* "Sort records
SORT ch_itemcond BY cond_type.
SORT lt_prcd BY kschl.
SORT ch_itemcondx BY cond_type.
"There are 3 scenerios:
* i) Update existing entries from idoc
* ii) Insert new entries from idoc
* iii) Delete existing entries which does not exist in PO
"Modification of existing PO case
LOOP AT ch_itemcond ASSIGNING FIELD-SYMBOL(<fs_cond2>).
IF <fs_cond2>-cond_type IS NOT INITIAL.
READ TABLE ch_itemcondx ASSIGNING FIELD-SYMBOL(<fs_condx>)
WITH KEY condition_no = <fs_cond2>-condition_no
itm_number = <fs_cond2>-itm_number
cond_st_no = <fs_cond2>-cond_st_no
BINARY SEARCH
.
* <No need of SY-SUBRC>
READ TABLE lt_prcd INTO DATA(ls_prcd)
WITH KEY kschl = <fs_cond2>-cond_type
BINARY SEARCH
.
IF sy-subrc IS INITIAL .
* Modify scenerio
<fs_cond2>-condition_no = ls_prcd-knumv. " Condition no.
<fs_cond2>-itm_number = ls_prcd-kposn. " item number
<fs_cond2>-cond_st_no = ls_prcd-stunr. " line no.
<fs_cond2>-change_id = 'U'.
"Pass X
<fs_condx>-condition_no = ls_prcd-knumv.
<fs_condx>-itm_number = ls_prcd-kposn.
<fs_condx>-cond_st_no = ls_prcd-stunr.
"abap_true
<fs_condx>-condition_nox = abap_true.
<fs_condx>-itm_numberx = abap_true.
<fs_condx>-change_id = abap_true.
<fs_condx>-cond_st_nox = abap_true.
ELSE.
READ TABLE lt_prcd INTO DATA(ls_prcd2) INDEX 1.
"Insert scenerio
<fs_cond2>-condition_no = ls_prcd2-knumv.
<fs_cond2>-itm_number = <fs_cond2>-itm_number.
<fs_cond2>-cond_st_no = <fs_cond2>-cond_st_no. " line no.
<fs_cond2>-change_id = 'I'.
"Pass X
<fs_condx>-condition_no = ls_prcd2-knumv.
<fs_condx>-itm_number = <fs_cond2>-itm_number.
<fs_condx>-cond_st_no = <fs_cond2>-cond_st_no.
<fs_condx>-condition_nox = abap_true.
<fs_condx>-itm_numberx = abap_true.
<fs_condx>-change_id = abap_true.
<fs_condx>-cond_st_nox = abap_true.
ENDIF.
ENDIF.
ENDLOOP.
"Delete scenerio
SORT lt_prcd BY kschl.
SORT ch_itemcond BY cond_type.
LOOP AT lt_prcd ASSIGNING FIELD-SYMBOL(<fs_del>).
IF <fs_del>-kschl IS NOT INITIAL.
READ TABLE ch_itemcond TRANSPORTING NO FIELDS
WITH KEY cond_type = <fs_del>-kschl
BINARY SEARCH.
IF sy-subrc IS NOT INITIAL.
"Delete scenerio
ls_con-condition_no = <fs_del>-knumv.
ls_con-cond_no = <fs_del>-knumh.
ls_con-itm_number = <fs_del>-kposn.
ls_con-cond_st_no = <fs_del>-stunr.
ls_con-cond_count = <fs_del>-zaehk."condition count
* ls_con-cond
ls_con-cond_type = <fs_del>-kschl."condition type
* ls_con-COND_VALUE = <fs_del>-KWERT."condition value
ls_con-CURRENCY = <fs_del>-WAERS.
* ls_con-CURRENCY_ISO = <fs_del>-WAERS.
ls_con-COND_UNIT = <fs_del>-kmein.
* ls_con-COND_P_UNT = <fs_del>-KPEIN.
ls_con-APPLICATIO = <fs_del>-kappl.
ls_con-CONPRICDAT = <fs_del>-kdatu.
ls_con-CALCTYPCON = <fs_del>-krech.
ls_con-CONBASEVAL = <fs_del>-kawrt.
ls_con-CONEXCHRAT = <fs_del>-kkurs.
ls_con-NUMCONVERT = <fs_del>-KUMZA.
ls_con-DENOMINATO = <fs_del>-KUMNE.
ls_con-CONDTYPE = <fs_del>-kntyp.
ls_con-CONDORIGIN = <fs_del>-KHERK.
ls_con-GROUPCOND = <fs_del>-KGRPE.
* ls_con-COND_UPDAT
ls_con-ACCESS_SEQ = <fs_del>-KOLNR.
ls_con-CONDCOUNT = <fs_del>-ZAEHK.
ls_con-CONDCLASS = <fs_del>-KOAID.
* ls_con-COND_UPDAT = 'X'.
ls_con-change_id = 'D'.
APPEND ls_con TO ch_itemcond.
SORT ch_itemcond BY cond_type.
CLEAR : ls_con.
"Pass X
ls_conx-condition_no = <fs_del>-knumv.
ls_conx-itm_number = <fs_del>-kposn.
ls_conx-cond_st_no = <fs_del>-stunr.
ls_conx-condition_nox = abap_true.
ls_conx-cond_type = abap_true.
ls_conx-itm_numberx = abap_true.
* ls_conx-cond_value = abap_true.
ls_conx-change_id = abap_true.
ls_conx-cond_st_nox = abap_true.
ls_conx-cond_count = abap_true.
ls_conx-condcntrl = abap_true.
ls_conx-condisacti = abap_true.
ls_conx-condclass = abap_true.
ls_conx-factbasval = abap_true.
ls_conx-scalebasin = abap_true.
ls_conx-scalbasval = abap_true.
ls_conx-unitmeasur = abap_true.
ls_conx-unitmeasur_iso = abap_true.
ls_conx-currenckey = abap_true.
ls_conx-currenckey_iso = abap_true.
ls_conx-condincomp = abap_true.
ls_conx-condconfig = abap_true.
ls_conx-condchaman = abap_true.
ls_conx-cond_no = abap_true.
ls_conx-change_id = abap_true.
ls_conx-vendor_no = abap_true.
APPEND ls_conx TO ch_itemcondx.
CLEAR: ls_conx.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
No comments:
Post a Comment