オフライン プロファイル用 FetchXML エディター (プレビュー)

[この記事はプレリリース ドキュメントであり、変更されることがあります]

FetchXML は Dataverse のネイティブ クエリ言語であり、作成者は数式の記述と同様に、より強力な XML コードとしてデータ フィルターを記述できます。 FetchXML エディターを使用して、パフォーマンスを向上させるために複雑なプロファイルを最適化し、大きなテーブル (100K 以上のレコード) での同期タイムアウトを回避します。

この機能は、XML の操作に慣れ、ビジュアル フィルター ビルダーが提供するよりも詳細な制御が必要な、高度な作成者や開発者に最適です。

Important

  • これはプレビュー機能です。
  • プレビュー機能は運用環境での使用を想定しておらず、機能が制限されている可能性があります。 これらの機能は追加使用条件の対象であり、公式リリース前にアクセス可能です。これにより、お客様は早期に利用し、フィードバックを提供することができます。
  • この機能は、地域ごとに段階的に展開されており、あなたの地域ではまだ利用できない可能性があります。

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 エディターを使用すると、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 エディターのしくみ

FetchXML エディターには、Power Apps のオフライン プロファイル構成エクスペリエンスを使用してアクセスします。 FetchXML クエリを記述または貼り付けると、保存する前にエディターによってリアルタイムで検証されます。

  1. Power Apps で、環境の設定に移動し、[オフライン プロファイル] ページを開きます。 既存のオフライン プロファイルを選択するか、新しいプロファイルを作成して、[ プロファイルの編集] を選択します。

  2. オフライン プロファイル エディターで、オフラインで使用するためにフィルター処理するデータを含むテーブルを追加または選択します。

  3. [ フィルター] で、[ カスタム ] または [ 関連する行] を選択し、[ フィルターの編集] を選択します。

  4. フィルター エディターで下にスクロールし、[ FetchXML の表示/編集] を選択して FetchXML コード エディターを開きます。 オフライン プロファイル フィルター エディターの FetchXML コード エディターのスクリーンショット。

  5. 既存の FetchXML クエリを変更するか、新しいクエリを貼り付けます。 エディターは、編集中に構文と構造を自動的に検証し、以下を確認します。

    • 少なくとも 1 つの<fetch>要素を持つ必須の<entity> ルート要素
    • サポートされている FetchXML タグのみ
    • 正しい親要素内に配置された要素
    • 最大 500 個のフィルター句

    エディターで、不足している必須要素やサポートされていない <link-entity> の使用状況などの問題が検出されると、明確なエラー メッセージが表示されるので、保存する前に修正できます。

  6. FetchXML クエリが有効されたら、[ 適用 ] を選択してフィルターを変換し、オフライン プロファイルを 保存します

Important

FetchXML を編集した後は、常に [適用 ] を選択し 、[保存] を選択します。 保存しない場合、変更は破棄されます。

保存後、オフライン プロファイルはカスタム FetchXML フィルターを使用してデータ同期を行います。クエリでビジュアル ビルダーでサポートされている機能のみが使用されている場合、これらのフィルターは式ビルダー UI に引き続き表示されます。 高度な FetchXML のみの機能を使用すると、ビジュアル フィルター UI でレンダリングされない可能性があります。 FetchXML エディターを使用して、そのフィルターに対する今後の編集を行います。

ベスト プラクティス

  • 大規模なデータセットに latematerialize="true"hint="union" などのパフォーマンス ヒントを適用します。
  • 保存する前に、組み込みのエディター チェックを使用して FetchXML を検証します。
  • FetchXML の変更を適用した直後にオフライン プロファイルを保存します。
  • link-type="any"link-type="not any"などのオフライン プロファイルには、サポートされている FetchXML コンストラクトのみを使用します。
  • オフライン フィルターでの innerouter など、サポートされていない結合の種類は避けてください。
  • フィルター句は、クエリあたり 500 句の制限の下に保持します。
  • 検証エラーは無視しないでください。 クエリは正しい形式で完結している必要があります。

制限事項

  • クエリは、 <fetch> ルート要素で始まり、少なくとも 1 つの <entity> 要素を含める必要があります。
  • サポートされている FetchXML 要素のみが許可されます。 不明またはサポートされていないタグは、検証エラーをトリガーします。
  • 要素は、適切な親子入れ子規則に従う必要があります。
  • <link-entity>内部<filter>link-type="any"またはlink-type="not any"を使用する必要があります。 内部結合と外部結合はサポートされていません。
  • FetchXML <attribute> タグは、オフライン同期での列の選択には使用されません。代わりに、[ 列のフィルター] オプションを使用します。
  • オフライン プロファイルでは、 pagecount などの明示的な改ページ属性は無視されます。
  • クエリは最大 500 個のフィルター句に制限されます。