很早之前就想写个能记录函数模块日志的通用工具,最早尝试时,没有想清楚插入代码的体积问题。在一些群友的提醒下,了解到可以用宏来处理这一问题。不过当时比较忙,就没有动笔。最近又想起这件事,花了2天完成了一个初步的实现。介绍给大家,希望能有参考价值。

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

简介

目标

本工具有几个目标:

  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参数的记录。

另外还可以指定3个索引字段的显示名(CUST_NAME),它们会影响的ZAFL_VIEWER中的显示效果。
可以使用事务SM30维护配置。

待改进

目前发现有2个问题需要改进,

  • 如果接口包含CURR类型字段,虽然可以正常记录日志,但重处理时会无法读取日志中的CURR类型字段值。
  • 没有按字段值搜索日志的功能(类似WE10)。

希望近期可以改进。

(注:严格来说它应该叫做函数模块接口通用日志工具,标题中的RFC是为了搜索关键字考虑的,因此这个工具的正式名称也叫做abap fm logger)
 
 
 
 
 
 

SAP ABAP RFC接口通用日志工具:abap fm logger的更多相关文章

  1. Apache通用日志工具commons-logging和Log4j使用总结

    转自:https://blog.csdn.net/lzl13391522110/article/details/53758536 Apache通用日志工具commons-logging和Log4j使用 ...

  2. ABAP RFC远程调用

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. 动手使用ABAP Channel开发一些小工具,提升日常工作效率

    今天的故事要从ABAP小游戏说起. 中国的ABAP从业者们手头或多或少都搜集了一些ABAP小游戏,比如下面这些. 消灭星星: 扫雷: 来自我的朋友刘梦,公众号"SAP干货铺"里的俄 ...

  4. uft调用rfc接口

    RFC接口函数调用: 以下代码是封装好的,为了提供给UFT工具调用,使用c#写成dll. 类型项目分成两个: 1.baseConfigModel.cs  //sap配置登录信息,属性实体类 using ...

  5. .NetCore中的日志(2)集成第三方日志工具

    .NetCore中的日志(2)集成第三方日志工具 0x00 在.NetCore的Logging组件中集成NLog 上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logg ...

  6. 细说Java主流日志工具库

    概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...

  7. Java主流日志工具库

    在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息.在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子.我们先来逐一了解一下主流日志工具. 1.java.util.lo ...

  8. Java 标准日志工具 Log4j 的使用(附源代码)

    源代码下载 Log4j 是事实上的 Java 标准日志工具.会不会用 Log4j 在一定程度上可以说是衡量一个开发人员是否是一位合格的 Java 程序员的标准.如果你是一名 Java 程序员,如果你还 ...

  9. Win10手记-为应用集成日志工具Logger

    日志工具由来已久,是很受大家欢迎的debug工具.其中.NET平台上很出名的是log4net,但是由于Windows 10通用应用项目没有了System.Configuration引用,所以也就不能很 ...

随机推荐

  1. Day04_乐优商城项目搭建

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 0.学习 ...

  2. PHP serialize() 函数

    serialize() 函数用于序列化对象或数组,并返回一个字符串.高佣联盟 www.cgewang.com serialize() 函数序列化对象后,可以很方便的将它传递给其他需要它的地方,且其类型 ...

  3. Java8的@sun.misc.Contended注解

    @sun.misc.Contended 介绍 @sun.misc.Contended 是 Java 8 新增的一个注解,对某字段加上该注解则表示该字段会单独占用一个缓存行(Cache Line). 这 ...

  4. SpringBoot之Quartz基础

    前言:由于我们本项目选用的Springboot来整合Quartz,官方给我们提供了启动器所以很简单.在以前的版本我们想要使用Quartz需要引入的依赖如下: <dependency> &l ...

  5. Redis好文章推荐

    文章来源:掘金   作者:敖丙 Redis-避免缓存穿透的利器之BloomFilter <我们一起进大厂>系列- Redis基础 <我们一起进大厂>系列-缓存雪崩.击穿.穿透 ...

  6. Maven执行Reimport命令报错:See logs for details

    Idea版本:2018.1.3 maven版本:3.6.2 Idea配置了本地下载的maven之后,不管是直接执行maven的Reimport命令,还是使用idea的Reimport按钮,都会报这个错 ...

  7. easyui 属性 事件 方法

    在easyui当中 属性和事件可以按照json定义的对象来使用. /*在easyui中 属性和事件的使用方法相同*/ var loginWinJson = { closed: false, closa ...

  8. Java自学-JDBC 数据库连接池

    数据库连接池 与线程池类似的,数据库也有一个数据库连接池. 不过他们的实现思路是不一样的. 本章节讲解了自定义数据库连接池类:ConnectionPool,虽然不是很完善和健壮,但是足以帮助大家理解C ...

  9. 【python接口自动化】- ConfigParser配置文件的使用

    前言:目前我们使用的绝大多数计算机程序,无论是办公软件,浏览器,甚至游戏.视频都是通过菜单界面系统配置的,它几乎成了我们使用机器的默认方式.而在python中,也有这样的一个配置模块可以把代码可配置化 ...

  10. ios 继承UITableViewController,更改tableview样式

    // 继承UITableViewController,更改tableview样式 - (instancetype)initWithStyle:(UITableViewStyle)style { ret ...