sap 一代增强_SAP增强Enhancement
第一代:基于源碼增強(qiáng)(子過(guò)程subroutine)
第一代增強(qiáng)基于源代碼,是SAP提供的一個(gè)空代碼的子過(guò)程。在這個(gè)子過(guò)程中用戶可以添加自己的代碼,控制自己的需求。這類增強(qiáng)集中在一些文件名倒數(shù)第二個(gè)字符為Z的包含程序中。 一般是以UserExit_打頭的子過(guò)程,因此形象地稱其為用戶出口。
用戶出口Include在SAP標(biāo)準(zhǔn)程序的源代碼里,可以說(shuō)是源代碼的一部分,更改用戶出口就相當(dāng)于更改SAP標(biāo)準(zhǔn)程序,是需要在SAP Service MarketPlace里申請(qǐng)對(duì)象鍵(Access Key)才能更改,不需要建立工程;由于是在標(biāo)準(zhǔn)程序中,所以標(biāo)準(zhǔn)程序的全局?jǐn)?shù)據(jù)都可以使用,但同時(shí)系統(tǒng)升級(jí)時(shí)會(huì)被新版本覆蓋。
用戶出口的說(shuō)明可以從后臺(tái)配置SPRO的相關(guān)模塊的路徑找到,大部分SD的出口都是此類增強(qiáng)。
查找此類出口的方法:
1、在程序中查找文件名倒數(shù)第二個(gè)字符為Z的Include包含程序。
2、在后臺(tái)查找對(duì)應(yīng)的模塊增強(qiáng):在程序中搜索USEREXIT_打頭的子過(guò)程;在SAP中以PERFORM的形式被調(diào)用。
3、單擊
”Display Object List”按鈕,在子程序列表查找“UserExit_”打頭的子過(guò)程。
第二代:基于函數(shù)模塊增強(qiáng)(Function)
第二代增強(qiáng)基于函數(shù)模塊,用事務(wù):SAP增強(qiáng)管理(SMOD)和增強(qiáng)編輯器(CMOD)維護(hù)。在SAP發(fā)布的版本中,使用Call Customer-Function 'xxx'調(diào)用函數(shù)模塊,所以可以通過(guò)在程序中搜索 Customer-Function來(lái)查找第二代增強(qiáng),第二代增強(qiáng)函數(shù)名構(gòu)成為Exit_程序名_'xxx(3 digital number)'。它們?cè)诎l(fā)布時(shí)只有一句代碼include "ZXxxxxxx",修改時(shí)無(wú)需像第一代增強(qiáng)一樣申請(qǐng)對(duì)象鍵,直接按兩次Enter鍵就可以了。但同時(shí)這種增強(qiáng)以及后面幾代的增強(qiáng)都不能像第一代一樣隨便使用程序的全局?jǐn)?shù)據(jù),只能使用接口中傳遞進(jìn)來(lái)的參數(shù)。由于帶有關(guān)鍵字Customer,故被稱為Customer Exits(客戶出口)。
第二代增強(qiáng)主要有4類:
E.Ehancement exits:這些出口以Exit_打頭,可以在SE37中查看,也可以在數(shù)據(jù)字典TFDIR(函數(shù)表)中查詢Exit_打頭的函數(shù)
C.GUI codes(GUI增強(qiáng)):用于區(qū)域菜單和工具菜單欄的增強(qiáng)
S.Subscreens(屏幕增強(qiáng)):用于子屏幕設(shè)計(jì)增強(qiáng)
T.include structure增強(qiáng):用于表結(jié)構(gòu)的增強(qiáng)
另外,按用途分類:
功能模塊出口(Function Module Exits):在SAP標(biāo)準(zhǔn)事務(wù)中添加業(yè)務(wù)邏輯,一般用于驗(yàn)證標(biāo)準(zhǔn)事務(wù)中的字段
屏幕出口(Screen Exits):定義自己的子屏幕嵌入應(yīng)用屏幕,在標(biāo)準(zhǔn)事務(wù)中添加子屏幕
菜單出口(Menu Exits):定義自己的菜單項(xiàng)或激活屏蔽標(biāo)準(zhǔn)事務(wù)中的菜單項(xiàng)
表出口(Table Exits):與上述T型出口一樣,屬同一類型
數(shù)據(jù)元素出口(Data Element Exits):在ABAP/4字典的關(guān)鍵字?jǐn)?shù)據(jù)元素中添加文檔。結(jié)果是在使用這些數(shù)據(jù)元素的字段處按F1鍵后會(huì)出現(xiàn)自定義的說(shuō)明文檔
關(guān)鍵字出口(Keyword Exits):在ABAP/4字典中的關(guān)鍵字?jǐn)?shù)據(jù)元素更改表示文本
字段出口(Field Exits):根據(jù)ABAP/4字典中域驗(yàn)證某些標(biāo)準(zhǔn)事務(wù)的某些屏幕字段。
Ehancement 比較重要的表
MODSAP:SAP擴(kuò)充表,重要字段增強(qiáng)名(Name)、組件類型(TYPE:ECST)、組件模塊名(Member)里面記錄了所有Enhancement的增強(qiáng)
TFDIR:功能模塊表,重要字段FuncName(函數(shù)名)、功能模塊激活狀態(tài)MAND(如果是C,代表此函數(shù)模塊激活)
TSDIR:動(dòng)態(tài)程序區(qū)CALL CUSTOMER SUBSCREEN(屏幕增強(qiáng))
CUATEXTS:修改GUI界面,菜單文本被客戶改變(GUI菜單文本增強(qiáng))
MODSAPA:SAP擴(kuò)展的屬性
MODATTR:SAP增強(qiáng)項(xiàng)目屬性
TADIR:資源庫(kù)對(duì)象的目錄
TFTIT:函數(shù)功能的短文本
查找Ehancement 的方法:
1、查找關(guān)鍵字: 在程序中搜索Customer-Function,找到后面的3位數(shù)字后綴,然后出口函數(shù)組成就是Exit_程序名_3位數(shù)字后綴
2、代碼查找
3、利用系統(tǒng)函數(shù)尋找增強(qiáng)
常與出口相關(guān)的函數(shù)有:
DYNP_VALUES_READ
MODX_ALL_ACTIVE_MENUENTRIES 菜單增強(qiáng)
MODX_FUNCTION_ACTIVE_CHECK 函數(shù)增強(qiáng)
MODX_MENUENTRY_ACTIVE_CHECK 菜單增強(qiáng)
MODX_SUBSCREEN_ACTIVE_CHECK 屏幕增強(qiáng)
可以在函數(shù)最后設(shè)置斷點(diǎn),然后通過(guò)運(yùn)行對(duì)應(yīng)的增強(qiáng)程序就會(huì)調(diào)用這樣的函數(shù),這樣就可以在調(diào)試模式下找到對(duì)應(yīng)的增強(qiáng)。
第三代:基于類的增強(qiáng)(BADI)
BADI(Business Add-in)是一個(gè)新的SAP增強(qiáng)技術(shù),是基于ABAP的面向?qū)ο蠹夹g(shù)。源代碼的發(fā)布是通過(guò)接口的方法調(diào)用來(lái)實(shí)現(xiàn)使用的。此類增強(qiáng)實(shí)際上是實(shí)現(xiàn)一個(gè)或多個(gè)接口的實(shí)現(xiàn)類,因此對(duì)同一個(gè)增強(qiáng)會(huì)出現(xiàn)不同的源代碼,這些不同的源代碼是通過(guò)過(guò)濾器(Adapter)來(lái)區(qū)別用于不同的業(yè)務(wù)場(chǎng)景的。這種增強(qiáng)使用事務(wù)碼 SE18 定義、SE19 實(shí)現(xiàn)。 SAP預(yù)定義了一些接口(Interface),客戶可以自行定義實(shí)現(xiàn)Interface的類(Class),在標(biāo)準(zhǔn)程序中會(huì)調(diào)用客戶自定義類的實(shí)例,獲取實(shí)例的過(guò)程使用了工廠模式。
業(yè)務(wù)交易事件(BTE,Business Transaction Events)是SAP的一種增強(qiáng)方式,技術(shù)上講是介于第二代增強(qiáng)(Customer Exits)和BAdIs之間的產(chǎn)物。這類增強(qiáng)為會(huì)計(jì)模塊獨(dú)有的增強(qiáng),用于財(cái)務(wù)會(huì)計(jì)模塊(Open FI)、總賬會(huì)計(jì)(FI-GL)、應(yīng)收賬款和應(yīng)付賬款(FI-AR/FI-AP)及銷售和分銷(SD)的組件。有兩種類型,類似于會(huì)計(jì)憑證和替代:
1、Publish and Subscribe Interface:只提供SAP數(shù)據(jù)源,可以供外部程序使用或達(dá)到數(shù)據(jù)檢查的目的。
用于告訴外部軟件在SAP標(biāo)準(zhǔn)應(yīng)用中觸發(fā)了某些事件,并且把產(chǎn)生的數(shù)據(jù)提供給他們。外部軟件不能給R/3系統(tǒng)返回任何數(shù)據(jù),可以用在以下地方:主數(shù)據(jù)被創(chuàng)建、修改或鎖定; 憑證被輸入、預(yù)制、修改或沖銷;項(xiàng)目被清除或重置也可以在附加的開(kāi)發(fā)中基于此事件和數(shù)據(jù)產(chǎn)生附加的處理:啟動(dòng)工作流; 產(chǎn)生或修改附加數(shù)據(jù);請(qǐng)求通信
2、Process Interface:可以達(dá)到數(shù)據(jù)修改的目的,用來(lái)增強(qiáng)標(biāo)準(zhǔn)的業(yè)務(wù)流程。
用于控制與標(biāo)準(zhǔn)R/3系統(tǒng)處理方法不同的業(yè)務(wù)流程,也就是用Process Interface替換標(biāo)準(zhǔn)處理。它們干預(yù)標(biāo)準(zhǔn)流程,并返回?cái)?shù)據(jù)給SAP應(yīng)用。
BTE查找方法,兩種方法:
1、運(yùn)行事務(wù)碼(例如XK02),選擇Sytem-Status,雙擊Program(screen),選中In main Program,查找OPEN_FI_PERFORM字符串
2、IMG-財(cái)務(wù)會(huì)計(jì)全局設(shè)置(新)-工具-客戶增強(qiáng)-業(yè)務(wù)事務(wù)事件(FIBF),選擇環(huán)境。
BADI查找方法:
BAdI對(duì)象的信息存儲(chǔ)在SXS_INTER, SXC_EXIT, SXC_CLASS 和 SXC_ATTR這4張表中(參見(jiàn)SECE包)。SAP BAdI程序都會(huì)調(diào)用cl_exithandler=>get_instance來(lái)判斷對(duì)象是否存在,并返回實(shí)例。這個(gè)方法實(shí)際就是對(duì)上述4張表及視圖V_EXT_IMP 和 V_EXT_ACT進(jìn)行查詢和搜索。基于以上機(jī)理有以下方法:
(1)使用SE24進(jìn)入Class Builder,查找CL_EXITHANDLER,進(jìn)入get_instance方法,在get_class_name_by_interface調(diào)用處設(shè)置斷點(diǎn)。Debug需要增強(qiáng)的事務(wù),在斷點(diǎn)處查看exit_name即可找到對(duì)應(yīng)的BAdI。
(2)使用性能分析器(事務(wù)碼ST05)跟蹤。
1、運(yùn)行事務(wù)碼ST05,選擇“table buffer trace”,而不是常用的“SQL trace”
2、activate trace(開(kāi)始跟蹤)
3、運(yùn)行事務(wù)碼:me21n
4、創(chuàng)建一個(gè)采購(gòu)訂單,保存
5、deactivate trace(結(jié)束跟蹤)
6、點(diǎn)擊display trace,在出來(lái)的選擇條件中: objects中輸入:V_EXT_IMP和V_EXT_ACT;operations中輸入“OPEN”
7、查詢,通過(guò)查詢的結(jié)果可以看出,視圖V_EXT_IMP的BADI的接口類名字都是以IF_EX_開(kāi)頭的,其中IF_EX_之后的就是對(duì)應(yīng)BADI接口的定義。
(3)SE18查找接口,SE19實(shí)現(xiàn)接口就可以實(shí)現(xiàn)用戶增強(qiáng)。
第四代:EnhancementFramework
在不改變(或盡量少改變)SAP標(biāo)準(zhǔn)程序的情況下滿足客戶的定制開(kāi)發(fā)需求。Keep less Modification.
Enhancement Framework的基本概念:
Ehancement Spot:?用來(lái)組織Enhancement options,it's a container of Enhancement options.
Enhancement Implementation:用來(lái)組織Enhancement options的實(shí)現(xiàn)代碼。
隱式增強(qiáng)
隱式增強(qiáng)就是系統(tǒng)內(nèi)置的Enhancement options,是系統(tǒng)本身就預(yù)留的,如在:執(zhí)行程序,包含程序,函數(shù)組,對(duì)話模塊的結(jié)尾;Form例程,函數(shù)模塊,方法等的開(kāi)始和結(jié)尾;結(jié)構(gòu)的結(jié)尾這些地方都會(huì)有。Implicit enhancements comprise class enhancements, function group enhancements and predefined enhancement points at particular predefined positions such as the end of a report, a function module, an include or a structure and the beginning and the end of a method.
顯示增強(qiáng)
顯式增強(qiáng)就是手工加入到程序中的Enhancement options,有兩種顯式增強(qiáng):
ENHANCEMENT-POINT: 只有一個(gè)預(yù)留點(diǎn), 沒(méi)有代碼,用來(lái)在程序中直接插入新的功能代碼,其概念與BADI的USER_EXIT類似,標(biāo)準(zhǔn)程序預(yù)留了部分已定義好的增強(qiáng)點(diǎn)可以讓ABAP做插入代碼來(lái)實(shí)現(xiàn)這個(gè)增強(qiáng)(也可以自定義增強(qiáng)點(diǎn),但不能自定義增強(qiáng)選項(xiàng),增強(qiáng)選項(xiàng)一定是系統(tǒng)預(yù)留下來(lái)的,如果沒(méi)有增強(qiáng)選項(xiàng)則該處不可做增強(qiáng)),但是不能做屏幕和菜單增強(qiáng)。
其最大的優(yōu)勢(shì)在于方便,可以使用程序中已定義的變量,不像BTE和Customer EXIT中只能使用函數(shù)接口傳過(guò)來(lái)的參數(shù)。
一般增強(qiáng)步驟:
1、DEBUG標(biāo)準(zhǔn)程序找到需要增強(qiáng)的位置,點(diǎn)EDIT->SHOW IMPLICIT ENHANCEMENT OPTIONS查看是否有預(yù)留增強(qiáng)選項(xiàng)(標(biāo)準(zhǔn)程序不能自己創(chuàng)建enhancement option ,只能使用系統(tǒng)預(yù)留的)。
2、創(chuàng)建增強(qiáng)點(diǎn)實(shí)現(xiàn)
為自己程序創(chuàng)建顯示增強(qiáng)選項(xiàng)Explicit Enhancement options
單擊[創(chuàng)建選項(xiàng)]菜單進(jìn)入創(chuàng)建增強(qiáng)選項(xiàng)界面,輸入增強(qiáng)點(diǎn)名及增強(qiáng)容器名(以Z開(kāi)頭),確認(rèn)回車。
注:Enhancement Spot?就是SE18中的Enhancement Spot。
隨后Editor上會(huì)多出一條語(yǔ)句,然后單擊
按鈕切換增強(qiáng)模式。
光標(biāo)定位到增強(qiáng)語(yǔ)句上,單擊[創(chuàng)建實(shí)現(xiàn)]菜單項(xiàng)創(chuàng)建增強(qiáng)點(diǎn)實(shí)現(xiàn)。
注:Enhancement Spot相當(dāng)于一個(gè)容器,創(chuàng)建一個(gè)增強(qiáng)點(diǎn)的必要條件是要有一個(gè)容器。每個(gè)增強(qiáng)點(diǎn)都可以創(chuàng)建到這個(gè)容器當(dāng)中,也可以再創(chuàng)建一個(gè)容器。刪除這個(gè)容器的方法:在本地對(duì)象或它的包中刪除或在SE18中刪除,激活程序,退出后再打開(kāi)程序。
ENHANCEMENT-SECTION: 用來(lái)替換原有的功能代碼,ENHANCEMENT-SECTION?和?END-ENHANCEMENT-SECTION之間有代碼, implementation?之后, 替換舊代碼,只執(zhí)行新代碼,原來(lái)的代碼不再執(zhí)行。
兩者的區(qū)別是:enhancement-point沒(méi)有代碼,只有一個(gè)預(yù)留點(diǎn),允許在這個(gè)位置插入新代碼(implementation),類似于AOP。而enhancement-section和end-enhancement-section之間有代碼,implementation之后,替換舊代碼,只執(zhí)行新代碼,原來(lái)的代碼不再執(zhí)行,類似于OO中的方法重寫/覆蓋。
注:SAP提供了一個(gè)標(biāo)準(zhǔn)程序SNIF,通過(guò)這個(gè)程序可以直接查找出系統(tǒng)已經(jīng)實(shí)施的BAdi、BTE、客戶出口、字段出口甚至是調(diào)用的BAPI。具體操作方法:打開(kāi)【系統(tǒng)】|【狀態(tài)】菜單,雙擊進(jìn)入程序,點(diǎn)擊【對(duì)象列表】按鈕,然后通過(guò)點(diǎn)擊【上級(jí)對(duì)象列表】按鈕,找到程序所在的包。SE38運(yùn)行程序SNIF,輸入包名,如果勾上【也選擇SAP實(shí)施業(yè)務(wù)加載項(xiàng)】就會(huì)把SAP標(biāo)準(zhǔn)的增強(qiáng)實(shí)現(xiàn)也顯示出。運(yùn)行后,可以點(diǎn)擊各Tab頁(yè)查看已經(jīng)實(shí)現(xiàn)的自定義增強(qiáng)。
總結(jié)
以上是生活随笔為你收集整理的sap 一代增强_SAP增强Enhancement的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: sm4 的s盒_SM4国密算法Java版
- 下一篇: 企业微信推送消息延迟_iPhone手机微