请求协助实现:点击机会实体OOB机会产品子网格+按钮打开快速创建表单
解决Dynamics 365中机会产品子网格“+”按钮打开快速创建表单的问题
看起来你已经做了基础配置,但JS没执行大概率是Ribbon自定义的细节没处理到位,我帮你梳理下关键排查点和正确的实现步骤:
一、先确认Ribbon Workbench的配置是否精准
- 你必须选中机会实体子网格对应的“添加新项”按钮(注意是Subgrid Ribbon下的按钮,不是机会主表单的顶部按钮),很多人会选错层级导致自定义不生效。
- 建议直接替换OOB按钮的默认命令,而不是新增动作——因为如果只是添加动作,OOB的原有逻辑可能还会优先触发,覆盖你的自定义。
二、确保JS代码正确且适配子网格上下文
子网格按钮的上下文获取和主表单略有不同,这里给你一份经过验证的代码:
function openOpportunityProductQuickCreate(primaryControl) { // 获取当前机会表单的上下文 const formContext = primaryControl.formContext; const opportunityId = formContext.data.entity.getId(); // 配置快速创建表单参数 const formOptions = { entityName: "opportunityproduct", formType: 2, // 2代表快速创建表单 defaultEntityType: "opportunity", defaultEntityId: opportunityId, // 自动关联当前机会 openInNewWindow: false // 可选:是否在新窗口打开 }; // 打开表单并处理回调 Xrm.Navigation.openForm(formOptions).then( (success) => { console.log("快速创建表单提交成功"); // 刷新子网格展示新添加的产品 const subgrid = formContext.getControl("opportunityproductsGrid"); // 替换成你的子网格名称 if (subgrid) subgrid.refresh(); }, (error) => { console.error("打开快速创建表单失败: ", error.message); } ); }
三、Ribbon Workbench中正确关联JS
- 把上述代码上传为新的JS Web资源,记得发布这个资源。
- 在Ribbon Workbench中,给目标按钮的Command添加一个Javascript Action:
- 选择你刚上传的JS Web资源。
- 函数名填写
openOpportunityProductQuickCreate。 - 在“参数”选项中添加
PrimaryControl(这是关键!确保函数能拿到表单上下文)。
- 点击Ribbon Workbench的“Publish”按钮发布自定义,然后清除浏览器缓存(Dynamics 365对Ribbon缓存很顽固,按Ctrl+F5硬刷新)。
四、额外排查点
- 确认机会产品实体的快速创建表单已经激活,并且包含了“机会”关联字段(不然自动关联会失效)。
- 测试时打开浏览器控制台(F12),看有没有JS报错——如果有报错信息,能快速定位问题(比如函数名拼写错误、Web资源未发布等)。
内容的提问来源于stack exchange,提问作者Jeet Gandhi
相关产品推荐
相关产品推荐

