Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Axapta 如何确定行是否已更改?_Axapta_Dynamics Ax 2012 - Fatal编程技术网

Axapta 如何确定行是否已更改?

Axapta 如何确定行是否已更改?,axapta,dynamics-ax-2012,Axapta,Dynamics Ax 2012,我正在为一个客户端构建一个数据仓库,其中一个数据源是Dynamics AX数据库。对于给定的AX表,我需要确定一行是否已插入、修改或删除,以便可以在DW中插入、更新或删除该行 关于检测已修改的行,我可以使用的大多数AX表中似乎有两列,ModifiedDataTime和RecVersion。我有两个与这些专栏相关的问题: 1) ModifiedDataTime列是否在每次更新行时更新?如果是,即使有人在AX应用程序之外(例如从SSMS之类的工具)直接更新表中的行,该值是否也会更新 2) 上述问题与

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

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

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

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


是否有其他我不知道的替代方法来执行我想执行的操作?

您想使用字段
RecId
RecVersion
,这些字段在AX 2012的所有业务数据表中都可用<代码>RecId为
RecVersion
在创建记录后为1,并且每次更改记录时都会更改为1以外的数字

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

关于您的问题,当有人直接修改AX业务数据库中的数据时,是否会更新其中一个字段:答案是否定的,这也是您绝对不应该这样做的原因之一。老实说,我见过一些客户在违背其实施合作伙伴明确建议的情况下崩溃。Dynamics AX提供多种选项来集成来自其他系统的数据,使用它们,而不要试图发明自己的系统

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


正如我在回答您的问题时提到的,AX附带了一个数据集市,并且在如何根据业务数据的变化更新数据集市方面也有一些逻辑。我不熟悉这些更新的详细信息,但可能有必要对其进行调查,以确定是否可以将其重新用于您的目的。

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

谢谢。您说过AX提供了几个选项来集成来自其他系统的数据。您指的是将数据从其他系统集成到AX中,还是将数据从AX移动到另一个系统中?如果是后者,你能详细说明一下这些是什么吗。