【问题标题】:Updating Custom Entity fields automatically when/with a diff Custom Entity fields are updated当/使用差异自定义实体字段更新时自动更新自定义实体字段
【发布时间】:2015-01-18 18:29:51
【问题描述】:

我有 2 个自定义实体,例如:本地 CRM 中的 Building 和 Business。大楼有多个单元/套房#,每个单元/套房# 由一个企业占用。如果建筑单元/套房正在装修,则必须暂时关闭业务。

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

插件是唯一的方法,我如何使用插件来实现它!它有多难,对服务器的影响,我是中级 C# 开发人员。请提供正确方向的任何链接。环境是 2011 年的本地部署

非常感谢!!!

【问题讨论】:

    标签: dynamics-crm-2011 dynamics-crm


    【解决方案1】:

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

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

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

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

    工作流程的一些缺点是:

    1. 在 CRM 2011 中,您的代码始终在原始数据库事务之外异步运行;
    2. 可能需要一段时间才能执行操作;用户没有立即得到反馈;
    3. 查询和选择相关数据仅限于 n:1 关系(从 n 端到 1 端,反之亦然);
    4. 工作流的执行需要比插件更多的资源;
    5. 大量使用工作流很容易导致意大利面条式系统难以维护且性能不佳。

    在您的场景中,选择合适的业务记录的要求似乎过于复杂,无法在工作流中处理。在工作流中,您基本上只能通过手头记录上的查找引用从一条记录导航到另一条记录。这意味着只有当存在 n:1 关系并且从 n 端导航到 1 端时,您才能从一条记录到另一条记录。

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

    【讨论】:

    • 简单评论一下 - 工作流现在实际上可以在 CRM 2013 和 2015 中同步运行。在这种情况下,我相信他们参与了交易。
    • 你说得对,也许我过于关注 CRM 2011,因为问题中的标签。
    • 嗨 Henk,Josh .. 感谢您的回复,我已经稍微更新了我的问题。你仍然认为插件是实现功能的首选吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2023-01-31
    • 1970-01-01
    • 2017-08-25
    • 2013-05-15
    • 1970-01-01
    相关资源
    最近更新 更多