如何让N:N关系子网格的+按钮点击时打开创建表单而非查找搜索?
解决N:N子网格+按钮打开创建表单的问题
我完全懂你的困境——明明知道1:N更适配这个场景,但没法修改关系的情况下,默认N:N子网格的+按钮只会弹出查找界面,想改成直接打开新建表单还不小心把按钮搞没了,确实头疼。下面给你两个靠谱的解决方案:
方案1:自定义功能区按钮替换默认按钮
默认的N:N子网格+按钮绑定的是系统自带的“添加现有关联项”命令,直接隐藏这个命令会把整个按钮都干掉,所以我们需要用自定义按钮来替代它:
- 打开Dynamics 365的解决方案,找到Account实体,进入目标表单的表单编辑器
- 切换到顶部的功能区标签,定位到子网格对应的功能区组(一般是“子网格操作”这类分组)
- 点击“新建按钮”,设置按钮的图标、显示文本和原来的+按钮保持一致,让用户看不出区别
- 给这个自定义按钮绑定一个JavaScript命令,代码逻辑是打开新建Address表单,并且保存后自动关联当前Account:
function openNewAddressForm() { // 获取当前打开的Account记录ID,去掉大括号 var currentAccountId = Xrm.Page.data.entity.getId().replace(/[{}]/g, ""); // 打开新建Address实体的表单,传入关联参数 Xrm.Utility.openEntityForm("new_address", null, { // 这里替换成你实际的N:N关系名称 + 主实体ID字段名 "new_account_new_address_accountid": currentAccountId }); } - 最后把原来的默认+按钮隐藏,只保留我们自定义的这个按钮
这样用户点击+按钮时,就会直接弹出新建Address的表单,保存后这条地址会自动和当前Account建立N:N关联,完美符合你的需求。
方案2:插件辅助自动关联(备选)
如果不想修改功能区,也可以用插件来补全体验:
- 保留原来的+按钮,但在子网格上方加个提示文本,告诉用户可以先新建Address再关联
- 编写一个创建后插件,当用户新建Address时,自动获取当前打开的Account上下文ID,然后自动创建N:N关联记录
不过这个方案的用户体验不如自定义按钮直接,更适合临时过渡使用。
重要提示
- 自定义功能区时,要确保按钮的显示条件和原按钮一致(比如只在表单编辑状态下可见)
- JavaScript代码里的实体名称、关系名称、字段ID都要替换成你系统里的实际值
- 测试时记得验证:新建Address后,是否能在Account的子网格里看到这条关联记录
内容的提问来源于stack exchange,提问作者Sagar
相关产品推荐
相关产品推荐

