我正在Microsoft Documentation上阅读有关 Xrm对象的信息,但找不到具体的东西。
我需要限制创建或编辑门户注释(活动的类型)的某些角色。因此,我不能只是简单地修改安全角色。
当我编辑门户注释表单时,看到有一个JavaScript脚本会在页面加载时执行:
在编辑此对象时,它会大量使用此Xrm
对象。
我应该用伪代码
if(ActiveUser.hasRoles(["Some role", "Some other role"]) {
Page.setReadOnly(true);
}
我已经有一个脚本(作为网络资源)来检查这样的角色,但是我不知道如何将表单设置为“只读”或仅使用Xrm进行设置。有什么线索可以在这里实现吗?
编辑1:
我能够通过使用以下代码来做到这一点:
// Ribbon "Save" button
document.querySelector('#crmRibbonManager').style.display = "none";
// Status "Save" button
document.querySelector('#savefooter_statuscontrol').style.display = "none";
Xrm.Page.ui.controls.get().forEach(function (control) {
if(!control.getDisabled()) {
control.setDisabled(true);
}
});
由于文档尚未加载,我当然会收到 页面加载错误 。但是我很确定我可以使用某种Xrm
技术来禁用这些属性,我必须对此进行研究。
答案 0 :(得分:5)
您步入正轨。就像您说的那样,创建/修改js库Web资源并在加载表单时注册,而不是编辑现有的OOB adx表单脚本js文件。在您的js代码中-检查当前用户的security roles。
Xrm.Page.context.getUserRoles();
然后禁用fields in bulk。
Xrm.Page.getControl("myfield").setDisabled(true);
Dynamics 365 CRM平台具有two forms,即只读和已禁用,当用户仅对该特定实体具有读取权限时加载前者,而对于非活动记录则呈现后一个。不幸的是,我们不能强迫加载任何这些表格。
答案 1 :(得分:3)
以补充阿伦的答案;
不支持这种类型的东西; document.querySelector('#crmRibbonManager')
Microsoft Dynamics 365 and the importance of staying supported
应用程序页面内的所有JavaScript交互都必须是 使用Xrm.Page和Xrm.Utility中定义的功能执行 命名空间,即不直接与页面DOM交互。
如果您想控制功能区的行为,则应该Customize commands and the ribbon,您需要添加一个启用/显示规则。 Ribbon Workbench是实现这一目标的绝佳工具。
最后,仅控制客户端验证毫无用处。如果希望用户无法避免的服务器端规则,则应考虑实施插件。