You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助实现:点击机会实体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

  1. 把上述代码上传为新的JS Web资源,记得发布这个资源。
  2. 在Ribbon Workbench中,给目标按钮的Command添加一个Javascript Action:
    • 选择你刚上传的JS Web资源。
    • 函数名填写openOpportunityProductQuickCreate。
    • 在“参数”选项中添加PrimaryControl(这是关键!确保函数能拿到表单上下文)。
  3. 点击Ribbon Workbench的“Publish”按钮发布自定义,然后清除浏览器缓存(Dynamics 365对Ribbon缓存很顽固,按Ctrl+F5硬刷新)。

四、额外排查点

  • 确认机会产品实体的快速创建表单已经激活,并且包含了“机会”关联字段(不然自动关联会失效)。
  • 测试时打开浏览器控制台(F12),看有没有JS报错——如果有报错信息,能快速定位问题(比如函数名拼写错误、Web资源未发布等)。

内容的提问来源于stack exchange,提问作者Jeet Gandhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:27:13