如何确定行是否已更改?

时间:2018-12-11 15:13:46

标签: axapta dynamics-ax-2012

我正在为客户端建立数据仓库,其中数据源之一是Dynamics AX数据库。对于给定的AX表,我需要确定是否已插入,修改或删除行,以便可以在DW中插入,更新或删除行。

关于检测已被修改的行,我可以为此目的使用的大多数AX表中似乎有两列,ModifiedDateTime和RecVersion。我有两个与这些列有关的问题:

1)每次更新一行时,ModifiedDateTime列是否都会更新?如果是这样,即使有人直接在AX应用程序之外(例如从SSMS之类的工具中)更新表中的行,此值也会更新吗?

2)与上面针对RecVersion的问题相同。另外,该数字在整个数据库中是全局唯一的还是表唯一的?

还有我不知道的另一种选择吗?

2 个答案:

答案 0 :(得分:2)

您要使用字段RecIdRecVersion,它们在AX 2012的所有业务数据表中都可用。RecIda unique value for each record of a tableRecVersion在创建记录后为1,并且每次更改记录时都更改为除1以外的其他数字。

ModifiedDateTime不是一个好的选择,因为并非在所有表上都可用。

关于您是否有人直接在AX业务数据库中修改数据时是否更新了这些字段之一的问题:答案是否定的,这就是您绝对不应该做这种事情的原因之一。老实说,我看到一些客户因实施伙伴的明确建议而崩溃。 Dynamics AX提供了几种选择,可以集成来自其他系统的数据,使用它们,并且不要尝试发明自己的数据。

关于您的问题RecVersion是否是全局唯一的:否。您可以使用TableIdRecId的组合来唯一地标识AX业务数据库中的记录。

正如我在对问题How do I get the location for a row in dbo.CUSTTRANS?的回答中提到的那样,AX带有数据集市,并且对于如何根据业务数据的更改进行更新也具有一定的逻辑。我不熟悉这些更新的详细信息,但是值得对它们进行调查,看看是否可以出于自己的目的重复使用它们。

答案 1 :(得分:1)

AX 2012的某些部分在幕后使用SQL Server更改跟踪(例如AIF)。 更改跟踪记录也删除了记录,而ModifiedDateTime和RecVersion字段都不能为您提供记录。