BADI 第三代增强 BADI 和 NEW BADI
BADI:Bussiness Add-In。
第三代增強:源代碼是以接口的形式發布,通過調用接口方法的方式實現。用戶增強是通過實現一個或多個基于這個接口的類,對同一個增強可能會出現不同的源代碼,這些源碼是通過過濾器實現的。
分為Classic BADI和New BADI,
傳統方式的的BADI的調用是使用cl_exithandler=>get_instance,
新BADI的調用方式是get badi / call badi
創建ClassIc BADI?步驟:
1、SE19輸入BADI名字,比如MB_MIGO_BADI,單擊按鈕“創建實現”,在彈出的對話框中輸入BADI實現的名字和描述,比如ZMB_MB_MIGO_BADI,(自動)為BADI實現指定一個接口(IF_EX+BADI名);
2、創建一個實施類來實現這個接口(ZCL_IM_BADI名);
3、在實施類的相應方法中編寫代碼實現業務邏輯。
NEW BADI的創建步驟:
SE19?輸入增強點的名字,比如MB_MIGO_BADI,單擊按鈕“創建實現”,在彈出的對話框中輸入增強實現的名字和描述,比如ZMB_MB_MIGO_BADI_NEW,(自動)為BADI實現指定一個接口(IF_EX+BADI名);
2、創建一個實施類來實現這個接口(ZCL_IM_BADI名);
3、在實施類的相應方法中編寫代碼實現業務邏輯。
目前Classic BADI會自動遷移至NEW BADI中:
1、SE19輸入BADI名字,比如MB_MIGO_BADI,單擊按鈕“創建實現”,在彈出的對話框中輸入BADI實現的名字和描述,比如ZMB_MB_MIGO_BADI,(自動)為BADI實現指定一個接口(IF_EX+BADI名);
2、創建一個實施類來實現這個接口,ZCL_IM_BADI名;
3、保存,提示已移植BADI實現,回車,在彈出的對話框中,單擊創建按鈕,創建NEW BADI(增強實現),輸入增強實現的名字和描述,比如ZMB_MIGO_BADI_NEW;
4、保存激活NEW BADI;
5、刪除剛創建的BADI實現;
6、在NEW BADI(增強實現)中的執行類的相應方法中寫代碼實業務邏輯。
上圖表示Classic BADI??ZMB_MIGO_BADI?會自動的轉化為 NEW BADI??ZMB_MIGO_BADI_SPOT
并且在實際調用過程中,二者都是用的new badi的調用語法,原因應該是這個BADI正好是存在一個enhancement spot。
MIGO中的另一個增強BADI:MB_DOCUMENT_BADI?好像不存在enhancement spot,它就不存在NEW BADI
Enhancement spot 是BADI的容器,在容器中定義我們自己的多個BADI,
BADI和NEW BADI的區別:
1、CLASS BADI用call method獲取BADI,CALL METHOD CL_EXITHANDLER=>GET_INST CHANGING INSTANCE = badi_name
NEW BADI不能用call method獲取BADI,要用GET BADI badi_name;
2、CLASS BADI用CALL METHOD調用BADI中的方法 CALL METHOD badi_name->method EXPORTING LGORT = wa_lgort;
NEW BADI用CALL BADI調用BADI中的方法 CALL BADI badi_name->method EXPORTING LGORT = wa_lgort;
3、NEW BADI中新增了ENHANCEMENT SPOT增強點、ENHANCEMENT SECTION以及隱式增強點的概念。
創建不同的BADI的實現以及對應的實現類 BADI Implementation 和 implementing class的關系是一對一的
怎么查找已經實施BADI:找到該程序所在的Package,運行程序SNIF,輸入package可得到已經實現的自定義增強
尋找新BADI,進入debug模式,然后再增加break/watchpoints新增動態斷點( GET BADI),變量名就是SE18中的BADI,然后可以找到增強實現。
總結
以上是生活随笔為你收集整理的BADI 第三代增强 BADI 和 NEW BADI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代理ip,代理服务器等相关
- 下一篇: 木马的常见欺骗方式