锁定上下文返回的记录?或者也许改变我的做法

时间:2012-07-17 19:19:46

标签: dynamics-crm dynamics-crm-2011

我不确定是否需要一种方法来锁定上下文返回的记录,或者只需要一种新的方法。

这是故事。我们目前有少量应用程序与我们的CRM集成。其中一些打开XrmServiceContext并返回几千条记录来执行更新。这些脚本在此过程中调用了SaveChanges,但是在上下文返回后几分钟内仍然会有一些帐户。如果用户在此期间更新记录,则脚本将覆盖其更改。

有没有办法锁定记录,直到上下文保存更新或者我应该采取更好的方法?

3 个答案:

答案 0 :(得分:5)

在我看来,这种类型的数据库事务问题是CRM目前最缺乏的问题。没有办法确保其他人不会对您的数据产生影响,它始终是CRM中最后一个赢家的世界。

话虽如此,我的建议是只更新你关心的属性。如果您要返回实体的所有列,则在更新该实体时,您可能会更新实体的所有属性,即使您只更新了其中一个。

如果您正在处理系统,那么您无法容忍最后一次胜利的心态,那么您最好不要使用CRM。

更新1

CRM 2015 SP1及更高版本支持乐观更新。这允许使用版本号来确保自您检索以来没有人更新过记录。

答案 1 :(得分:1)

这里有几个选项,它取决于你想做什么。首先,如果您可以将其中一些自动化流程移至关闭时间,那么这是最佳选择。

另一种选择是逐个检索每条记录而不是1000+。

如果您只更新检索到的记录的百分比,那么最好在保存之前检查是否发生了更新(比较修改日期)。如果修改日期发生了变化,那么您需要进行一次检索然后保存。

答案 2 :(得分:0)

首先想一想,我会创建一个指示待处理操作的字段或状态,然后在OnLoad事件形式中使用JScript来警告/锁定表单。处理完成后,可以清除标记。