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

Set form read only using Xrm Object on Dynamics 365 CRM

我正在 Microsoft Documentation 上阅读有关 Xrm 对象 的内容,但我找不到具体内容。

我需要限制一些创建或编辑门户评论(类型activity)的角色。因此我不能简单地修改 安全角色 .

我在编辑门户评论表单时看到有一个 JavaScript 脚本在页面加载时执行:

在编辑它时,它使用了很多这个 Xrm 对象。

在伪代码中我应该这样做

if(ActiveUser.hasRoles(["Some role", "Some other role"]) {
    Page.setReadOnly(true);
}

我已经有一个脚本(作为网络资源)来检查这样的角色,但我不知道如何制作表格 "read only" 或仅使用 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 技术来禁用这些属性,我必须研究它。

你走在正确的轨道上。正如您所说,create/modify 您的 js 库 Web 资源并在表单加载时注册,而不是编辑现有的 OOB adx 表单脚本 js 文件。在您的 js 代码中 - 检查当前用户的 security roles.

Xrm.Page.context.getUserRoles();

然后禁用

Xrm.Page.getControl("myfield").setDisabled(true);

Dynamics 365 CRM 平台具有 two forms 即只读和禁用,前者在用户仅对该特定实体具有读取权限时加载,后者为非活动记录呈现。不幸的是,我们不能强制加载任何这些形式。

补充 Arun 的回答;

不支持此类内容; document.querySelector('#crmRibbonManager')

Microsoft Dynamics 365 and the importance of staying supported

All JavaScript interactions within the application pages must only be performed using functions defined in Xrm.Page & Xrm.Utility namespaces, i.e. don’t directly interact with the page DOM.

如果你想控制功能区行为,你应该 Customize commands and the ribbon, you will need to add an enable/display rule. Ribbon Workbench 是一个很好的工具。

最后,这只是控制客户端验证,毫无价值。如果你想要用户无法避免的服务器端规则,你应该考虑实现一个插件。