SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測

i042416發表於2020-05-02

今天是2020年五一國際勞動節,Jerry祝大家勞動節快樂。

雖然五一國際勞動節來源於一百多年前國外無產階級的一次大罷工,但由於國情原因,國內很多行業的從業人員,好像天生就是勞碌命。比如程式設計師行業。


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


2014年五一勞動節,我在和一個不是總能重現的SAP CRM incident做鬥爭。詳情參考Jerry之前的文章 記一次SAP開發工程師給微軟Azure報incident的體驗.

當時處理完這個複雜的問題後,我覆盤總結了經驗教訓,釋出在SAP社群上的部落格:

My Tips about how to handle complex and tricky issues


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


2016年的五一節前一天,4月30日,我寫了一篇通過除錯方式解決SAP UI5各種問題的合集:

My UI5 debugging tips and experience collection – how to resolve UI5 issues through debugging by yourself


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


2017年的五一節我在德國“農村”,就著程式碼和麵包度過的:

Jerry 2017年的五一小長假:8種經典排序演算法的ABAP實現.


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測 SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測 SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


2018年的五一節前後,我在搗鼓區塊鏈:

300行ABAP程式碼實現一個最簡單的區塊鏈原型


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


2019年的五一節前後,我利用空閒時間,把一位同事在這公眾號上寫的文章做了簡單的修改然後發了出來: 一個SAP顧問的回憶:我過去很胖!


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


不過有付出就有收穫,而且周董的作品《四面楚歌》裡也唱到,“我只知道好像認真的男人最美麗”。


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測 SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


所以,今年的五一勞動節,讓我們繼續認真勞動,繼續美麗下去吧。

本文標題的SM50事務碼,在SAP系統裡描述資訊是“Work Processes of AS Instance”,即應用伺服器例項上的工作程式監控器。


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


在Jerry的文章  一個13年ABAP老兵的建議:瞭解這些基礎知識,對ABAP開發有百利而無一害 曾經介紹過工作程式(Work Process)的概念。在基於ABAP技術棧的SAP產品裡,客戶無論是從瀏覽器,SAPGUI,或者API的方式向SAP系統發起請求,最後的業務處理都是通過這些勤勤懇懇的工作程式完成的。

上述文章還介紹了SM50裡能夠檢視到的工作程式的不同型別,這裡不再重複。


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


本文要介紹的,是使用SM50檢測出工作程式長時間讀取一張資料庫表這個行為的小技巧。SM50介面有一列名為"Current Action Info",如果啟動SM50時,當前工作程式正在持續讀取一張資料庫表,則該列會顯示出資料庫表的名稱。


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


比如上圖顯示了編號為9743的工作程式,當前狀態為Running,正在client 000以系統使用者SAPSYS的身份,執行ABAP系統程式SAPMSSY2, 讀取資料庫表TBTCO.


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


我曾經用這個小技巧,完成了實際工作中的一個任務。

在我還在做SAP CRM標準開發時,我需要找出監聽了CL_BSP_WD_COLLECTION_WRAPPER這個類丟擲的NEW_FOCUS事件的所有ABAP類。


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


於是我使用ABAP workbench裡的Where-Used List功能,等待了5分鐘過後仍然出結果。我又以後臺作業的方式執行了Where-Used List操作,或許是待檢索的ABAP類的總數太過龐大的緣故,十分鐘過去了仍無結果。

於是我換了一種方式,開啟SE80的Repository Information System,根據如下條件搜尋:


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


然而這個過濾條件只能顯示哪些類釋出,而非監聽了NEW_FOCUS事件。


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


於是我開啟SM50,一眼就看到了當前程式正陷入讀取VSEOCOMPDF的泥潭之中。


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


這是一個資料庫檢視:


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


ABAP類和其釋出事件的關聯關係維護在了資料庫表SEOCOMPODF中。我在SE16裡按照如下過濾條件進行檢索:


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


不到一秒鐘就得到了我想要的列表:


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


這個例子如果採用我之前文章  SAP錯誤訊息除錯之七種武器:讓所有的錯誤訊息都能被定位 裡提到的工具之一,即用ST05跟蹤Where-Used List執行時訪問到了哪些表,結果一定會出來長長的一串。而使用SM50的Current Action Info,能避開所有干擾資訊,迅速準確找出儲存ABAP類和其監聽事件的關聯關係的儲存表。

ABAP開發人員手頭上可用的工具很多,如何在不同情形下靈活選擇最合適的工具去解決問題,是我們需要不斷去練習和提高的。

感謝閱讀,祝大家五一勞動節快樂。


SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

SAP ABAP SM50的另類用途 - ABAP工作程式對資料庫表讀取操作的檢測


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2689684/,如需轉載,請註明出處,否則將追究法律責任。

相關文章