在Dynamics 365 CRM上使用Xrm Object将表单设置为只读

时间:2018-07-03 13:26:19

标签: javascript dynamics-crm microsoft-dynamics dynamics-crm-365 xrm

我正在Microsoft Documentation上阅读有关 Xrm对象的信息,但找不到具体的东西。

我需要限制创建或编辑门户注释活动的类型)的某些角色。因此,我不能只是简单地修改安全角色

当我编辑门户注释表单时,看到有一个JavaScript脚本会在页面加载时执行:

Page load script

在编辑此对象时,它会大量使用此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技术来禁用这些属性,我必须对此进行研究。

2 个答案:

答案 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是实现这一目标的绝佳工具。

最后,仅控制客户端验证毫无用处。如果希望用户无法避免的服务器端规则,则应考虑实施插件。