离线配置文件的 FetchXML 编辑器(预览版)

[本文是预发行文档,可能会有所更改。]

FetchXML 是 Dataverse 的本机查询语言,允许创建者将数据筛选器编写为 XML 代码,类似于编写公式,但功能更强大。 使用 FetchXML 编辑器优化复杂配置文件以提高性能,并避免大型表(100K+ 记录)上的同步超时。

此功能最适合熟悉使用 XML 的高级创客和开发人员,并且需要比视觉过滤器生成器提供的更多控制。

重要

  • 这是一项预览功能。
  • 预览功能不适用于生产环境,并且可能具有受限的功能。 这些功能受补充使用条款的约束,并在正式发布之前可用,以便客户提前访问并提供反馈。
  • 此功能正在跨区域逐步推出,您所在的区域可能尚未提供。

FetchXML 编辑器的优点

FetchXML 编辑器相比于视觉表达式生成器,定义脱机数据筛选器时提供了几个优势。

  • 对分层条件的支持

    FetchXML 编辑器支持在启用层次结构的查找上构建复杂的分层条件,例如undereq-or-underaboveeq-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 编辑器允许链接到其他表格,即使它们与主表没有直接关系,前提是你指定了有效的 fromto 属性。 此功能在复杂的脱机方案中特别有用,其中多个实体共享一个公共外键,但不直接相关。

    <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 查询,编辑器会在保存之前实时验证它。

  1. Power Apps 中,转到环境的设置并打开 Offline Profiles 页。 选择现有的脱机配置文件或创建新的配置文件,然后选择 “编辑配置文件”。

  2. 在脱机配置文件编辑器中,添加或选择要筛选其数据以供脱机使用的表。

  3. “筛选器”下,选择“ 自定义 ”或“ 相关”行,然后选择“ 编辑筛选器”。

  4. 在筛选器编辑器中,向下滚动并选择 “查看/编辑 FetchXML ”以打开 FetchXML 代码编辑器。 离线配置文件筛选器编辑器中 FetchXML 代码编辑器的屏幕截图。

  5. 修改现有的 FetchXML 查询或粘贴新查询。 编辑时,编辑器会自动验证语法和结构,并检查:

    • 必需的<fetch>根元素,其中包含至少一个<entity>元素
    • 仅支持 FetchXML 标记
    • 放置在正确父元素内的元素
    • 最多 500 个过滤条件

    如果编辑器检测到问题(例如缺少必需的元素或不受支持的 <link-entity> 用法),则会显示一条明确的错误消息,以便在保存之前对其进行修复。

  6. FetchXML 查询有效后,选择 “应用” 以转换筛选器,然后 保存 脱机配置。

重要

始终选择 “应用 ”,然后在编辑 FetchXML 后 保存 。 如果不保存,则更改会被放弃。

保存后,脱机配置文件使用自定义 FetchXML 筛选器进行数据同步。如果查询仅使用视觉生成器支持的功能,这些筛选器将继续显示在表达式生成器 UI 中。 如果使用仅限 FetchXML 的高级功能,则视觉筛选器 UI 可能不会呈现它们。 使用 FetchXML 编辑器对该筛选器进行将来的任何编辑。

最佳做法

  • 应用性能提示,例如 latematerialize="true"hint="union" 适用于大型数据集。
  • 在保存之前,使用内置编辑器的检查功能来验证 FetchXML。
  • 应用 FetchXML 更改后立即保存您的脱机配置文件。
  • 仅对脱机配置文件(如 link-type="any"link-type="not any")使用支持的 FetchXML 构造。
  • 避免在脱机筛选器中使用不受支持的联接类型,例如 innerouter
  • 将筛选器子句控制在每个查询不超过500子句的限制内。
  • 不要忽略验证错误。 查询的格式必须正确且完整。

局限性

  • 查询必须以 <fetch> 根元素开头,并且至少包含一个 <entity> 元素。
  • 仅允许使用支持的 FetchXML 元素。 未知或不受支持的标记触发验证错误。
  • 元素必须遵循正确的父子嵌套规则。
  • <link-entity> 内部 <filter> 必须使用 link-type="any"link-type="not any"。 不支持内部和外部联接。
  • FetchXML <attribute> 标记不用于脱机同步中的列选择。请改用 “筛选列” 选项。
  • 显式分页属性(例如pagecount,在脱机配置文件中被忽略)。
  • 查询限制为最多 500 个筛选器子句。