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

摘要:
很久以前,我想编写一个可以记录功能模块日志的通用工具,允许根据日志的唯一ID(类似于事务代码WE19)重新处理数据。然后动态调用记录在日志中的FM。报告日志存储在表ZAFL_ LOG中,报告程序ZAFL_ VIEWER可用于查询/重新处理日志。单击JSON字段以查看参数详细信息。然后程序将尝试使用所选的日志参数记录再次调用相应的接口,日志存储只需要2个副本和粘贴即可完成代码部分。

很早之前就想写个能记录函数模块日志的通用工具,最早尝试时,没有想清楚插入代码的体积过大问题的解决方案。在一些群友的提醒下,了解到可以用宏来处理这一问题。不过当时比较忙,没有动笔,后来也渐渐忘记。最近又想起这件事,花了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可以用于查询/重处理日志

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

点击JSON字段可以查看参数详情。

选中日志行,点击工具栏的“Process Selected Item”,则程序会尝试使用选中的日志的参数记录重新调用相应接口。

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

日志存储

只需要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)
 
 
 
 
 
 

免责声明:文章转载自《SAP ABAP RFC接口通用日志工具:abap fm logger》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(诊断)解决GitHub使用双因子身份认证“Two-Factor Athentication”后无法git push 代码的“fatal: Authentication failed for ...”错误LocalDate,LocalDateTime计算两个时间的相差时间下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

从核函数到SVM原理--sklearn-SVM实现

SVM核函数及sklearn实现SVM 在SVM中,其中最重要的也是最核心的就是核函数的选取和参数选择,当然这个需要大量的经验来支撑。今天我们就是抛砖引玉形象的讲解一下什么是核函数,及在SVM中在哪用到。 我们知道,SVM相对感知机而言,它可以解决线性不可分的问题,那么它是怎么解决的呢?它的解决思想很简单,就是对原始数据的维度变换,一般是扩维变换,使得原样...

Cypress web自动化23-cypress run 命令行参数详解

前言 非 GUI 模式下命令行运行 cypress,需知道有哪些参数可以使用。 查看命令行参数 输入 -h 查看命令行参数 cypress run -h Runs Cypress tests from the CLI without the GUI Options: -b, --browser <browser-name-or-path>...

Windows服务器实现自动化部署-Jenkins

在引入自动化部署工具的时候,对比了jenkins和gitlab CI,jenkins有非常丰富的插件,配置起来方便。gitlab CI更倾向于脚本配置,当然jenkins也可以使用pipeline实现全脚本化配置。我们这里主要讲述jenkins的自动化部署。基本组合是jenkins+git+msbuild,实现从代码仓库拉取、编译、打包、部署、自动化测试。...

什么是TDD(一)

引子 回顾 虽然我很早以前就听说单元测试,也曾经多次在项目中引入单元测试框架和单元测试的实践为代码质量的提升带来了一丝助力。 但这种方式更多的是从软件调试的角度出发,即将单元测试作为一种测试方法可用性的入口,而非从TDD、极限编程、或从"Fail Fast,Fix Fast”这种获得快速反馈的方式来使用单元测试,使得实际过程中单元测试的效果并不明显。 直到去...

Oracle 分析函数(转载)

  实际应用我们在做项目中常遇到类似这样的统计需求 , 列出一些数据列表,最后来一个合计的功能,类似如下:              姓名 工资 SMITH 800 ALLEN 1600 WARD 1250 JONES 2975 MARTIN 1250 BLAKE 2850 CLARK 2450 SCOTT 3000...

Python读取大文件的"坑“与内存占用检测

Python高级教程- Python进阶|Scrapy教程|Python高级|Python深入 (pythontab.com) python读写文件的api都很简单,一不留神就容易踩”坑“。笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码。 1.read()与readlines()随手搜索pyt...