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