查找SAP標准事務代碼中使用的BADI:
在SE24中,查看類對象CL_EXITHANDLER,在其方法(Methods)GET_INSTANCE 的第14行打斷點,之后運行事務代碼;
當有BADI將會被執行的時候,這時候會進入類CL_EXITHANDLER的GET_INSTANCE方法,按F6執行這個方法之后,參數EXIT_NAME中的值便是BADI定義(SE18中看到的東西),參數CLASS_NAME則是類對象名稱(SE24里面看到的東西),所有的方法實現都是存在於類對象中;
通過查找類方法中的參數(Parameter)和對對象的屬性(Attribute),如果能滿足自己需要實現的功能,則可以通過實現這個BADI來做增強。
實現BADI的方法(ECC6.0版本下):
進入SE19,選擇Create Implementation中的Classic BADi,輸入剛才查找到的EXIT_NAME;
點擊Create Impl,輸入實現名;
點綠勾;
點擊保存,激活(如果是ECC6.0版本,則還需要指定對應的Enhancement Spot,才可以完全創建成功。但是這里有個疑問:我第一次創建BADI實現需要指定Enhancement Spot,這次創建保存激活時直接創建成功,並沒有提示我需要指定Enhancement Spot,不知道為什么!);
雙擊進入方法CHANGE_SEGMENT_PSEGMENT,即可在里面實現功能;
下面再運行F-02,執行程序,即可進入此段代碼。
查找SAP標准事務代碼中使用的USER_EXIT:
在SE37中,查看函數MODX_FUNCTION_ACTIVE_CHECK ,在最后一行打斷點;
當有USER_EXIT將會被執行的時候,這時候函數MODX_FUNCTION_ACTIVE_CHECK中的參數L_FUNCNAME 會顯示出口的名稱。
如果要使用這個出口,必須先激活(已經激活的則不需要);
先去表MODSAP中查找這個程序名的出口名;
進入CMOD,創建出口對象(以下圖例使用的是一個已經存在的增強對象);
選擇Enhacement assignments;
在這里輸入增強對象名,也就是剛才在MODSAP表里面查到的F180A001,點擊組件;
選擇修改,激活這些增強,雙擊進入EXIT_SAPLF048_001 程序;
創建INCLUDE ZXF48U01;
運行F-02,便會進入此出口程序。