SAP ABAP RFC接口通用日誌工具:abap fm logger

很早以前就想寫個能記錄函數模塊日誌的通用工具,最先嚐試時,沒有想清楚插入代碼的體積過大問題的解決方案。在一些羣友的提醒下,瞭解到能夠用宏來處理這一問題。不過當時比較忙,沒有動筆,後來也漸漸忘記。最近又想起這件事,花了2天完成了一個初步的實現。介紹給你們,但願能有參考價值。html

 

本文連接:http://www.javashuo.com/article/p-ucgegdre-nt.htmlgit

簡介

目標

本工具備幾個目標:github

  1. 把日誌數據存儲到一個統一日誌表中,避免爲每一個接口建立日誌表,從而減小重複工做量。
  2. 用一段通用代碼實現日誌存儲,能夠經過配置表來開關功能。
  3. 以JSON格式存儲日誌,並提供必定的索引查詢功能。
  4. 容許根據日誌的惟一ID來重處理數據(相似WE19)。

目前目標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的功能,選項包括,

  • FNAME: 函數模塊名。
  • ENABLED: 如勾選,啓用日誌記錄功能。
  • EXPORT: 如勾選,啓用Export參數的記錄。
  • IMPORT: 如勾選,啓用IMPORT參數的記錄。


另外還能夠指定3個索引字段的顯示名(CUST_NAME),它們會影響的ZAFL_VIEWER中的顯示效果。
能夠使用事務SM30維護配置。

待改進

目前發現有2個問題須要改進,

  • 若是接口包含CURR類型字段,雖然能夠正常記錄日誌,但重處理時會沒法讀取日誌中的CURR類型字段值。
  • 沒有按字段值搜索日誌的功能(相似WE10)。

但願近期能夠改進。

 

(注:嚴格來講它應該叫作函數模塊接口通用日誌工具,標題中的RFC是爲了搜索關鍵字考慮的,所以這個工具的正式名稱也叫作abap fm logger)
相關文章
相關標籤/搜索