天天看點

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

今天是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工作程式對資料庫表讀取操作的檢測