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


很早之前就想寫個能記錄函數模塊日志的通用工具,最早嘗試時,沒有想清楚插入代碼的體積過大問題的解決方案。在一些群友的提醒下,了解到可以用特殊辦法來處理這一問題。不過當時比較忙,沒有動筆,后來也漸漸忘記。最近又想起這件事,花了2天完成了一個初步的實現。介紹給大家,希望能有參考價值。

 

本文鏈接:https://www.cnblogs.com/hhelibeb/p/13560754.html

原創內容,轉載請注明

2020.10.20 前些天發現了一些bug,之前下載過的話請更新到最新版

簡介

目標

本工具有幾個目標:

  1. 把日志數據存儲到一個統一日志表中,避免為每個接口創建日志表,從而減少重復工作量。
  2. 用一段通用代碼實現日志存儲,可以通過配置表來開關功能。
  3. 以JSON格式存儲日志,並提供一定的索引查詢功能。
  4. 允許根據日志的唯一ID來重處理數據(類似事務代碼WE19)。

目前目標1, 2已經實現,3, 4部分實現,還在完善中。

原理

基本原理是使用一些動態編程技術,在函數運行時獲取參數值,轉換為JSON數據存儲到表中。

日志使用唯一ID作為主鍵。

重處理時,根據日志記錄,動態生成ABAP變量,並從JSON中獲取值,賦值給變量,再動態地調用日志中記錄的FM。

代碼量目前還很比較少,只有幾百行,可以閱讀包含文件ZAFL_MACROS和類ZCL_AFL_UTILITIES以了解更多細節。

關於ABAP動態編程,如果有不懂的地方,可以參考:這一系列文章:Dynamic Programming in ABAP

項目地址

項目名:abap fm logger

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參數的記錄。
  • TABLE_IN: 如勾選,啟用TABLES參數的記錄(在函數開始時)。
  • TABLE_OUT: 如勾選,啟用TABLES參數的記錄(在函數結束時)。


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

待改進

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

  • 如果接口包含CURR類型字段,雖然可以正常記錄日志,但重處理時會無法讀取日志中的CURR類型字段值。2020.10.21已經在最近的更新中解決了這個問題。
  • 沒有按字段值搜索日志的功能(類似事務代碼WE10)。
  • 不支持tables參數。  2020.10.02 已經增加tables參數支持。

希望近期可以改進。

 

(注:嚴格來說它應該叫做函數模塊接口通用日志工具,標題中的RFC是為了搜索關鍵字考慮的,因此這個工具的正式名稱也叫做abap fm logger)
 

兼容性

評論區有小伙伴指出目前ZAFL_VIEWER程序對/UI2/CL_JSON有版本要求。如果你運行程序時發現類似問題,可以嘗試安裝JSON2ABAPType,用里面的ZUI2_JSON代替系統標准類,作為ZAFL_JSON的父類。或者可以自行尋找較高版本的/UI2/CL_JSON安裝。

 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM