【问题标题】:Modeling inheritance in Dynamics CRMDynamics CRM 中的建模继承
【发布时间】:2016-06-01 22:47:02
【问题描述】:

我们正在为 MS Dynamics CRM 2015 中的自引用实体建模。 一个例子是建筑物和建筑物的一部分(建筑群 ==> 个别建筑 ==> 入口 ==> 楼层 ==> 公寓)。

有一些字段,例如成本代码或建筑物的所有者。 如果你有一栋有 300 套公寓的大楼,整栋大楼可能归一家公司所有,或者每个公寓归个人所有。

我们正在寻找的是对字段值的某种继承。 因此,对于“所有者”字段,用户应该能够勾选“所有者”是从其父记录继承的复选框。

我们有大约 20 或 30 个可以继承的字段。

我们确实希望从父级复制值,因为它使视图和报告的定义更加容易。

问题:以前有没有这样做过,是否有最佳实践或某处完成的插件?

如果我自己做,解决方案是这样的:

  • 为每个可继承字段创建一个布尔字段 xx_myfield_inherit
  • 在表单上始终将复选框和字段放在一起。
  • 创建一些 Javascript 魔法和插件:
    • 如果勾选了复选框,则将该字段置于只读模式并从父项复制值
    • 如果值发生更改,请检查是否存在设置了继承的子项(如果使用 onchange 触发器完成,这可能会以递归方式工作,开箱即用)
    • ...

有很多特殊情况需要捕获(不允许继承、未设置父项时、更改父项时更新继承、取消选择继承、删除父项时)。

我想这是完全可行的,但我想先获得一些建议,看看是否有更好的解决方案。

【问题讨论】:

    标签: dynamics-crm


    【解决方案1】:

    30 有很多字段可以创建单独的“继承”字段。在可用性方面,值得考虑对密切相关的领域进行分组。

    对相关记录进行级联更新实际上相当普遍,我经常实现这种功能,在大多数情况下,用于帐户、子帐户和联系人之间的(邮政)地址。

    您的解决方案需要实现以下要求:

    1. 创建新记录时,必须预先填写继承的字段。
    2. 修改父记录的继承字段时,必须将这些更改同步到其子记录。
    3. 当记录被重新设置父级时,必须使用其新父级的值更新继承的字段。 (除非不可能再做父母。)
    4. 删除记录的父项后,继承的字段必须保持原样或被清除。 (由您的客户决定所需的行为是什么。)
    5. 当用户能够使记录处于活动状态和非活动状态时,您还有一些额外的要求:
      • 当记录处于非活动状态时,其所有子记录也会被停用 (v.v.)。
      • 非活动记录不受级联更新的影响。
      • 重新激活记录时必须刷新继承的字段。

    为了实现这些要求,需要以下自定义组件:

    1. 为以下步骤注册的插件类:
      • PreValidate 同步创建:此组件从父记录复制字段。
      • PreValidate 同步更新:当记录被重新设置父级、删除父级关系或修改“继承”字段时,此组件会更新同步字段。
      • PostUpdate 异步更新:当一个或多个同步字段被修改时,此组件会更新子记录。
    2. Javascript 执行以下操作:
      • 在“继承”字段的 OnChange 时启用/禁用数据字段。
      • 当您想要提供最佳用户体验时,获取并预填充同步的字段数据。

    此解决方案中唯一棘手的部分是在异步插件步骤中进行级联更新,主要是因为更新是沿树级联的,而 CRM 最多只允许这种情况发生在 8 级深度(默认情况下)。

    另外请记住,在沙盒中运行的异步插件(这是 CRM Online 中的唯一选项)必须在 2 分钟内完成。在大多数情况下,这个限制应该不是问题,因为您的插件步骤将只负责同步对直接相关的子记录的更改。

    因此,可以在这里设计一个性能良好的声音解决方案。您只需要设计一些自定义组件。

    【讨论】:

    • 优秀的答案。 Javascript 应该很简单。不过,我们只是从插件开始。你能想象分享一些你的插件代码来让我们朝着正确的方向开始吗?我确信您的最大传播级别 = 8 的提示为我节省了未来的麻烦。虽然我希望我们不超过 8 个级别,但最好知道一种解决方法,以防万一。
    • 在 CRM Online 中,要解决这个限制并不容易。在 OnPremise 部署中,您可以使用 PowerShell 或 Dynamics CRM 部署服务修改 MaxDepth 设置。见technet.microsoft.com/en-us/library/dn531194.aspx#workflow
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2011-03-27
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多