面向不同部门扩展Dynamics CRM 2016联系人实体的最优方案
针对Dynamics CRM 2016部门专属字段隐藏的最优方案
我之前帮客户处理过几乎一模一样的需求,字段级安全确实只能隐藏值、没法隐藏字段本身,视觉上太杂乱了。这里给你几个更贴合需求的方案,按实用性排序:
1. 多表单+安全角色控制(最推荐)
这是最直观也最易维护的方案,能完全让用户看不到无关字段:
- 步骤:
- 复制默认的Contact表单,为每个部门创建专属表单(比如「市场部联系人表单」「销售部联系人表单」)
- 在每个专属表单里,只保留对应部门需要的字段,删掉其他部门的自定义字段
- 打开表单的「属性」设置,在「安全角色」标签页里,只添加对应部门的安全角色,确保只有该部门用户能看到这个表单
- 把对应部门用户的默认表单设置为他们的专属表单
- 优点:用户打开表单时只会看到自己部门的字段,视觉干净,不需要代码开发,权限控制清晰
- 缺点:如果部门数量多,后续字段修改需要同步到对应表单,不过CRM的表单复制功能能减少重复工作
2. JavaScript动态显隐字段(灵活度高)
如果不想维护多个表单,可以用表单加载脚本根据用户部门动态控制字段显示:
- 步骤:
- 在Contact表单的OnLoad事件里添加自定义JavaScript
- 脚本逻辑:
- 获取当前用户的部门信息:
Xrm.Utility.getGlobalContext().userSettings.settings["msdyn_parentdepartmentid"](可根据你的部门字段逻辑调整) - 根据部门判断,调用
Xrm.Page.getAttribute("your_custom_field").controls.get(0).setVisible(false)隐藏无关字段
- 获取当前用户的部门信息:
- 配合字段级安全一起用,即使有人通过调试工具强制显示字段,也看不到字段值
- 优点:只用一个表单,后续字段维护更方便,能灵活处理复杂的部门规则
- 缺点:需要具备CRM JavaScript开发能力,且前端技术好的用户可能绕过显示控制(但字段级安全能补上这个漏洞)
3. 业务流程流(BPF)+表单分区(适合有流程差异的部门)
如果不同部门的联系人管理流程有差异,可以结合BPF来控制字段可见:
- 步骤:
- 为每个部门创建专属的业务流程流,流程里只包含对应部门需要的字段
- 把不同部门的字段放在表单的不同分区,通过BPF的阶段来控制分区的显示/隐藏
- 用安全角色控制每个BPF的可见性,确保用户只能看到自己部门的BPF
- 优点:把字段控制和业务流程结合起来,更贴合部门的实际工作流程
- 缺点:如果部门流程差异不大,这个方案的性价比不高,BPF的维护成本也会增加
额外建议
如果担心权限漏洞,可以把「多表单控制」和「字段级安全」结合起来:先通过表单隐藏无关字段,再给字段设置字段级安全,双重保障数据安全。
内容的提问来源于stack exchange,提问作者Seamus
相关产品推荐
相关产品推荐

