使用JavaScript设置可编辑子网格为只读

422 字
2 分钟
使用JavaScript设置可编辑子网格为只读

在 Dynamics 365 模型驱动应用(Model-driven App) 中,可编辑子网格(Editable Subgrid)为数据录入提供了非常高效的体验

但在某些业务场景下,我们可能希望子网格整体可编辑,但部分列只读,或在特定时机(如选中行后),临时禁止编辑

遗憾的是Dynamics 365并没有提供开箱即用的方式来控制可编辑子网格中单个列的只读状态。因此,通常需要通过 JavaScript Client API 在子网格行被选中时动态控制字段的可编辑性

本文将介绍两种常见实现方式:

  1. 将子网格中所有列设置为只读
  2. 仅将指定列设置为只读

全部列设置为只读#

下面的示例中,在子网格行被选中时,遍历当前行的所有字段,并将其对应的控件统一设置为只读。

Disabled_XXXXX_SubGridOnSelect: function (ExecutionContext) {
let that = this;
let objFormContext = ExecutionContext.getFormContext();
let entObject = objFormContext.data.entity;
entObject.attributes.forEach(function (attribute) {
let allColumnControl = attribute.controls.get(0);
allColumnControl.setDisabled(true);
});
}

指定列设置为只读#

如果只需要控制部分字段,可以根据字段的 Logical Name 进行判断

Disabled_XXXXX_SubGridOnSelect: function (ExecutionContext) {
let objFormContext = ExecutionContext.getFormContext();
let entObject = objFormContext.data.entity;
entObject.attributes.forEach(function (attribute) {
let columnName = attribute.getName();
if (
columnName == "your field name 1" ||
columnName == "your field name 2" ||
columnName == "your field name 3" ||
columnName == "your field name 4" ||
columnName == "your field name 5" ||
columnName == "your field name 6") {
attribute.controls.get(0).setDisabled(true);
}
});
}

事件绑定方式#

打开目标表单,选中 可编辑子网格,为其绑定上述 JavaScript 方法。

需要注意两点:

  1. 事件选择:On Record Select
  2. 勾选:将执行上下文作为第一个参数传递

Bind JavaScript to Editable Subgrid
Bind JavaScript to Editable Subgrid

(完)


支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
使用JavaScript设置可编辑子网格为只读
https://mgrowup.com/posts/dynamics365/set-editable-subgrid-columns-to-read-only/
作者
Donghai
发布于
2024-12-26
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Donghai
Hello, I'm Donghai.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
62
分类
9
标签
37
总字数
76,949
运行时长
0
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.5
文章许可
CC BY-NC-SA 4.0