更新差异自定义实体字段时自动更新自定义实体字段

时间:2015-01-14 18:28:37

标签: dynamics-crm-2011 dynamics-crm

我有两个自定义实体ex:在CRM内部构建和业务。建筑物有多个单元/套件#,每个单元/套件#由企业占用。如果建筑单元/套房正在装修,则必须暂时关闭业务。

如何在构建单元/套件状态更改时自动更新业务打开/关闭?更新不需要立即发生。我需要搜索大约20000条记录来更新正确的Business实体。还有一些业务领域,如开始和结束日期,从建筑物检索,关闭持续时间更新为结束(减去)开始日期。

插件是唯一的方法,我如何使用插件实现它!它有多难,影响服务器,我是C#开发中级。请提供正确方向的任何链接。 env是2011年的on-prem

非常感谢!!!

1 个答案:

答案 0 :(得分:1)

可以使用插件构建简单的解决方案。同步插件可以立即更新Business实体的状态更改(在Update消息的PreOperation或PostOperation阶段),即使在同一个数据库事务中也是如此。

一般来说,使用插件,您可以构建最高效,无缝集成的业务逻辑。

但是,通常使用工作流程实际上可以实现相同的效果。构建工作流程的一些优点:

  1. 不需要熟练的软件开发人员来构建;
  2. 可以快速修改('配置')工作流程。
  3. 可以延迟执行工作流程(例如,直到满足条件或日期已过)。
  4. 工作流程的一些缺点是:

    1. 在CRM 2011中,您的代码始终在原始数据库事务之外异步运行;
    2. 在行动发生之前可能会有一段时间;用户没有得到即时反馈;
    3. 查询和选择相关数据仅限于n:1关系(从n侧到1侧,反之亦然);
    4. 执行工作流需要比插件更多的资源;
    5. 广泛使用工作流程很容易导致意大利面系统难以维护并且表现不佳。
    6. 在您的方案中,选择相应业务记录的要求似乎过于复杂,无法在工作流程中处理。在工作流程中,您基本上只能通过跟踪手头记录上的查找引用,从一个记录导航到另一个记录。这意味着当存在n:1关系以及从n侧导航到单侧时,您只能从一个记录到另一个记录。

      在插件中你没有这个限制;在那里,您可以编写QueryExpression或Linq查询来获取所需的记录。所以,在你的情况下,插件似乎是我的正确选择。