[轉帖]SAP BADI應用

liushijun_12發表於2009-10-08

1.定義BADI
         1) T-Code:  SE18     Business Add-In Define.

   2) 輸入要建立的BADI的名字,點選"Create"。

   3) 輸入BADI的描述性文字,在"Interface"選項卡上輸入介面的名字,也可以採用SAP建議的介面的名字。同時,BADI類也        會被建立。

     例如:對於BADI "ZTEST",SAP會建議"ZIF_EX_TEST"作為介面的名字,"ZCL_EX_TEST"作為類的名字。

   4) 儲存BADI。

   5) 雙擊介面的名字,會跳轉到Class Builder介面,在這裡你可以定義介面的方法。

   6) 儲存並啟用介面。

2.實現BADI
         1) T-Code:  SE19     Business Add-In Implementation
         2) 輸入BADI實現的名字,點選"Create"。
         3) 輸入BADI定義的名字。
         4) 輸入實現的描述性文字,在"Interface"選項卡上輸入實現類的名字。可以採用SAP建議的名字。

    例如:"ZIMPTEST",SAP會建議"ZCL_IM_IMPTEST"。

   5) 儲存實現。

   6) 雙擊某一方法名會跳轉到Class Builder介面,在這裡你可以新增程式碼來重定義介面方法。

   7) 啟用實現。

3. 程式中呼叫BADI

1) 先用型別參照引用出要呼叫的BADI
      2) 例項化BADI
      3) 例項化後就可以任意呼叫BADI 中的方法了。

REPORT  ZZW_BAPI_01                                                 .

data exit type ref to ZIF_EX_ZW_BD_TEST.

call method cl_exithandler=>get_instance
     changing
        instance = exit.

call method exit->Z_ZW_01.

==》
badi 小記
BADI作為SAP的第三代使用者出口,他的應用也越來越廣泛,但如何找到合適的badi是許多abap程式設計師的困惑。我這裡就介紹一下我個人的應用的經驗,供大家參考。

1、badi物件的資訊儲存在SXS_INTER, SXC_EXIT, SXC_CLASS 和SXC_ATTR 這四個表中(參見SECE包);

2、sap程式都會呼叫cl_exithandler=>get_instance來判斷物件是否存在,並返回例項;其實get_instance就是對上述幾個表和他們的檢視(V_EXT_IMP 和 V_EXT_ACT)進行查詢和搜尋。

3、基於這個機理,我查用ST05來監控一個TCODE來跟蹤,然後選擇查詢有關上述幾個表和檢視的操作,就可獲得相關BADI。

4、se18 查詢介面,se19 實現介面就可以實現使用者增強。
示例:用LE_SHP_DELIVERY_PROC控制跨月Cancel

METHOD IF_EX_LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_HEADER .
data : thismonth(2) type c.
data : wa_likp type line of SHP_LIKP_T.
data : wa_log type line of SHP_BADI_ERROR_LOG_T.
clear ct_log[],thismonth.
thismonth = sy-datum+4(2). "-----&gt這一個月的月份
loop at it_xlikp into wa_likp.
check IS_V50AGL-WARENAUSG_STORNO ='X'."---&gt代表作GI cancel
if wa_likp-WADAT_IST+4(2) < thismonth.
wa_log-VBELN = cs_likp-vbeln.
wa_log-MSGTY = 'E'. "錯誤資訊
wa_log-MSGID = 'ZDN_ERROR'. "這一個class要自己建
wa_log-MSGNO = '001'.
append wa_log to ct_log. "Error log寫入
endif.
endloop.
ENDMETHOD.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10500555/viewspace-616097/,如需轉載,請註明出處,否則將追究法律責任。

相關文章