BADI OVERVIEW
什么是BADI,如何從SAP中查找BADI?
?Business Add-Ins are a new SAP enhancement technique based on ABAP Objects. They can be inserted into the SAP System to accommodate user requirements too specific to be included in the standard delivery. Since specific industries often require special functions, SAP allows you to predefine these points in your software.
SAP預定義了一些Interface,客戶可以自己定義實現Interface的Class進行客戶化,在標準程序中會使用調用客戶自定義Class的Instance,在獲取Instance的過程使用了工廠模式,因此獲取過程對用戶是未知的。不過BADI也有一些局限性,就是有哪些Interface是固定死的,有的時候會發現需要Mix客戶化代碼的時候找不到Interface,什么時候SAP的OO里面直接支持AOP就好了。
如何從SAP中查找BADI
BADI作為SAP的第三代用戶出口,他的應用也越來越廣泛,但如何找到合適的badi是許多abap程序員的困惑。我這里就介紹一下我個人的應用的經驗,供大家參考。
什么是BADI,如何從SAP中查找BADI?
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。
示例:用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). "----->這一個月的月份LOOP AT it_xlikp INTO wa_likp.CHECK is_v50agl-warenausg_storno ='X'."--->代表作GI cancelIF 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. "IF_EX_LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_HEADERTCODE:
SE18
SE19
BADI的實現步驟。
A.BADI定義
1.SE18。
2.輸入要創建的BADI的名字,點擊"Create"。
3.輸入BADI的描述性文本,在"Interface"選項卡上輸入接口的名字,也可以采用SAP建議的接口的名字。同時,BADI類也會被創建。
例如:對于BADI?"ZTEST",SAP會建議"ZIF_EX_TEST"作為接口的名字,"ZCL_EX_TEST"作為類的名字。
4.保存BADI。
5.雙擊接口的名字,會跳轉到Class?Builder界面,在這里你可以定義接口的方法。
6.保存并激活接口。
B.在應用程序中調用BADI
1.聲明一個BADI接口的參考引用變量。
例如:DATA?exit_ref?TYPE?REF?TO?zif_ex_test.
2.調用類CL_EXITHANDLER的靜態方法GET_INSTANCE,將返回一個請求對象的實例。
例如:
CALL?METHOD?CL_EXITHANDLER=>GET_INSTANCE
CHANGING?instance?=?exit_ref。
3.現在你可以調用BADI的所有方法了
C.BADI實現
1.SE19。
2.輸入BADI實現的名字,點擊"Create"。
3.輸入BADI定義的名字。
4.輸入實現的描述性文本,在"Interface"選項卡上輸入實現類的名字。可以采用SAP建議的名字。
例如:"ZIMPTEST",SAP會建議"ZCL_IM_IMPTEST"。
5.保存實現。
6.雙擊某一方法名會跳轉到Class?Builder界面,在這里你可以添加代碼來重定義接口方法。
7.激活實現
SAP BADI應用
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 中的方法了。
?
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
?
?
轉載于:https://www.cnblogs.com/Nirvanacafe/p/4422440.html
總結
以上是生活随笔為你收集整理的BADI OVERVIEW的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言八行杨辉三角空格数,C语言 杨辉三
- 下一篇: redis HSCAN命令及jedis的