3

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

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

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

成套工具

4

3 回答 3

5

在我看来,这类数据库事务问题是CRM目前最缺乏的。没有办法确保其他人不会胡乱使用您的数据,这在 CRM 中始终是最后一个赢家的世界。

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

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

更新 1

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

于 2012-07-17T20:58:31.750 回答
1

你有几个选择,这取决于你想做什么。首先,如果您可以将其中一些自动化流程转移到非工作时间,那么这是最好的选择。

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

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

于 2012-07-17T20:30:21.030 回答
0

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

于 2012-07-17T19:30:47.013 回答