如何隐藏子网格「Add Existing」弹窗中的「+ New Record」按钮
问题场景
在父表单中嵌入子网格表单后,点击「Add Existing...」弹出的选择对话框需要隐藏「+ New Record」选项,可通过以下3种方案实现,可根据实际场景选择:
方案1:权限控制(无代码,推荐优先使用)
- 调整当前操作用户所属安全角色的权限,去掉角色对子网格关联实体的「创建」权限即可。只要用户没有该实体的创建权限,对话框不会自动渲染「+ New Record」按钮。
适用场景:该角色用户不需要在任何场景创建子网格对应的实体记录。
方案2:子网格属性配置(低代码)
如果使用的是Power Apps模型驱动应用/Dynamics 365,可直接修改子网格配置:
- 进入父表单的编辑界面,双击目标子网格打开属性面板
- 切换到「数据源」标签页,取消勾选「允许添加新记录」选项
- 保存并发布表单即可生效
注意:该配置会同时隐藏子网格顶部自带的「新建」按钮,如果需要保留子网格的新建能力,不要使用该方案。
方案3:JS脚本注入(灵活适配特殊需求)
如果前两种方案都不符合你的场景,可以通过自定义JS脚本监听弹出框渲染,隐藏目标按钮,参考代码如下:
function hideNewBtnInAddExistingDialog(executionContext) { const formContext = executionContext.getFormContext(); // 替换为你自己的子网格控件名称 const targetSubgridName = "subgrid_contact"; const subgridControl = formContext.getControl(targetSubgridName); if (!subgridControl) return; subgridControl.addOnLoad(() => { // 轮询检测弹出框是否渲染完成 const checkTimer = setInterval(() => { const newRecordBtn = document.querySelector("button[aria-label='New Record'], button[data-id='createNewButton']"); if (newRecordBtn) { newRecordBtn.style.display = "none"; clearInterval(checkTimer); } }, 200); // 3秒后自动销毁定时器避免内存泄漏 setTimeout(() => clearInterval(checkTimer), 3000); }); }
- 部署步骤:
- 将上述代码保存为JS类型的Web资源,上传到你的应用平台
- 打开父表单编辑界面,在表单的「OnLoad」事件中绑定上述函数,同时勾选「传递执行上下文作为第一个参数」
- 保存发布表单后测试生效。
内容的提问来源于stack exchange,提问作者quan lai
相关产品推荐
相关产品推荐

