模型驱动应用子网格动态筛选问题:JS设置筛选XML报undefined错误
解决模型驱动应用子网格JS筛选的undefined错误
问题分析
你遇到的undefined错误及筛选失效,大概率是以下几个原因导致:
- 旧版API兼容性问题:
Xrm.Page已被弃用,在新环境中可能无法正确获取控件 - 符号格式错误:代码中使用了中文全角单引号,导致XML筛选规则解析失败
- 子网格加载时机问题:脚本执行时子网格尚未完成初始化
- 属性名或筛选XML结构错误
修复步骤
1. 替换为新版formContext API
放弃Xrm.Page,改用执行上下文获取formContext,这是当前模型驱动应用的标准写法:
function filterSubGrid(executionContext) { // 获取表单上下文 var formContext = executionContext.getFormContext(); // 获取子网格控件 var conSubGrid = formContext.getControl("Subgrid_new_9"); // 先校验控件是否存在且已加载 if (!conSubGrid || !conSubGrid.getGrid()) { console.log("子网格未找到或未完成加载"); return; } // 构造正确的筛选XML(使用英文半角引号) var filterXml = "<filter type='and'><condition attribute='cr85c_nameid' operator='eq' value='ABCD' /></filter>"; // 设置筛选并刷新 conSubGrid.setFilterXml(filterXml); conSubGrid.refresh(); }
2. 修正符号与XML格式
- 把所有中文全角单引号
’替换为英文半角单引号',XML对符号格式要求严格,全角符号会导致解析失败 - 确保
cr85c_nameid是子网格对应实体的正确逻辑名称(可在解决方案→实体→字段中查看,注意区分大小写) - 筛选XML的
filter节点需指定type(and/or),确保结构完整
3. 确保脚本在正确时机执行
- 不要直接绑定到表单
OnLoad事件(此时子网格可能未初始化),建议绑定到子网格的OnLoad事件 - 如果必须在表单加载时执行,可添加延迟:
setTimeout(function() { filterSubGrid(executionContext); }, 1000); // 延迟1秒执行,根据实际情况调整时长
4. 调试技巧
使用浏览器F12开发者工具的Console面板排查问题:
- 执行
formContext.getControl("Subgrid_new_9"),检查是否能获取到控件对象 - 查看Console中的错误信息,定位是控件未找到还是XML解析错误
内容的提问来源于stack exchange,提问作者KHV
相关产品推荐
相关产品推荐

