Enhancement(1)--BTEs架構
最近一個同事碰到一個FI的加強,要用BTEs實現,我也是第一次接觸到這種加強,因此跟着他一塊兒作了一下。寫一個這方面的小節。app
BTEs(Business Transaction Events),是SAP的一種加強方式,技術上講是介於Customer Exits和BAdIs的產物。
它主要有兩種類型的接口:
Publish and Subscribe Interface
Process Interface
其比較核心的理念是,使一個接口重複利用,多種實現而且互不干擾。而技術實現的時候,就採用在標準程序中Call固定的一個functioin,而後再用 這個function動態調用本身定義的加強function,從而達到預期目的。
這樣的接口,在標準程序中經常是以OPEN_FI_PERFORM_或者OUTBOUND_CALL_開頭的function。
因爲採用這種技術架構,SAP就使這些接口,分爲Made by SAP, Made by SAP's Partner, Made by SAP's Customer,三方能夠個取所需。
至於Publish and Subscribe Interface和Process Interface的區別,主要仍是用途上的。前者,使給外部軟件提供信息的,然後者主要用於R/3流程的。不過前者也能夠生成或修改一些 additional data。
BTEs主要用於總賬,應收應付和銷售分銷模塊。
我作的那個是Process Interface,說來也很簡單,就是在billing posting的時候,把Head的text改掉。
下面,我來講一下流程。
- T-code: FIBF 進入BTEs的界面
- Environment->Infosystem(Processes)->運行->Process 00001120->Sample function module, 而後複製這個function到本身的Z或Y程序中->編輯新複製的程序,加入本身的代碼
- 回到FIFB界面,Settings->Products->...of customer->New Entries加入本身的product,並激活
- 回到FIFB界面,Settings->Process Modules->... of customer->新建主鍵是 00001120的Process,並將剛纔創建的function module和product寫到相應欄位。
以後,運行相應的過帳程序,諸如T-CODE VF01或是FB01,生成財務憑證,察看憑證的HEAD TEXT是否被修改。post
原代碼不方便貼,就放些關鍵的代碼。 性能
SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; } LOOP AT T_BKPFSUB.
T_BKPFSUB-BKTXT = 'KEVIN BTEs' .
MODIFY T_BKPFSUB INDEX SY-TABIX.
ENDLOOP . this
Enhancement(2)--Dictionary Elementscode
對於透明表及結構的加強,主要兩種。一種是Append Structure,還有一種就是Include形式。orm
Append Structure能夠擴展原來的表結構,可是並非在原來的表上加字段,而是再建一個附加的結構,物理上,數據是存在兩處的。並且,一個Append Structure只能有一張表結構。若是把有Append Structure結構的表進行復制的話,那麼在新的表中,原有的Append Structure就變成了固定字段,物理表也變成了一張。
Include格式,多見於因爲加強而自動生成的表字段,好比作屏幕加強的時候。固然,你也能夠本身定義。相比Append Structure, Include就能夠包含多張表結構(Include的Data Elements能夠Append Structure)。它不具備Append Structure的‘複製’性能,即便複製,仍是會以原結構存在於新表中。
當你作完加強後,若是想所加字段在SM30表維護中也出現,那麼須要經過如下路徑生成表維護程序:
SE11->進入相應表,並作完加強->Utilities->Table Maintenance Generator
若是你要反覆地更改加強,好比改變某一字段的長度。那麼在減小字段時,需用SE14進行物理表的修改,不然沒法激活。
有一種狀況要注意,原有數據表中存在數據時,Append Structure或Include加強,不會影響原有數據,只會在原有的數據中加上相應的空白字段。若是,將字段的長度減小時,數據的就會丟失,通常是 從尾部開始丟失。因此不建議,在已有數據的狀況下,減小字段長度。
下面將如下我碰到的一個實際例子。
因爲業務的須要,一個標準表的標準字段長度不夠,這時候就要加強字段長度。我那時候想了3套方案。
1.直接增長字段長度。
(因爲這個字段有必定的命名規則,程序會截取字符進行進行判斷,直接增長字段長度,直接修改代價比較大)
2.Apend一個附加字段,在邏輯判斷的時候,將附加字段和原有字段綜合起來進行判斷。
(要修改相應的程序)
3.因爲這個字段是用來Mapping的,有它必定的命名規則。改變原有的命名規則,延長這個字段的使用壽命。
如今還沒定出來使用哪一個。不過我的感受,若是一開始架構的時候能對業務增加有一個比較可靠的估計,那麼碰到這種狀況的機率也會大大減小。畢竟,上線後再作 修改和加強,已經屬於費力的工程了。
對於字典文檔的加強,能夠在如下路徑中作:
CMOD->GoTo->Text enhancements->Data elements/Keywords
Enhancement(3)--User Exits
User Exits是SAP第一代加強技術,其技術原理就是在程序中預先置放一個Form...EndForm的子程序,並在事物運行時Call這個Form。當 然,若是這個Form是空的,那麼不執行任何操做,反之,執行相應的動做。User Exits的寫法,和修改標準程序是一致的,要有向SAP申請Access Key才能對這些程序進行修改。與修改標程的區別在於,在SAP作升級的時候,User Exits會自動保留,標程的修改若是不作特殊處理,就會被覆蓋。
在作這樣的加強時,要養成一個習慣,那就是把你所要添加的代碼都寫在本身以Z開頭的function中,而後在Form中調用這個function。
例如:
SPAN { font-family: "Courier New"; font-size: 10pt; color: #000000; background: #FFFFFF; } .L1S31 { font-style: italic; color: #808080; } .L1S33 { color: #4DA619; } .L1S52 { color: #0000FF; } FORM Add .
CALL FUNCTION 'ZGDTEST'
EXPORTING
I_CHAR =
I_FLOAT =
* IMPORTING
* E_DATE =
* E_CHAR =
* E_VAR =
.
ENDFORM .
下面來說一下,如何找到此類出口:
方法 1:接口
SPRO -> SAP Reference IMG ,按 , Search Term 中填入 ’USER EXIT’ 就能夠查到每一個模塊相應的出口了,每一個出口 SAP 都 會有相應的使用說明。ci
例子:element
User Exits In Sales Document Processing
程序: MV45AFZZ
出口名: USEREXIT_SAVE_DOCUMENT
使用說明:
Use this user exit to fill user-specific statistics update tables.
The user exit is called up by the FORM routine BELEG-SICHERN before the COMMIT command.
Note
If a standard field is changed, the field r185d-dataloss is set to X. The system queries this indicator at the beginning of the safety routine. This is why this indicator must also be set during the maintenance of user-specific tables that are also to be saved.
方法二
進入你要作加強的那個 screen ,找到相應的程序名,例 : va01 如下屏幕的程序就是 SAPMV45A