在Dynamics CRM中建模继承

Spa*_*awk 4 dynamics-crm

我们在MS Dynamics CRM 2015中建模自引用实体.一个例子是建筑物和建筑物的一部分(建筑群==>个别建筑物==>入口==>地板==>平面).

有一些领域,如costcode或建筑物的所有者.如果你有一个有300个单位的建筑物,整个建筑可能由一家公司拥有,或者每个公寓都由个人拥有.

我们要寻找的是对字段值的某种继承.因此,对于字段"所有者",用户应该能够勾选一个复选框,表明"所有者"是从其父记录继承的.

我们有大约20或30个字段可能是可继承的.

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

问题:之前是否已完成此操作,是否有最佳实践或已完成的插件?

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

  • 对于每个可继承的字段,创建一个布尔字段xx_myfield_inherit
  • 将复选框和字段始终放在表单上.
  • 创建一些Javascript魔术和插件:
    • 如果勾选了复选框,则将该字段置于只读模式并从父级复制值
    • 如果更改了值,请检查是否存在具有继承集的子项(如果使用onchange触发器完成,则可能会递归地执行,开箱即用)
    • ...

有很多特殊情况需要捕获(不允许继承,没有设置父级时,更改父级时更新继承,取消选择继承,删除父级时).

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

Hen*_*jen 5

30是很多字段创建单独的"继承" - 字段.关于可用性,值得考虑对密切相关的领域进行分组.

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

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

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

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

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

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

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

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

  • 在CRM Online中,解决此限制并不容易.在OnPremise部署中,您可以使用PowerShell或Dynamics CRM部署服务修改MaxDepth设置.请参阅https://technet.microsoft.com/en-us/library/dn531194.aspx#workflow. (2认同)