[本文是预发行文档,可能会有所更改。]
FetchXML 是 Dataverse 的本机查询语言,允许创建者将数据筛选器编写为 XML 代码,类似于编写公式,但功能更强大。 使用 FetchXML 编辑器优化复杂配置文件以提高性能,并避免大型表(100K+ 记录)上的同步超时。
此功能最适合熟悉使用 XML 的高级创客和开发人员,并且需要比视觉过滤器生成器提供的更多控制。
重要
- 这是一项预览功能。
- 预览功能不适用于生产环境,并且可能具有受限的功能。 这些功能受补充使用条款的约束,并在正式发布之前可用,以便客户提前访问并提供反馈。
- 此功能正在跨区域逐步推出,您所在的区域可能尚未提供。
FetchXML 编辑器的优点
FetchXML 编辑器相比于视觉表达式生成器,定义脱机数据筛选器时提供了几个优势。
对分层条件的支持:
FetchXML 编辑器支持在启用层次结构的查找上构建复杂的分层条件,例如
under、eq-or-under、above和eq-or-above。 详细了解如何查询分层数据<fetch> <entity name="account"> <filter type="and"> <condition attribute="statecode" operator="eq" value="0" /> </filter> <link-entity name="businessunit" from="businessunitid" to="owningbusinessunit" link-type="any"> <filter type="and"> <condition attribute="businessunitid" operator="eq-or-under" value="{YOUR-PARENT-BU-GUID}" /> </filter> </link-entity> </entity> </fetch>支持对不相关的表进行检查:
FetchXML 编辑器允许链接到其他表格,即使它们与主表没有直接关系,前提是你指定了有效的 from 和 to 属性。 此功能在复杂的脱机方案中特别有用,其中多个实体共享一个公共外键,但不直接相关。
<fetch distinct="false" latematerialize="true" options="DisableRowGoal, EnableOptimizerHotfixes"> <entity name="cr57f_producttranslation"> <filter type="and"> <link-entity name="cr57f_userlanguagepreference" from="cr57f_language_id" to="cr57f_language_id" link-type="any"> <filter type="and"> <condition attribute="cr57f_user_id" operator="eq" value="user_002" /> </filter> </link-entity> </filter> </entity> </fetch>通过使用后期具体化和查询提示支持查询优化
编辑器直接在
<fetch>元素上公开高级优化控件,包括:latematerialize="true":通过使用latematerialize="true",在检索所有列数据之前,通过缩小匹配记录的范围来优化查询性能。 此属性可减少脱机同步期间在同步大型表时的负载。详细了解如何使用“后期具体化”<fetch distinct="false" latematerialize="true" options="OptimizeForUnknown,ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS"> <entity name="msdyn_workorder"> <filter type="and"> <condition attribute="statecode" operator="eq" value="0" /> <condition attribute="msdyn_systemstatus" operator="in"> <value>690970000</value> <value>690970001</value> </condition> </filter> <!-- Booking chain --> <link-entity name="bookableresourcebooking" from="msdyn_workorder" to="msdyn_workorderid" link-type="any"> <filter type="and"> <condition attribute="statecode" operator="eq" value="0" /> <filter type="or"> <condition attribute="starttime" operator="today" /> <condition attribute="starttime" operator="next-seven-days" /> </filter> </filter> <link-entity name="bookingstatus" from="bookingstatusid" to="bookingstatus" link-type="any"> <filter type="and"> <condition attribute="statecode" operator="eq" value="0" /> </filter> </link-entity> <link-entity name="bookableresource" from="bookableresourceid" to="resource" link-type="any"> <filter type="and"> <condition attribute="userid" operator="eq-userid" /> </filter> </link-entity> </link-entity> <!-- Customer asset --> <link-entity name="msdyn_customerasset" from="msdyn_customerassetid" to="msdyn_customerasset" link-type="any"> <filter type="and"> <condition attribute="statecode" operator="eq" value="0" /> </filter> <!-- Account --> <link-entity name="account" from="accountid" to="msdyn_account" link-type="any"> <filter type="and"> <condition attribute="statecode" operator="eq" value="0" /> </filter> </link-entity> </link-entity> </entity> </fetch>options属性传递SQL Server查询提示。 详细了解如何使用这些选项
FetchXML 编辑器的工作原理
您可以通过 Power Apps 中的脱机配置文件配置界面访问 FetchXML 编辑器。 编写或粘贴 FetchXML 查询,编辑器会在保存之前实时验证它。
在 Power Apps 中,转到环境的设置并打开 Offline Profiles 页。 选择现有的脱机配置文件或创建新的配置文件,然后选择 “编辑配置文件”。
在脱机配置文件编辑器中,添加或选择要筛选其数据以供脱机使用的表。
在 “筛选器”下,选择“ 自定义 ”或“ 相关”行,然后选择“ 编辑筛选器”。
在筛选器编辑器中,向下滚动并选择 “查看/编辑 FetchXML ”以打开 FetchXML 代码编辑器。
修改现有的 FetchXML 查询或粘贴新查询。 编辑时,编辑器会自动验证语法和结构,并检查:
如果编辑器检测到问题(例如缺少必需的元素或不受支持的
<link-entity>用法),则会显示一条明确的错误消息,以便在保存之前对其进行修复。FetchXML 查询有效后,选择 “应用” 以转换筛选器,然后 保存 脱机配置。
重要
始终选择 “应用 ”,然后在编辑 FetchXML 后 保存 。 如果不保存,则更改会被放弃。
保存后,脱机配置文件使用自定义 FetchXML 筛选器进行数据同步。如果查询仅使用视觉生成器支持的功能,这些筛选器将继续显示在表达式生成器 UI 中。 如果使用仅限 FetchXML 的高级功能,则视觉筛选器 UI 可能不会呈现它们。 使用 FetchXML 编辑器对该筛选器进行将来的任何编辑。
最佳做法
- 应用性能提示,例如
latematerialize="true"或hint="union"适用于大型数据集。 - 在保存之前,使用内置编辑器的检查功能来验证 FetchXML。
- 应用 FetchXML 更改后立即保存您的脱机配置文件。
- 仅对脱机配置文件(如
link-type="any"或link-type="not any")使用支持的 FetchXML 构造。 - 避免在脱机筛选器中使用不受支持的联接类型,例如
inner或outer。 - 将筛选器子句控制在每个查询不超过500子句的限制内。
- 不要忽略验证错误。 查询的格式必须正确且完整。
局限性
- 查询必须以
<fetch>根元素开头,并且至少包含一个<entity>元素。 - 仅允许使用支持的 FetchXML 元素。 未知或不受支持的标记触发验证错误。
- 元素必须遵循正确的父子嵌套规则。
-
<link-entity>内部<filter>必须使用link-type="any"或link-type="not any"。 不支持内部和外部联接。 - FetchXML
<attribute>标记不用于脱机同步中的列选择。请改用 “筛选列” 选项。 - 显式分页属性(例如
pagecount,在脱机配置文件中被忽略)。 - 查询限制为最多 500 个筛选器子句。