原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
**点击蓝字** 关注我们
一
前言
SE16N中创建,修改,删除的数据会写入表
• SE16N_CD_KEY 表显示:更改凭证- 抬头
• SE16N_CD_DATA 表显示: 更改凭证 - 数据
同时SAP提供了一个查看程序显示变化的记录
RKSE16N_CD_DISPLAY
二
标准更改凭证
看到这个程序的界面,你是不是已经晕了?
我晕了一小会, 然后分析了一下.
SE16N 记录日志时,不是按标准更改凭证(change document)的方式记录的.
标准更改凭证记录格式如下图所示. 记录的是变更的表/关键字/字段,旧值/新值.
这种记录的好处是可以非常直观的看出数据改变的内容.
三
SE16N日志方式
SE16N采用了写入变更前的数据的所有内容的方式.
(这种方式相对比较简单,有兴趣的话,你可以翻看一下标准代码
程序LSE16NF30 define makro_write_cd 中给出了数据转换的方式).
这种方式为了解决数据类型的问题,把所有的数据转换成XSTRING写入一个字段 SE16N_CD_DATA-VALUE. 写入逻辑简单通用.
但是读取逻辑就比较麻烦了. 并且不支持基于数据内容的查询. 只能按 表名/日期/用户名 查询 .
查询的结果也只能把当时记录的内容呈现出来.
标准程序的插入,修改,删除分屏呈现, 界面显得非常凌乱. 看惯了标准更改凭证的是无法容忍这种变更信息的呈现方式.
并且这个变更程序没有和SE16N界面整合. 导致很多人都不知道这个变更日志的存在.
四
改造后的效果
本文的目的就是改造SE16N让修改日志信息更人性化的呈现.
先看效果
_**01** _
**简单日志信息**
自定义表添加增强字段记录简单日志信息. 实现方式详见
> 日志内容填充部分内容
>
> 无峰,公众号:ABAP 技巧与实战 [ SAP小技巧之 改造SE16N(五)
> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247485340&idx=1&sn=76031e8ad8841af477b785d2dc6ab7c6&chksm=cf5ddaaaf82a53bc032358b180b079fc6fcea060be2d6374cd6583b6b9c0fb08d296571510d6#rd)
_**02** _
**界面添加按钮**
SE16N界面添加按钮,点击按钮跳转到日志显示
_**03** _
**日志信息呈现**
如果不选中行,显示表的所有变更日志. **按标准更改凭证的模式显示 关键字,字段,旧值,新值** (需要注意的是,新值是记录
的当前值,而不是当时修改后的值).
如果选中了行, 则只显示选中行的变更日志.
_**04** _
**单独执行日志程序**
显示日志调用了程序 ZSE16N_GET_CHANGE_LOG
程序支持两种日志显示模式
模式1:显示记录的所有内容(类似于标准程序,只是把内容整合到了一个ALV中,便于查看)
模式2 :只显示与当前记录比较的差异(SE16N调用时使用该模式)
五
实现方式
添加按钮 程序 LSE16NLCL
METHOD handle_toolbar.末尾隐式增强添加按钮的功能逻辑
程序 LSE16NLCL
METHOD handle_user_command. 末尾隐式增强六
关于源代码部分
具体的源代码,详见文末
• 一个自开发的类, 可以动态定义哈希内表.
• 一个程序ZSE16N_GET_CHANGE_LOG, 用于把SE16N的日志内容转换成标准更改凭证)
• 一个按钮逻辑:针对选中行,调用日志程序的逻辑
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
**公众号 : syjf1976_abap**
**ABAP开发技巧**
**微信号 : 392077**
公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群
源代码部分(付费文章的源代码无法复制, 如果需要,请联系微信392077 索取文本文件)