在 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 是一个很好的工具。
最后,这只是控制客户端验证,毫无价值。如果你想要用户无法避免的服务器端规则,你应该考虑实现一个插件。
我正在 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 是一个很好的工具。
最后,这只是控制客户端验证,毫无价值。如果你想要用户无法避免的服务器端规则,你应该考虑实现一个插件。