Dynamics crm 动态CRM中的模型继承

Dynamics crm 动态CRM中的模型继承,dynamics-crm,Dynamics Crm,我们正在MS Dynamics CRM 2015中为自参考实体建模。 一个例子是建筑物和部分建筑物(建筑群==>单个建筑物==>入口==>楼层==>平面) 有一些字段,如成本代码或建筑物的所有者。 如果你有一栋拥有300套公寓的建筑,那么整栋建筑可能属于一家公司,或者每个公寓都属于个人 我们正在寻找的是对字段值的某种继承。 因此,对于字段“Owner”,用户应该能够勾选一个复选框,表明“Owner”是从其父记录继承的 我们有大约20或30个字段可以继承 我们确实希望从父级复制该值,因为它使视图和

我们正在MS Dynamics CRM 2015中为自参考实体建模。 一个例子是建筑物和部分建筑物(建筑群==>单个建筑物==>入口==>楼层==>平面)

有一些字段,如成本代码或建筑物的所有者。 如果你有一栋拥有300套公寓的建筑,那么整栋建筑可能属于一家公司,或者每个公寓都属于个人

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

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

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

问题:以前有没有这样做过,有没有最佳实践或者某个地方有一个完成的插件

如果我自己做,解决方案如下:

  • 对于每个可继承字段,创建一个布尔字段xx\u myfield\u inherit
  • 将复选框和字段始终放在表单上
  • 创建一些Javascript魔术和插件:
    • 如果勾选复选框,则将字段置于只读模式,并从父项复制值
    • 如果值已更改,请检查是否有已设置继承的子项(如果使用onchange触发器完成,则可能会以递归方式运行,即开箱即用)
有相当多的特殊情况需要处理(不允许继承,当未设置父项时,当更改父项时更新继承,取消选择继承,当删除父项时)


我想这是完全可行的,但我想先听听是否有更好的解决方案

30有很多字段需要创建单独的“继承”字段。关于可用性,值得考虑的是紧密相关字段的分组。

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

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

  • 创建新记录时,必须预先填充继承的字段
  • 修改父记录的继承字段时,这些更改必须同步到其子记录
  • 重新出租记录时,继承的字段必须用其新父项的值更新。(除非不可能重新租赁。)
  • 删除记录的父项时,继承的字段必须保持原样或清除。(由您的客户决定期望的行为是什么。)
  • 当用户能够使记录处于活动和非活动状态时,您还有一些额外的要求:
    • 当记录处于非活动状态时,其所有子记录也将被停用(v.v.)
    • 非活动记录不受层叠更新的影响
    • 重新激活记录时,必须刷新继承的字段
  • 为了实现这些要求,需要以下定制组件:

  • 为以下步骤注册的插件类:
    • PreValidate同步创建:此组件从父记录复制字段
    • PreValidate同步更新:当重新出租记录、删除父关系或修改“继承”字段时,此组件更新同步字段
    • PostUpdate异步更新:当一个或多个同步字段被修改时,此组件更新子记录
  • Javascript执行以下操作:
    • 一旦更改“继承”-字段,启用/禁用数据字段
    • 当您想要提供最佳的用户体验时,获取并预先填充同步的字段数据
  • 此解决方案中唯一棘手的部分是在异步插件步骤中执行级联更新,主要是因为更新是从树上级联而下的,CRM最多只允许在8个级别(默认情况下)执行此操作

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


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

    回答得很好。Javascript应该很简单。不过,我们只是从插件开始。你能想象分享一些你的插件代码让我们朝着正确的方向开始吗?我相信,你的提示与最大传播水平=8节省了我未来的头痛。虽然我希望我们不要超过8个级别,但如果知道一个解决方法就太好了,以防万一。在CRM Online中,解决这个限制并不容易。在内部部署中,您可以使用PowerShell或Dynamics CRM部署服务修改MaxDepth设置。看见