SAP中寻找增强的实现方法
SAP?增強已經(jīng)發(fā)展過幾代了,可參考 SAP?標準教材 BC425?和 BC427。簡單的說SAP的用戶出口總共有四代:
1、第一代??基于源代碼的增強。
SAP提供一個空代碼的子過程,在這個子過程中用戶可以添加自己的代碼,控制自己的需求。這類增強都需要修改sap的標準代碼。
示例:USEREXIT.. in SAPMV45A?
源代碼增強以子程序形式發(fā)布,在 SAP?的發(fā)行版本中,使用 PERFORM?調(diào)用這些子程序,它們在發(fā)布時都是空的,集中在一些文件名倒數(shù)第二個字符為 Z?的包含程序中。用戶增強時,應首先到 service marketplace?申請對象鍵,然后才能修改這些子程序,這些子程序可以使用程序中所有的全局數(shù)據(jù)。
屏幕增強以客戶屏幕形式發(fā)布,它們包含在標準程序中,沒有什么特別規(guī)律。
這種源代碼增強和屏幕增強的說明可以從事務(wù)碼 spro?后臺配置中相關(guān)模塊的路徑里面找到。
同時使用的針對數(shù)據(jù)表的增強是 append structure,可以在事務(wù)碼 se11?中打開透明表,點擊應用工具欄最右邊的那個 append structure?按鈕就能為數(shù)據(jù)表追加新的字段。
2、第二代?基于函數(shù)模塊的增強。
SAP提供的是CUSTOMER-FUNCTION,它是通過SMOD和CMOD完成實現(xiàn)。
源代碼增強以函數(shù)模塊形式發(fā)布,在 SAP?的發(fā)行版本中,使用 CALL CUSTOMER-FUNCTION?調(diào)用這些函數(shù)模塊,它們在發(fā)布時只有一句代碼 INCLUDE xxxxxxx。用戶增強時,無需申請對象鍵,直接雙擊這個包含,然后回車,就可以創(chuàng)建相關(guān)的包含文件,編寫相應的代碼了。這些函數(shù)模塊中只能使用接口中傳遞的參數(shù),不能使用調(diào)用程序的全局變量。
屏幕增強也包含在函數(shù)模塊所屬的函數(shù)組中。
針對數(shù)據(jù)表的增強是 CI_?結(jié)構(gòu),這些結(jié)構(gòu)以 .INCLUDE?結(jié)構(gòu)的形式包含在 SAP?發(fā)布的數(shù)據(jù)表中,用戶可以通過向這些結(jié)構(gòu)中添加字段而對數(shù)據(jù)表進行增強。
上述這類增強通過事務(wù)碼 SMOD?進行維護,CMOD?進行實現(xiàn)。SMOD?中的一個增強可以包含上述的源代碼、屏幕和表結(jié)構(gòu)增強,按照較容易理解的邏輯結(jié)構(gòu)來管理這些增強,使用相對更加便利。
3、第三代??基于面向?qū)ο蟾拍畹脑鰪姟?br /> SAP提供的第三代的用戶出口就是BADI,它使用類、接口及方法等面向?qū)ο蟮母拍?采用一種使用面向?qū)ο蟮姆椒▉磉M行SAP?增強,他的調(diào)用方式是CALL METHOD (instance),(相關(guān)的TCODE是SE18和SE19),可以通過EXIT_HANDLER這個單詞查找BADI。
BAdI(Business Add-Ins),源代碼增強以接口形式發(fā)布,在 SAP?的發(fā)行版本中,也是通過接口的方法調(diào)用來使用。用戶增強時,實際是實現(xiàn)一個(或多個)基于這個接口的實現(xiàn)類。由于接口可以有多個實現(xiàn)類,所以對一個增強可以有多種不同的源代碼,它們通過過濾器應用于不同的業(yè)務(wù)場景。
這種增強使用事務(wù)碼 SE18?創(chuàng)建、SE19?實現(xiàn)。
4、第四代:Switch Framework。
SAP?從 NetWeaver 7.0?以后推出的新增強體系,它對 BAdI?做出了改進,改叫新 BAdI?了。還新增 Enhancement Spot?和 Enhancement Section?以及隱式增強點的概念,基本可以在面向?qū)ο蟮某绦蚶飳崿F(xiàn)處處皆可增強的最高境界。
方法一、利用TCODE尋找增強(第二代的增強)
????執(zhí)行一個程序(源代碼后附),在選擇屏幕處輸入你所需要增強的程序TCODE,執(zhí)行後,就會出現(xiàn)一個列表,那里就有關(guān)于如何增強這個的絕大部分SMOD增強。
????點擊進去,本人手動尋找需要的增強。
????這是第二代增強
?
?方法二、利用系統(tǒng)函數(shù)尋找 ????
??? MODX_FUNCTION_ACTIVE_CHECK
????在這個FUNCTION的代碼最后添加一個斷點。執(zhí)行需要增強的TCODE,如果有增強,就會自動跳入DEBUG界面。在DEBUG界面,查看f_tab字段,這里面所顯示的Smod就是關(guān)于這個TCODE所有的增強項目的列表。這些增強都是屬于EXIT_XXXXXX_XXX這種形式。
????至于如何查看這個增強是屬于哪個SMOD,查閱 MODSAP這個表(SAP Enhancements).
????這是第二代增強。?
????還有一些FUNCTION供參考:
??? [1].DYNP_VALUES_READ
??? [2]. MODX_ALL_ACTIVE_MENUENTRIES(菜單增強)
??? [3].MODX_FUNCTION_ACTIVE_CHECK(出口函數(shù)增強)
??? [4].MODX_MENUENTRY_ACTIVE_CHECK(菜單增強)
??? [5].MODX_SUBSCREEN_ACTIVE_CHECK(屏幕增強)
????這些的使用方法和上述的一樣,能夠針對各種情況尋找增強。?
????方法三、從程序代碼中找
對于第一代增強,可以用以下方法查找增強:
???在需要增強的程序里面,打開SYSTEM——》status,雙擊進入PROGRAM,打開欲增強的程序,點擊工具欄上的“Display Object List”按鈕,選擇Subroutines,查找以“UserExit”開頭的子程序,根據(jù)子程序前面的注釋文檔來查找用戶出口,?由描述來確定合適的需要增強的FORM。
?
對于第二代增強,可以用以下方法查找增強
用戶增強通常包括下面3類,顧名思義,就是增強SAP的可能沒有提供的功能(通過后臺配置也不能實現(xiàn)).
1.E Enhancement exits :就是常說User_exit (用戶出口)
使用SE37搜索EXIT*的函數(shù)大都是做exit用的,通常里面預包含了一個Z開頭
的程序. SE16查詢TFDIR(函數(shù)表)輸入EXIT*也可.
2.C GUI codes( GUI接口增強)
3. S Subscreens (屏幕增強)
Enhancement在表MODSAP可看到,而TFDIR字段 MAND(值為C表示此出口函數(shù)被激活).使用SMOD(CMOD)當然可激活exit function,有時候一時難以查詢到相關(guān)Enhancement時可使用下面程序?qū)⒊隹诤瘮?shù)激活.
REPORT Zactexitfun .
data ztfdir like tfdir .
* select single * from tfdir into ztfdir
* where FUNCNAME =
* 'EXIT_SAPMM06E_013'.
* ztfdir-MAND = 'C' .
* update tfdir from ztfdir.
*?將EXIT_SAPMM06E_013換成實際所需exit函數(shù)名
update tfdir set MAND = 'C'.
where FUNcname = 'EXIT_SAPMM06E_013'.
***當然也可SE16:MODSAP表enhancement輸入EXIT_SAPMM06E_013然后得到enhancement name MM06E005后使用SMOD測試激活exit函數(shù).
Table:?
[1]. TFDIR->function module table
[2]. MODSAP->sap enhancement table
[3]. TSDIR->Dynpro Areas CALL CUSTOMER SUBSCREEN(屏幕增強)
[4]. CUATEXTS-> GUI Interface: Menu Texts Changed(GUI?菜單文本增強)
***注意,為了確保一個出口被真正應用,必須同時激活相關(guān)程序(SE38)和出口函數(shù)(SMOD|CMOD,反正就是要保證tfdir-mandt=’C’,用程序也可.
????方法四、針對BADI的增強?
?????
??? 1、badi對象的消息存儲在SXS_INTER, SXC_EXIT, SXC_CLASS?和SXC_ATTR?這四個表中。
來源:www.va1314.com/bc
??? 2、sap程序都會調(diào)用cl_exithandler=>get_instance來判斷對象能否具有,并前往實例;其實get_instance就是對上述幾個表和他們的視圖(V_EXT_IMP?和 V_EXT_ACT)進行查詢和搜索。
因此可以通過SE24-> CL_EXITHANDLE->方法GET_INSTANCE設(shè)置斷點,獲取相關(guān)的BADI。
??? 3、基于這個機理,用ST05來監(jiān)控一個TCODE來跟蹤,然后選擇查找有關(guān)上述幾個表和視圖的操做,就可獲得相關(guān)BADI。
??? 4、se18?查找接口,se19?實現(xiàn)接口就能夠?qū)崿F(xiàn)用戶增強。?
?
方法五、通過SPRO后臺配置相關(guān)模塊下的菜單查找,此處的增強組件有比較詳細的說明
總結(jié)
以上是生活随笔為你收集整理的SAP中寻找增强的实现方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP:HANA为高性能数据分析保驾护航
- 下一篇: PO Print