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

CRM 8.2与USD 4.1中传递数据参数至JS Web资源及ribbon按钮显隐需求

USD 4.1 + CRM 8.2 传递参数至JS Webresource并控制Ribbon按钮方案

我刚好处理过类似的USD和CRM 8.2场景,给你几个不用依赖Unified Interface注入方式的可行方案:

方案1:用USD原生Action Call调用JS函数并传参

这是最直接的USD原生实现方式,适合非UI界面的参数传递:

  • 新建一个Action Call,选择Microsoft.Crm.UnifiedServiceDesk.WebResource的InvokeScript方法
  • 配置核心参数:
    • WebResourceName:填写你的目标JavaScript Webresource名称
    • FunctionName:填写Webresource中要调用的函数名
    • Parameter:用USD的参数占位符传递值,格式为[[你的USD数据参数名]]
  • 将这个Action Call绑定到合适的触发事件(比如窗体加载、控件值变更),USD会自动把参数值注入到指定JS函数中

方案2:直接在JS中通过USD客户端API获取参数

如果需要主动获取USD参数并控制Ribbon,用这个方法更灵活。示例代码:

function fetchUSDParamAndControlRibbon() {
    // 访问USD全局上下文API(仅在USD宿主环境可用)
    const usdContext = window.top.Xrm.Internal.USD;
    if (!usdContext) return;

    // 获取目标USD数据参数值
    const targetParamValue = usdContext.GetContext().DataParameters["你的USD参数名"];
    
    // 根据参数值控制Ribbon按钮
    if (targetParamValue === "需要显示的条件值") {
        // 启用并显示按钮(替换为你的按钮命令ID)
        window.top.Xrm.Page.ui.ribbon.enableCommand("your_button_command_id", true);
        window.top.Xrm.Page.ui.ribbon.showCommand("your_button_command_id", true);
    } else {
        // 禁用并隐藏按钮
        window.top.Xrm.Page.ui.ribbon.enableCommand("your_button_command_id", false);
        window.top.Xrm.Page.ui.ribbon.showCommand("your_button_command_id", false);
    }
}

// 绑定到窗体加载事件(如果是实体窗体场景)
window.top.Xrm.Page.data.entity.addOnLoad(fetchUSDParamAndControlRibbon);

注意:这段代码必须在USD客户端环境中运行,直接在CRM网页中测试会无法访问window.top.Xrm.Internal.USD对象。

方案3:结合USD Session Data与Ribbon Workbench规则(配置优先)

如果不想写太多代码,可以用配置方式实现:

  1. 在USD中创建Action Call,调用SetSessionData方法,把目标数据参数存入Session Data
  2. 在Ribbon Workbench中给目标按钮添加JavaScript Rule,编写函数读取USD Session Data:
function shouldShowRibbonButton() {
    const usdContext = window.top.Xrm.Internal.USD;
    if (!usdContext) return false;
    
    // 读取Session Data中的值(替换为你的Session Data键名)
    const sessionValue = usdContext.GetSessionData("your_session_data_key");
    return sessionValue === "符合显示的条件";
}
  1. 将这个规则绑定到按钮的「显示」或「启用」条件上

额外注意事项

  • CRM 8.2搭配USD 4.1版本,window.top.Xrm.Internal.USD API是稳定可用的,无需担心兼容性
  • 测试时务必在USD客户端内进行,不要直接在CRM网页中测试USD专属API
  • 如果是实体窗体的Ribbon,确保JS函数在Ribbon初始化后触发(比如绑定到窗体加载事件)

内容的提问来源于stack exchange,提问作者Faran Saleem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:28:14