Implicit enhancement的簡單小應用,供MB51直接顯示ALV格式的需求使用。應該寫得還算詳細了,大家輕拍~~
一,前因
標準報表MB51只是增加了ALV function供user選擇是否需要顯示更明細,如果在background job的情況,spool只能顯示standard list。
有User提出需求,希望在后臺執行時,能夠直接跑出ALV格式的明細記錄。
Standard format
ALV format
二,需求
后臺執行時能夠直接跑出如同點擊后,同樣格式的ALV format report。
三,方案
通過追查MB51的source program RM07DOCS,可以發現MB51在點擊會觸發user-command‘DETAIL’,同時調用subroutine‘detail_list’。(line 2600)
該subroutine沒有任何參數,也就是說,所有的變量都是global或者local的,report display的資料來源也全部存在全局變量list[]里。
這樣就給了我們機會能夠在user跑完MB51進行list output時做modification。
在enhancement framework出來之前,針對這種狀況,我們只能期待SAP有提供享用的user-exit,或者將list[] export到parameter ID中
再終結的方法就是參考MB51全部重新寫一個ZBM51的程式出來,幸好這支report不是很復雜,不然~
然而,有了enhancement framework之后,提供可以在任何CLASS/FUNCTION/INCLUDE的begin line & end line加上自己需要的處理代碼的機會。
所以,針對此次修改的目的,找到MB51程式中默認輸出的subroutine,在end-of-selection event之后的subroutineoutput_list(line 1200)中進行修改。
修改步驟如下:
1,進入enhancement修改狀態
2,顯示implicit enhancement
點擊之后程式中會多一些這樣的橫線,這就是我們可以增加enhancement spot的地方啦~~~~
3,創建enhancement spot
Step 1.
方法1,直接右擊上圖中“引號行”,按下圖方式選擇menu
方法2,置鼠標焦點于“引號行”,從menu進行創建
Step 2.選擇enhancement mode(差別在于一個只定義,一個需要)
Step 3.創建新的enhancement implementation
Step 4. 創建composite enhancement implementation,
新建一個composite enhancement implementation,他可以用來收集一般的enhancement implementation,后續檢查除錯會比較方便。
(如無特殊需求,請不要在創建時勾選上個畫面的復選框,use this enhancement implementation without query in future,不然建好了想重來,就看不到了)
Step 5.創建enhancement implementation
4,對implementation進行coding
Step 1.
Step 2.已經可以在如下欄位寫入自己想要的代碼
代碼如下,我們只需要在background時,才會直接調用detail list,這樣spool中就會同時存在ALV/STANDARD的兩種format,看user需要啦~~
Step 3.保存&激活
5,大功告成,測試看看。
四,結果
前臺跑:
后臺跑:會比正常的多一個All spool lists
點擊all spool lists會出現兩個spool no,因為此處我既保留了原有的format,又有新的ALV format,號碼大一點的就是ALV格式的啦。