在ABAP Dictionary 中如果一个Table 的 Technical Settings 中的 Log data changes 选项被选中, 那么这张表的数据修改情况将会被记录, 通过 t-code: SCU3 可以查看修改日志.
SAP会对系统中的很多对象的修改做记录, 记录数据放在CDHDR和CDPOS表中, 我们有两种方式可以获得这些数据:
1. FM: CHANGEDOCUMENT_READ_HEADERS and CHANGEDOCUMENT_READ_POSITIONS
2. Custom Selection. For example:
* Select update record about VBUK-CMGST from CDPOS table.
* CDPOS:Change document items
c_objectclas = 'VERKBELEG'.
SELECT objectid changenr tabname fname value_new value_old
FROM cdpos
INTO CORRESPONDING FIELDS OF TABLE it_cdpos_cr
WHERE objectclas = c_objectclas
AND objectid = it_data-vbeln
AND tabname IN ('VBUK')
AND fname IN ('CMGST')
AND chngind = 'U'.
SORT it_cdpos_cr.
*The release time is stored in CDHDR table ,focus on corresponding record.
DELETE ADJACENT DUPLICATES FROM it_cdpos_cr COMPARING ALL FIELDS.
DESCRIBE TABLE it_cdpos_cr LINES sy-tmaxl.
IF sy-tmaxl > 0.
SELECT changenr udate utime objectid FROM cdhdr
INTO CORRESPONDING FIELDS OF TABLE it_cdhdr_cr
FOR ALL ENTRIES IN it_cdpos_cr
WHERE objectclas = c_objectclas
AND objectid = it_cdpos_cr-objectid
AND changenr = it_cdpos_cr-changenr.
ENDIF.
另外一个以前用到的场景:
根据objectclass, ojbectid到CDHDR中找到某个时间对object的修改, 再到CDPOS中找到oject被修改的新旧值.
这里有两点不是很清楚了:
1. 什么样的对象被修改数据会被存到这两张表? (一些主数据, ...好像有个什么设定)
2. 表对应的object class怎么得到? 根据Table name 到 CDPOS中来找当然是种办法,
其实这两个问题我以前是研究过的, 可现在碰到了又想不起来了.