FetchXML クエリビルダー

<FetchXmlBuilder> 誰もFetchXMLを書かずにFetchXMLクエリを編集します。実際に人々がアクセスする言語の部分―テーブル、返される列、行のソート方法、条件やネストされたグループのフィルターツリー――をカバーし、関連するテーブルを結合し、集約し、構築したものを実行します。

試してみて

この環境のメタデータに対する実際のコンポーネントです。テーブルを選び、カラムや条件を追加し、関連するテーブルに加入し、FetchXMLパネルが追いつくのを見守り、実行ボタンを押してクエリが何と一致するか確認してください。

Reactの例 ブレイザーの例 React TypeScript Razor
クエリ オプション FetchXML
表
Account (account)Contact (contact)Opportunity (opportunity) クエリが読み取るテーブル。それを変更すると、新しいテーブルには名前のない列名とソート順が消去されます。
柱
行自体ではなく、行全体の合計とカウントを返します。各列は、行間で計算された値やグループ分け対象を伝え、名前も付けなければなりません。なぜなら、集計自体には列名がないためです。集計クエリは最大50,000行まで読み込み、それを超えて失敗します。 編集欄
Email (emailaddress1) この列の名前が戻ってきます。空欄のままであれば、連結カラムの場合は関連テーブルの別名が付い、独自の名前で戻ってきます。 列を削除
Full Name (fullname) この列の名前が戻ってきます。空欄のままであれば、連結カラムの場合は関連テーブルの別名が付い、独自の名前で戻ってきます。 列を削除
ソート
編集:並べ替え
Full Name (fullname) 上昇下降 前進しろ 下に降りて ソートを削除
フィルター
眺めから始めましょう フィルターを追加 関連エンティティの追加
フィルターは使わず、すべての行が返されます。
戻す最大行数。空欄は制限なし。 Dataverseに、合計を示すために何行が一致しているか、返すページ数を尋ねます。カウントは5,000で止まり、それを超えると回答は制限を超えたと報告され、回数は報告されません。 クエリを部分に分割し、結果を再構成します。多くの結合や多くの検索・計算カラムがあるクエリで試す価値があります。単純なクエリを遅くすることがあります。 SQL Serverに渡します。これらはMicrosoftサポートが推奨した場合にのみ適用してください。誤ったヒントはクエリのパフォーマンスに大きなダメージを与える可能性があります。
ここにFetchXMLを貼り付けるか編集してください。入力を止めてすぐに読み、上のエディタがそこから再構築されます。
結果
実行クエリ

FetchXMLBuilder とは違います

このページは コンポーネントについてです。 FetchXMLBuilder は、サーバー側の呼び出し者が手作業でクエリを作成するために、同じXMLをコードで構成するC#クラスです。それらは同じものを生成し、どちらも互いに必要ありません。

メタデータは必須であり、任意ではありません

すべてのテーブル、列、関係は、環境が実際に持っているものから選ばれます。これは意図的です。手書きで入力した論理名がFetchXMLを生成し、完璧に解析しますが、Dataverseでは失敗します。これは誰かに渡すには最悪のエラーです。 usePowerPortalsProFetchXmlMetadata フックはビルダーをフレームワークのキャッシュされたメタデータエンドポイントに配線し、ピッカーは同じページのグリッドがすでに取得したものを共有します。

Blazorは配線を必要としません。 <FetchXmlBuilder> ポータルのメタデータサービス自体を解決し、同じキャッシュされたエンドポイントを読み込むため、ピッカーはページ上のグリッドがすでに取得したものも共有します。

クエリのラウンドトリップ

ビルダーはFetchXMLをドキュメントモデルに解析し、それを書き戻します。エディターが存在しないもの(新しいプラットフォームの属性や別のツールで書かれた要素など)は、ロード時に削除されることなく引き継がれるため、クエリを開いて保存しても静かに一部が失われることはありません。

保存されたクエリにとって何を意味するのか

フォーマットは保持されません。インデントや属性の引用は正規化されるため、ビルダーを通じて再保存されたクエリは同じテキストではなく同じクエリとなります。

クエリの提供

読む方法は3つあり、すべて同じリーダーを通して行われます:

  • valueプロップ。制御されたコンポーネント用のonChangeを供給するか、defaultValueを使い、その状態を建築業者に任せるか。
  • FetchXMLパネルです。 クエリを貼り付けるかタイプすると、入力を止めてから約1秒後にエディタが自動的に再構築されます。
  • 保存されたビュー。Filtersヘッダーの ビューから始め 、テーブルのビューを一覧にし、選択したものからクエリ全体を取ってきます。それはコピーであり、ビューには何も書き戻されません。

届いたものはまず確認されます。歪んだXMLは行と列で報告され、編集者が書かれたものとは異なるものを見せるようなものも同様に報告されます。例えば、エディタが知らない演算子やリンクタイプ、テーブル名のないクエリなどです。それらは完全に拒否され、画面上のクエリはそのまま残されます。それ以外はすべて報告され、適用されます:スペルミスされた要素や属性、エイリアスを共有する2つのテーブル、何も宣言されないエイリアスから読み取る条件などです。

関連表

ジョインはリレーションシップピッカーから追加されるため、 from 列と to カラムはメモリではなくリレーションシップから得られます。ジョインが何を貢献できるかは、その型によって異なります。

  • 返却タイプ ( inner、 outer 、 matchfirstrowusingcrossapply )は関連するテーブルの列を戻し、それらの列を投影し、ソートし、比較できるようにします。
  • フィルタリングタイプ ( exists、 in、 any、 not any 、 all )は、行を最大一度だけ返し、関連する列は一切返しません。エディタはエイリアスに切り替えるとエイリアスを外し、名前は別のジョインのために空いてあります。
  • 関連列がない場合 、リンクタイプではなくプリセットです。FetchXMLにはリンクタイプがないため、エディタはプラットフォームが期待する結合キーに対して外側の結合とnullテストを書き込み、両者を連携させます。

「すべて」について

FetchXMLのallは名前の通りの意味ではなく、フィルターを満たしない関連する行を持つ行をマッチングし、not allは「anyと同等」として文書化されています。各型は名前ではなく、何をするかでラベル付けされ、フィルターグループに対するInvert Conditionアクションは、通常求められる読み取りを表現します。

フィルターツリーの扱い方

フィルターとは 、条件 の集合と、またはを組み合わせた もので、グループはクエリが必要とする深さまで内嵌子にされます。ツリー内の4つのポイントを知っておく価値があります。なぜなら、それぞれがFetchXMLが尋ねにくい質問に答えるからです。

  • 逆変換 は、群内のすべての条件をその逆の条件に置き換え、 と を交換します。これは一つのリンクタイプに対して存在します all 。これは「関連するすべての行が一致する」という意味ではなく、フィルターを満たし ない 関連行と一致することを意味します。したがって直感的な読み方はまず逆さまを意味します。この方法は、以下のすべての条件に真の逆がある場合のみ提供されます。ほとんどの日付演算子には逆がなく、フィルターの一部を逆にすると逆に見え、間違った行に合致します。
  • Compareは 値に対してではなく、ある列を別のカラムと比較する — FetchXMLの valueofです。6つの演算子がこれを許可し、プラットフォームは残りを完全に拒否するため、そのモードの行中は演算子リストが狭まります。候補はすべての結合テーブルから出ます。なぜなら、条件は結合の別名を付けることで関連する列に到達するためです。
  • ユニオンヒントは、テーブル間でORを付ける1つのクエリではなく、個別のクエリの合併としてグループを動かします。これはShape SQLではうまくインデックスできません。グループの条件が異なる関連テーブルのカラムをテストする場合に設定する価値があります。クエリは1つしか持たない場合もあります。
  • ビューから始める と、保存されたビューのクエリ(テーブル、列、ソート、条件)がエディタにコピーされます。ビュー自体には何も書き戻されません。

まだ完成していない列

演算子が必要とする値が欠けている場合、必須で空欄のエイリアス、または他の列と共有されるエイリアスが示されます。これら3つすべてがFetchXMLを生成し、解析は完璧に行われましたが失敗するか、間違った行を静かに返すため、クエリ実行時に見つけられるようにせず、エディタがそれを示します。値を必要としない演算子、例えば Contains data や Todayは単独で完成しており、決してマークされません。

集約クエリ

「Columns」セクションで 「Aggregate 」をオンにすると、各列が何を貢献するかを示します。行間で計算された値、またはグループ分けされているものです。提供される機能はカラムの種類に絞られ、エイリアスは必須となり自動的に埋められます。グループ化された日付列は日付部分を得て、ソートもエイリアスに切り替わります。なぜなら、集約クエリの行はグループ化され、計算された値で並べ替えることができないためです。

allowAggregate={false} これは、合計ではなく行を読むホストに対してスイッチを取り消します。つまり、1回に1つのレコードで評価されるルール、保存されたフィルター、計算された値の単一行が答えにならない場所などです。これは無効ではなく存在しているのではなく、クエリの変更が不要なため、戻ってきます。唯一の例外は 、すでに 集約されているクエリです。プロップの設定方法に関わらずコントロールを保持するため、FetchXMLパネルに貼り付けられたコントロールは通常のクエリに戻すことができます。

AllowAggregate="false" Blazorでも同じ例外があります。すでに集約されたクエリはコントロールを保持するため、FetchXMLタブに貼り付けられたクエリは通常のクエリに戻すことができます。

その一部を取り付ける

すべてのセクションは電源を切ることができ、セクションは別のレイアウトで個別にエクスポートされます。 <FetchXmlBuilderProvider> をマウントして FetchXml*Section コンポーネントを自分で配置してください。セクションを省略するとUIが失われますが、基盤となるFetchXMLは消えません。クエリの列は手つかず columns: falseせずに残ります。

Blazorは同じセットを Sections レコードとして取り、セクション自体がコンポーネントとして機能します。 FetchXmlBuilderState をカスケードし、レイアウトが必要な場所に FetchXml*Section コンポーネントを配置します。非表示にするとエディターは消え、クエリは消えません。

表の制限

allowedTablesテーブルピッカーはリストリストの論理名に絞り込まれます。これは、ポータルが公開する数少ないテーブルを検索するレポートビルダーのような、環境全体をクエリする必要のないサーフェスに対してです。それを省くと、すべてのテーブルが提供されます。選択可能なものを絞り込み、表示できるものを絞り込むのではなく、リスト外のテーブル名をすでに付けているクエリは静かに書き換えるのではなく、関連するテーブルはジョインが言及する場所で表示名で名付けられます。ジョイン自体は制限されません。なぜなら、すでに選ばれたテーブルのプロパティである関係性に従うからです。

AllowedTables これはブレイザー版の同等であり、表示できるものを正確に同じ方法で表示するよりも選択可能なものを絞り込みます。

クエリの実行

供給 renderResults を行えば、ビルダーは実行ボタン付きの結果パネルを作成し、クエリがテーブルとその列に名前を付け、赤いフィールドがない場合に押し付けるタイミングを決めます。行を表示するには、ビルダーが意図的に持たないデータクライアントが必要です。したがって、結果の見た目は通常、フレームワーク自身のクエリに対する自分の <MainGrid> もので、ポータル上で表示されます。プロップを外すとパネルは存在しません。

Blazorでは、 RenderResults フラグメントが提供されると同じパネルが表示され、返すランナブルクエリはテーブル、FetchXML、そして列の名前を返します。フラグメントを外すとパネルは存在しません。

API

反応してください ブレイザー

FetchXmlBuilder クラス

パラメータ

名称
種類
デフォルト
概要
AllowAggregatebool
True
クエリが集約されるかどうか。オファーを隠す場合は、そうでない場合もあります。
AllowedTablesIReadOnlyList<string>?
ピッカーが提供するテーブルだけ、あるいは全員が席を取らない。
FetchXmlstring?
クエリが編集されている。
ReadOnlybool
False
クエリを表示し、変更を申し出ずに示します。
RenderResultsRenderFragment<FetchXmlRunnableQuery>?
クエリが返した行を描き、結果セクションも追加します。
SectionsFetchXmlBuilderSections
どのセクションを表示するか。結果以外はすべて、どこかに描く場所が必要だからです。
ShowLogicalNamesbool
True
テーブルや列が表示名の隣に論理名で名前を付けているかどうかは — アカウント名(名前) と結合は、その列が戻る別名を示します。オン・バイ デフォルト;表示名だけでデータを知るユーザーに対しては 、 false に設定してください。 論理的な名前は何の意味も持たない。
Tablestring?
クエリを1つのテーブルにピン留めするため、テーブルピッカーは表示されますが無効化されます。
名称: AllowAggregate
種類: bool
デフォルト: True
概要: クエリが集約されるかどうか。オファーを隠す場合は、そうでない場合もあります。
名称: AllowedTables
種類: IReadOnlyList<string>?
概要: ピッカーが提供するテーブルだけ、あるいは全員が席を取らない。
名称: FetchXml
種類: string?
概要: クエリが編集されている。
名称: ReadOnly
種類: bool
デフォルト: False
概要: クエリを表示し、変更を申し出ずに示します。
名称: RenderResults
種類: RenderFragment<FetchXmlRunnableQuery>?
概要: クエリが返した行を描き、結果セクションも追加します。
名称: Sections
種類: FetchXmlBuilderSections
概要: どのセクションを表示するか。結果以外はすべて、どこかに描く場所が必要だからです。
名称: ShowLogicalNames
種類: bool
デフォルト: True
概要: テーブルや列が表示名の隣に論理名で名前を付けているかどうかは — アカウント名(名前) と結合は、その列が戻る別名を示します。オン・バイ デフォルト;表示名だけでデータを知るユーザーに対しては 、 false に設定してください。 論理的な名前は何の意味も持たない。
名称: Table
種類: string?
概要: クエリを1つのテーブルにピン留めするため、テーブルピッカーは表示されますが無効化されます。

イベント

名称
種類
概要
FetchXmlChangedEventCallback<string>
クエリが編集変更されるたびに提出されます。
名称: FetchXmlChanged
種類: EventCallback<string>
概要: クエリが編集変更されるたびに提出されます。