[この記事はプレリリース ドキュメントであり、変更されることがあります]
FetchXML は Dataverse のネイティブ クエリ言語であり、作成者は数式の記述と同様に、より強力な XML コードとしてデータ フィルターを記述できます。 FetchXML エディターを使用して、パフォーマンスを向上させるために複雑なプロファイルを最適化し、大きなテーブル (100K 以上のレコード) での同期タイムアウトを回避します。
この機能は、XML の操作に慣れ、ビジュアル フィルター ビルダーが提供するよりも詳細な制御が必要な、高度な作成者や開発者に最適です。
Important
- これはプレビュー機能です。
- プレビュー機能は運用環境での使用を想定しておらず、機能が制限されている可能性があります。 これらの機能は追加使用条件の対象であり、公式リリース前にアクセス可能です。これにより、お客様は早期に利用し、フィードバックを提供することができます。
- この機能は、地域ごとに段階的に展開されており、あなたの地域ではまだ利用できない可能性があります。
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 エディターのしくみ
FetchXML エディターには、Power Apps のオフライン プロファイル構成エクスペリエンスを使用してアクセスします。 FetchXML クエリを記述または貼り付けると、保存する前にエディターによってリアルタイムで検証されます。
Power Apps で、環境の設定に移動し、[オフライン プロファイル] ページを開きます。 既存のオフライン プロファイルを選択するか、新しいプロファイルを作成して、[ プロファイルの編集] を選択します。
オフライン プロファイル エディターで、オフラインで使用するためにフィルター処理するデータを含むテーブルを追加または選択します。
[ フィルター] で、[ カスタム ] または [ 関連する行] を選択し、[ フィルターの編集] を選択します。
フィルター エディターで下にスクロールし、[ FetchXML の表示/編集] を選択して FetchXML コード エディターを開きます。
既存の FetchXML クエリを変更するか、新しいクエリを貼り付けます。 エディターは、編集中に構文と構造を自動的に検証し、以下を確認します。
エディターで、不足している必須要素やサポートされていない
<link-entity>の使用状況などの問題が検出されると、明確なエラー メッセージが表示されるので、保存する前に修正できます。FetchXML クエリが有効されたら、[ 適用 ] を選択してフィルターを変換し、オフライン プロファイルを 保存します 。
Important
FetchXML を編集した後は、常に [適用 ] を選択し 、[保存] を選択します。 保存しない場合、変更は破棄されます。
保存後、オフライン プロファイルはカスタム FetchXML フィルターを使用してデータ同期を行います。クエリでビジュアル ビルダーでサポートされている機能のみが使用されている場合、これらのフィルターは式ビルダー UI に引き続き表示されます。 高度な FetchXML のみの機能を使用すると、ビジュアル フィルター UI でレンダリングされない可能性があります。 FetchXML エディターを使用して、そのフィルターに対する今後の編集を行います。
ベスト プラクティス
- 大規模なデータセットに
latematerialize="true"やhint="union"などのパフォーマンス ヒントを適用します。 - 保存する前に、組み込みのエディター チェックを使用して FetchXML を検証します。
- FetchXML の変更を適用した直後にオフライン プロファイルを保存します。
-
link-type="any"やlink-type="not any"などのオフライン プロファイルには、サポートされている FetchXML コンストラクトのみを使用します。 - オフライン フィルターでの
innerやouterなど、サポートされていない結合の種類は避けてください。 - フィルター句は、クエリあたり 500 句の制限の下に保持します。
- 検証エラーは無視しないでください。 クエリは正しい形式で完結している必要があります。
制限事項
- クエリは、
<fetch>ルート要素で始まり、少なくとも 1 つの<entity>要素を含める必要があります。 - サポートされている FetchXML 要素のみが許可されます。 不明またはサポートされていないタグは、検証エラーをトリガーします。
- 要素は、適切な親子入れ子規則に従う必要があります。
-
<link-entity>内部<filter>link-type="any"またはlink-type="not any"を使用する必要があります。 内部結合と外部結合はサポートされていません。 - FetchXML
<attribute>タグは、オフライン同期での列の選択には使用されません。代わりに、[ 列のフィルター] オプションを使用します。 - オフライン プロファイルでは、
pageやcountなどの明示的な改ページ属性は無視されます。 - クエリは最大 500 個のフィルター句に制限されます。