FavoriteLoading
0

如何为自定义表创建变更文档(change document)记录表修改历史

[隐藏]

1, 变更文档简介

一般来说,SAP标准程序会将凭证,业务数据的创建,删除和修改的历史都会被保存到表cdpos和cdhdr中,详细可以参见文章

查看更改历史(cdpos和cdhdr)报表-RSSCD1TS

下面通过一个例子介绍一下如何记录自定义表的修改历史。

2,  SCDO创建表更文档对象

首先创建一个自定义表ZZZ_SALESSTAT,如下,

注意:CDPOS和CDHDR是否更新和技术设置中的log data change无关,log data change作用请参见

记录SAP表中数据的修改历史(SCU3)

通过TCode SCDO为表ZZZ_SALESSTAT创建变更文档对象(change document object),输入object名字zztest然后点击创建按钮,

勾上checkbox,输入text,然后点击红宝马按钮生成change document object,

点击Generate 按钮生成相关对象,

在下一屏幕中可以看到自动生成的include程序,update的函数ZZTEST_WRITE_DOCUMENT,这个函数就是将来在程序里调用更新CDHDR和CDPOS表的FM,还有一个结构YZZZ_SALESSTAT,

自动生成的更新函数ZZTEST_WRITE_DOCUMENT的输入参数中,有部分会影响CDHDR表,剩余的UPD_ICDTXT_ZZTEST和UPD_ZZZ_SALESSTAT是控制CDPOS的,这个可以通过associated type 看出来。

3, 例子程序

创建一个例子程序,用来测试表数据插入,删除,修改时调用update的函数ZZTEST_WRITE_DOCUMENT更新CDHDR和CDPOS表。

程序选择画面,有一个字段,用来表示操作类型,

代码:

4, 测试

数据插入,

查看CDHDR和CDPOS表,发现新增加的数据插入修改记录

在CDPOS中能看到两条插入记录,

数据删除,

查看CDHDR和CDPOS表,发现新增加的数据删除修改记录

数据修改,例子程序中抽取了一条数据,然后将数量字段kwmeng加1,并且修改了单位字段vrkme,

然后查看CDHDR和CDPOS表,发现新增加的数据修改记录,

有一点很奇怪,修改了两个字段CDPOS中只记录了一个字段vrkme的修改历史,没有记录kwmeng字段的。

具体原因请移步,[问题解决]CDPOS表中缺失字段修改历史

以上。