RetrieveMultipleRequest.MinActiveRowVersion它是什么以及何时它不是-1

时间:2014-04-15 19:16:55

标签: dynamics-crm

我一直在研究将增量变化与动力学crm同步的方法。

我偶然发现了RetrieveMultipleRequest的MinActiveRowVersion属性

        var orgService = serviceProvider.GetOrganisationService();
        using (orgService as IDisposable)
        {

            var accounts = orgService.RetrieveMultiple(new QueryExpression("account") { ColumnSet = new ColumnSet("accountid") });
            Console.WriteLine("min active is: " + accounts.MinActiveRowVersion);

        }

此属性始终返回" -1"在我的测试过程中,即使我试图模拟在后台进行的交易,但这很棘手。

我从SQL角度理解MinActiveRowVersion来自: -

[http://technet.microsoft.com/en-us/library/bb839514.aspx][1]

所以我的问题是,是否有人能够确切地说明这个MinActiveRowVersion属性是什么,因为我在SDK文档中找不到任何有用的东西!

2 个答案:

答案 0 :(得分:1)

据我所知和经验,它永远不会被使用,并且总是等于-1。在封面下,它被硬编码为long并在构建string对象时转换为EntityCollection - 因此它始终为-1

SDK defines it as "最低活动行版本值" ,这意味着它与SQL行版本相关,但CRM不使用此字段。它在CRM 2011和CRM 2013 SDK中的定义相同。

在CRM 4中,我们有BusinessEntityCollection,这是EntityCollection的前身。它有一个名为string的未使用的Version属性。

我的猜测,当CRM 2011被设计时,它被添加了一些潜在的功能 - 它们没有生存 - 并且在它进入RTM之前从未被删除过。一旦发布,产品团队就不想更改类定义并破坏现有代码,因此他们只是将其留在那里以便返回-1

答案 1 :(得分:0)

如果获取查询包含属性min-active-row-version = 1,则在获取响应中返回

MinActiveRowVersion。 (在指定了页面和不同属性的同一标记中。)

我们多年来一直依靠这种行为。 (是的,我们将其用于更改同步。Rowversion似乎是唯一可靠的工具。请注意,并非所有Dynamics实体都具有Rowversion列。例如,重复规则实体不使用它。对于此类实体,我们使用Modifyon列。)

以下是$ MS文档中的一些引文:

  • @@ DBTS =当前数据库的最后使用的时间戳值。
  • MIN_ACTIVE_ROWVERSION =最低活动行版本值 当前数据库; @@ DBTS +1,如果其中没有活动值 数据库。
  • 如果在具有以下内容的事务中使用rowversion值,则该值是活动的: 尚未落实。