很早以前就想寫個能記錄函數模塊日誌的通用工具,最先嚐試時,沒有想清楚插入代碼的體積過大問題的解決方案。在一些羣友的提醒下,瞭解到能夠用宏來處理這一問題。不過當時比較忙,沒有動筆,後來也漸漸忘記。最近又想起這件事,花了2天完成了一個初步的實現。介紹給你們,但願能有參考價值。html
本文連接:http://www.javashuo.com/article/p-ucgegdre-nt.htmlgit
本工具備幾個目標:github
目前目標1, 2已經實現,3, 4部分實現,還在完善中。編程
基本原理是使用一些動態編程技術,在函數運行時獲取參數值,轉換爲JSON數據存儲到表中。數組
日誌使用惟一ID做爲主鍵。函數
重處理時,根據日誌記錄,動態生成ABAP變量,並從JSON中獲取值,賦值給變量,再動態地調用日誌中記錄的FM。工具
代碼量目前還很比較少,只有幾百行,能夠閱讀包含文件ZAFL_MACROS和類ZCL_AFL_UTILITIES以瞭解更多細節。spa
關於ABAP動態編程,若是有不懂的地方,能夠參考:這一系列文章:Dynamic Programming in ABAP日誌
項目名:abap fm loggercode
Github地址:https://github.com/hhelibeb/abap-fm-logger
請使用ABAPGIT安裝,若是你以爲有幫助的話,歡迎Star.
介紹abap fm logger的用法,包含代碼、配置、報表等。
日誌存儲在表ZAFL_LOG中,報表程序ZAFL_VIEWER能夠用於查詢/重處理日誌
點擊JSON字段能夠查看參數詳情。
選中日誌行,點擊工具欄的「Process Selected Item」,則程序會嘗試使用選中的日誌的參數記錄從新調用相應接口。
只須要2個複製粘貼就能完成代碼部分,很是簡單:
1, 添加包含文件ZAFL_MACROS到須要記錄日誌的FM的函數組中,
FUNCTION-POOL zzxxxx. INCLUDE zafl_macros.
2, 在函數中調用相應的宏,
FUNCTION z_fm. **初始化logger,須要在FM的開頭部分調用 /afl/log_init. **可選,最多指定3個用於搜索的字段(好比公司代碼、物料號等) /afl/set_custom_fields 'cust field1' 'cust field2' 'cust field3'. **可選,記錄狀態碼,如S/E等,最多2位 /afl/set_status 'S' 'message'. **保存日誌,必須在FM的結尾處 /afl/save. ENDFUNCTION.
這裏, /afl/log_init 和 /afl/save 是必選的,而 /afl/set_custom_fields 和 /afl/set_status 提供了一些靈活功能,能夠按需選擇是否調用。
表ZAFL_CONFIG用於配置abap fm logger的功能,選項包括,
另外還能夠指定3個索引字段的顯示名(CUST_NAME),它們會影響的ZAFL_VIEWER中的顯示效果。
能夠使用事務SM30維護配置。
目前發現有2個問題須要改進,
但願近期能夠改進。