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规则(配置优先)
如果不想写太多代码,可以用配置方式实现:
- 在USD中创建Action Call,调用
SetSessionData方法,把目标数据参数存入Session Data - 在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 === "符合显示的条件"; }
- 将这个规则绑定到按钮的「显示」或「启用」条件上
额外注意事项
- CRM 8.2搭配USD 4.1版本,
window.top.Xrm.Internal.USDAPI是稳定可用的,无需担心兼容性 - 测试时务必在USD客户端内进行,不要直接在CRM网页中测试USD专属API
- 如果是实体窗体的Ribbon,确保JS函数在Ribbon初始化后触发(比如绑定到窗体加载事件)
内容的提问来源于stack exchange,提问作者Faran Saleem
相关产品推荐
相关产品推荐

