[SAP-SD]Sales Order 中的User Exit开发
在標準SAP業務應用中常會修改標準程序和增加一些自己的功能代碼來滿足特定化的需求,SAP提供了一些出口對特定的程序、屏幕、MENU以及Docuement進行擴展與修改,他們并不包含任何功能,并被分離存在特定的package里所以他既不會影響標準SAP源代碼也不會妨礙升級。除了通過后臺配置客戶化,我們常用主要有三種用戶出口來進行Enhancement和Modification:???
??????1,User Exit,最早的出口嵌寫在標準程序里,修改起來也最為復雜。如Order處理上使用的SAPMV45A中就包含大量ZZ或YY結尾的user exit程序MV45AFZZ/MV45AIZZ。?
??????2,Customer Exit,主要有三種類型Menu Exit/Screen Exit/FM Exit,首先通過CMOD來創建一個Project然后指定所需要的Enhancement,然后指定Component并激活。最后則需要加些所需代碼在自動創建一個Z程序里。
??????3, BADI,SE18/SE19,正如引入了OO的技術,在定義與實現在與Customer Exit兩層是一樣的,能客戶化用戶想用的標準解決方案的邏輯,對于開發者主要是通過一些方法來找到合適的BADI。
?
對于Order Business Process的MV45AFZZ中User Exit開發主要常用在下面幾個Form中:
userexit_save_document
userexit_save_document_prepare
userexit_field_modification
userexit_move_field_to_vbap
當然還包括ZZ程序里的很多類似的Form,通過Google搜可以詳細知道他們分別有不同的用途。
?
如常用T-code SHD0來標準的屏幕Field創建一個Variant,然后用VOV8來為不同的doc type指定不同的Variant,這樣可以對屏幕Field進行控制:預設置值,必須/可選值,顯示/隱藏值等等,這樣非常容易設置sales order screen layout。對于更為細致的設置可以選用userexit_field_modification,例如通過權限來控制那些字段是可見或非可見的
if sy-tcode ='XXXX' and screen-name = <your screen field>.
????AUTHORITY-CHECK OBJECT 'XXX' ID 'XXXX' FIELD <screen name>.
????if sy-subrc = 0.
???????screen-input = 0.?????" Disable it
???????screen-invisible = 1. " Hide it
???????modify screen.
????endif.
endif.
?
User Exit的選用
User Exit的選用應該是非常謹慎的,如果有合適的其他出口可代替最好不好,特別是order包括inquiry/quotation/contract大量代碼公用,以及SAP最為初始的源代碼非常不易于Debug甚至后臺運行,選用上還是根據具體的業務找合適的位置:是初始化的修改,是SAVE前的校驗,是SAVE時的值的更新與增刪,無外乎是對VBAP,VBAK,VBKD,VBEP,VBSN,VBUP,VEDA等等各個表的操作。
?
值的選取
值的選取不像Customer Exit和BADI,import和export的數據非常清楚,在order user exit則非常含糊,如VBAK *VBAP XVBAP YVBAK FXVEDA FYVBPF等等帶* X Y FX FY的表都具有特定的意義:
X: 一般表示更新的值,
Y: 一般表示不完整的值,
FX,FY:中間變量。
另外,在條件判斷上可能并沒有提供相應的值,可以通過abap memory來獲取;另外系統也提供了一些類似sd_vbxx_select來獲取當前最新的值。
?
?
數據庫問題
事實上在取值上直接通過select VBXX來獲取,一些字段可能已經被更新甚至是刪除以至獲取的數據是過時的,這樣會導致數據誤操作,最終還得多從X,Y表上去檢測。
同樣,盡量減少Open SQL的操作(insert/delete/modify/upate),運用自身的business process來完成。
?
代碼作用域
上面提到大量代碼公共,在什么情況下該使用呢?適當的邏輯判斷是非常有必要的,例如像我們常用的的order type(vbak-auart )外還有一些不可忽視的條件:
sy-tcode???(查看SYST)
sy-ucomm
t180-trtyp
?
測試與監控
對于user exit代碼的測試,采用我們一般的測試辦法問題并不大,但對memory里的數據操作,如何去檢測似乎并不是一件簡單的事,特別是對一些“很莫名”的問題:
(SAPLV45W)XVEDA[],類似的其他表可以查看更新后的值
ST05,通過這個t-code可以對sql進行trace,查看值是否被成功寫入DB
SM13,查看update Request是否成功執行
SM21,查看system log,是否有些process被中止
以及其他的一些sm35 sm50 st01 st22 類似的SM/ST的t-code。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的[SAP-SD]Sales Order 中的User Exit开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 采购订单相关Table
- 下一篇: MD04读取的一些计算表