模型驱动Power Apps:直接展示筛选后硬件添加界面及Filter失效排查
解决模型驱动Power Apps中查找未关联硬件的Filter失效问题
修复lookupObjects的Filter配置问题
你的Filter失效大概率是因为filterXml中的换行和缩进导致XML解析异常。Dataverse对lookup的Filter XML格式要求严格,多余的空白字符会干扰解析。修正后的代码如下:
var lookupOptions = { allowMultiSelect: true, defaultEntityType: "cr389_peripherique", entityTypes: ["cr389_peripherique"], lookupType: "Lookup.Simple", filters: [{ filterXml: "<filter type='and'><condition attribute='cr389_bureau' operator='null' /></filter>", entityLogicalName: "cr389_peripherique" }] }; Xrm.Utility.lookupObjects(lookupOptions).then(function(success) { // 完成选择后,将硬件关联到当前工位 success.forEach(function(item) { var hardwareId = item.id.replace(/[{}]/g, ""); var currentDeskId = Xrm.Page.data.entity.getId().replace(/[{}]/g, ""); // 更新硬件的工位关联字段 Xrm.WebApi.updateRecord("cr389_peripherique", hardwareId, { cr389_bureau: { id: currentDeskId, entityType: "cr389_bureau" } // 替换为Desk表的逻辑名 }).then(function() { // 刷新子网格展示最新关联数据 Xrm.Page.getControl("你的子网格控件名称").refresh(); }, function(error) { console.error("关联失败:", error.message); }); }); });
更可靠的替代方案:使用自定义视图
如果Filter配置仍有问题,推荐直接使用Dataverse自定义视图来过滤未关联的硬件,步骤如下:
- 在Dataverse中打开Hardware表,创建一个公共视图,设置过滤条件为「cr389_bureau 等于 空值」,保存并发布视图。
- 复制该视图的GUID,在lookupOptions中指定
viewId参数,直接调用这个视图:
var lookupOptions = { allowMultiSelect: true, defaultEntityType: "cr389_peripherique", entityTypes: ["cr389_peripherique"], lookupType: "Lookup.Simple", viewId: "替换为你的自定义视图GUID", viewName: "未关联工位的硬件" }; Xrm.Utility.lookupObjects(lookupOptions).then(function(success) { // 同上的关联逻辑 });
额外检查项
- 确认实体逻辑名(
cr389_peripherique、cr389_bureau)和属性名(cr389_bureau)完全匹配Dataverse中的配置,大小写敏感。 - 确保Ribbon按钮绑定的JavaScript库已正确发布,且按钮触发时能获取到当前Desk表单的上下文(比如通过Ribbon Workbench传递PrimaryControl参数)。
内容的提问来源于stack exchange,提问作者Bastian Leguay
相关产品推荐
相关产品推荐

