SAP ABAP RFC接口通用日志工具:abap fm logger
很早之前就想写个能记录函数模块日志的通用工具,最早尝试时,没有想清楚插入代码的体积问题。在一些群友的提醒下,了解到可以用宏来处理这一问题。不过当时比较忙,就没有动笔。最近又想起这件事,花了2天完成了一个初步的实现。介绍给大家,希望能有参考价值。
本文链接:https://www.cnblogs.com/hhelibeb/p/13560754.html
简介
目标
本工具有几个目标:
- 把日志数据存储到一个统一日志表中,避免为每个接口创建日志表,从而减少重复工作量。
- 用一段通用代码实现日志存储,可以通过配置表来开关功能。
- 以JSON格式存储日志,并提供一定的索引查询功能。
- 允许根据日志的唯一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参数的记录。
另外还可以指定3个索引字段的显示名(CUST_NAME),它们会影响的ZAFL_VIEWER中的显示效果。
可以使用事务SM30维护配置。
待改进
目前发现有2个问题需要改进,
- 如果接口包含CURR类型字段,虽然可以正常记录日志,但重处理时会无法读取日志中的CURR类型字段值。
- 没有按字段值搜索日志的功能(类似WE10)。
希望近期可以改进。
SAP ABAP RFC接口通用日志工具:abap fm logger的更多相关文章
- Apache通用日志工具commons-logging和Log4j使用总结
转自:https://blog.csdn.net/lzl13391522110/article/details/53758536 Apache通用日志工具commons-logging和Log4j使用 ...
- ABAP RFC远程调用
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 动手使用ABAP Channel开发一些小工具,提升日常工作效率
今天的故事要从ABAP小游戏说起. 中国的ABAP从业者们手头或多或少都搜集了一些ABAP小游戏,比如下面这些. 消灭星星: 扫雷: 来自我的朋友刘梦,公众号"SAP干货铺"里的俄 ...
- uft调用rfc接口
RFC接口函数调用: 以下代码是封装好的,为了提供给UFT工具调用,使用c#写成dll. 类型项目分成两个: 1.baseConfigModel.cs //sap配置登录信息,属性实体类 using ...
- .NetCore中的日志(2)集成第三方日志工具
.NetCore中的日志(2)集成第三方日志工具 0x00 在.NetCore的Logging组件中集成NLog 上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logg ...
- 细说Java主流日志工具库
概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...
- Java主流日志工具库
在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息.在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子.我们先来逐一了解一下主流日志工具. 1.java.util.lo ...
- Java 标准日志工具 Log4j 的使用(附源代码)
源代码下载 Log4j 是事实上的 Java 标准日志工具.会不会用 Log4j 在一定程度上可以说是衡量一个开发人员是否是一位合格的 Java 程序员的标准.如果你是一名 Java 程序员,如果你还 ...
- Win10手记-为应用集成日志工具Logger
日志工具由来已久,是很受大家欢迎的debug工具.其中.NET平台上很出名的是log4net,但是由于Windows 10通用应用项目没有了System.Configuration引用,所以也就不能很 ...
随机推荐
- Python List sort()方法
描述 sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数.高佣联盟 www.cgewang.com 语法 sort()方法语法: list.sort(cmp=None, ...
- QDC day4
图论. 强连通图 与 弱连通图 . 最短路 .dij 不支持负权.显然 值得一提的是利用斐波那契堆m+nlogn . 一张 边权都是2的整数次幂 考虑 一下直接 结构体维护这个2的整次幂数组但比大小 ...
- MapReduce之GroupingComparator分组(辅助排序、二次排序)
指对Reduce阶段的数据根据某一个或几个字段进行分组. 案例 需求 有如下订单数据 现在需要找出每一个订单中最贵的商品,如图 需求分析 利用"订单id和成交金额"作为key,可以 ...
- 包管理Go module的使用
我用 Golang 的 Web 框架 Iris 写项目时,发现下载依赖老是失败原因是被墙了(可以参考上一篇 https://www.cnblogs.com/ser0632/p/11374790.htm ...
- win10 64位 汇编环境
masm6或者masm5 下载. dosbox 下载安装 为何要用这个呢,因为 机子是64位的,dosbox 模拟32位的用来执行生成的exe文件 masm 安装好后,有个bin文件:个人建议将其设置 ...
- 授人以渔:stm32资料查询技巧
摘要:本章以stm32f103作为案例向大家讲解arm公司和st公司的关系以及我们在对stm32开发时需要如何正确的查找手册. ARM公司和ST公司的关系 这里要从一块芯片的生产说起,比如我们要生成一 ...
- Java 通过Jna调用dll路径问题
调试阶段 C++ dll --> window/system32C# dll --> C:\Program Files\Java\jdk1.8.0_171\bin [jdk bin] 打包 ...
- 仅需1秒!搞定100万行数据:超强Python数据分析利器
前言 使用Python进行大数据分析变得越来越流行.这一切都要从NumPy开始,它也是今天我们在推文介绍工具背后支持的模块之一. 2 Vaex Vaex是 一种更快.更安全.总体上更方便的方法,可以使 ...
- Java集合最全解析,学集合,看这篇就够用了!!!
在看集合类之前, 我们要先明白一下概念: 1.数据结构 (1):线性表 [1]:顺序存储结构(也叫顺序表) 一个线性表是n个具有相同特性的数据元素的有限序列.数据元素是一个抽象的符号,其具体含义在不同 ...
- tableauRFM分析
1.数据源 2.创建相关字段 2.1 购买点会员生命期 2.2 会员最后购买时间 2.3 最后购买点生命期 3.近一个月老客户的生命期情况 排除了当天创建当天购买的情况,可以看到超市的大部分用户是两年 ...