0

我想捕获所有可能的 SAP 表的更改。

我发现表格捕获了更改文档CDHDRCDPOS但尚不清楚它对哪些表格执行此操作。

我有多个问题要问:

  1. 获取所有表的列表,这些表CDHDRCDPOS表捕获更改文档。
  2. 由于CDPOS表仅包含更改的字段,我需要将其与表的主键映射。如何将更改的记录与表的主键映射?
4

2 回答 2

3

为了纯粹回答您的问题,我当然可以告诉您查看 t 代码SCDO以了解您需要什么,但我会选择挑战您的推理方法。因此,您需要捕获所有可能的 SAP 表的更改。出于什么目的?CDHDR和跟踪了数千个 SAP 表CDPOS,其中的大多数表不会为您带来直接的业务价值。每当表格列具有类似BELNR_Dand的数据元素GJAHR时,它都可能出现在 中CDHDR,因为此类元素被标记为“更改文档”标志(t-code SE11):在此处输入图像描述

而SAP对flag的解释是:

更改文档的标志指定当涉及更改文档对象时,是否记录对参考此数据元素定义的数据库表中的字段的更改。

因此,在跟踪数千个表的情况下,纯粹从技术方面解决问题并不是一个好主意,我们甚至还没有开始研究性能CDHDR问题CDPOS

如果您的需求是数据仓库项目的一部分,那么无需处理CDPOSand CDHDR,您可以通过透明表或标准提取器分析增量插入、删除和更新。如果您可以使用 DB 触发器,那么 SL​​T 也可以作为几乎实时获取您感兴趣的表上更改记录的选项(默认设置为 5 秒延迟)。

总而言之,要获得所需的内容,您可以导航到 SAP 菜单 - 工具 - ABAP 工作台 - 其他工具 - 更改文档,或者只是 t-code SCDO。但是,我上面对业务需求的评论是我真正想要表达的。

于 2019-08-28T17:43:56.023 回答
1

为什么不运行SELECT DISTINCT tabname FROM cdpos以获取所有表的实际列表?我想这应该足够了,因为您的 SAP 系统已经运行了一段时间。如果您自己做不到,请一劳永逸地请人。

在表中CDPOS,您可以从列中获得更改的对象 ID TABKEY。如果主键由多列组成,TABKEY则为字符值的串联,并根据每列大小进行对齐。我不确定,但我猜主键列(由 CDPOS 的 TABNAME 引用的表)总是具有字符类型。

可以使用以下 SQL 查询从 ABAP 字典中提取一个表的主键列:(SELECT fieldname, leng FROM dd03l WHERE tabname = 'one_table' AND fieldname LIKE '.%' AND keyflag = 'X' ORDER BY position以点开头的列名用于内部内容)。

于 2019-08-29T19:38:51.243 回答