FetchXMLBuilder
FetchXMLBuilderクラスは、FetchXMLクエリをプログラム的に構築・操作するための流暢なAPIを提供します。生のXML文字列を構築する代わりに、強型メソッドを使ってエンティティ、列、フィルター、条件、ソート順序、リンクエンティティを定義できます。
Reactノート
FetchXMLBuilderはサーバーサイドのBlazorユーティリティであり、Reactに相当するものはありません。React呼び出し者はFetchXMLを文字列リテラル(テンプレート文字列)として構成し、それらを直接ppp.retrieveRecordsAsync(fetchXml)に渡します。FetchXMLが届いた後もサーバーが重労働(フィルターの統合、ページング、セキュリティ調整)を担当します。
クエリの作成
空クエリで新しい FetchXMLBuilder を作成するか、既存のFetchXML文字列を解析してください。
// 空のクエリを作成する
var builder = new FetchXMLBuilder();
builder.Fetch.Entity.TableName = "contact";
// あるいは既存のFetchXML文字列を解析することもできます
var builder = new FetchXMLBuilder(existingFetchXml);
列の選択
AddColumnで個別の列を追加するか、すべての列を取得するためにAllColumns = trueを設定してください。設定AllColumns個別に追加された列は削除されます。
// 特定の列を追加してください
builder.Fetch.Entity.AddColumn("fullname");
builder.Fetch.Entity.AddColumn("emailaddress1");
// またはすべての列を取得する
builder.Fetch.Entity.AllColumns = true;
フィルターの追加
AddFilterでエンティティやリンクエンティティにフィルターを追加し、そのフィルターに条件を追加します。各条件は列、演算子、値を指定します。
var filter = builder.Fetch.Entity.AddFilter(LogicalOperator.And);
var condition = filter.AddCondition();
condition.Column = "statecode";
condition.Operator = ConditionOperator.Equal;
condition.Value = "0";
// OR条件群を追加する
var orFilter = builder.Fetch.Entity.AddFilter(LogicalOperator.Or);
var nameCondition = orFilter.AddCondition();
nameCondition.Column = "fullname";
nameCondition.Operator = ConditionOperator.Like;
nameCondition.Value = "%smith%";
var emailCondition = orFilter.AddCondition();
emailCondition.Column = "emailaddress1";
emailCondition.Operator = ConditionOperator.Like;
emailCondition.Value = "%smith%";
関連テーブルへの接続
AddLinkEntityを使って関連するテーブルに参加してください。TableName、From、To、Operatorプロパティを設定してジョインを定義します。フィルターはメインエンティティと同様にリンクエンティティに追加できます。
var linkEntity = builder.Fetch.Entity.AddLinkEntity();
linkEntity.TableName = "account";
linkEntity.From = "accountid";
linkEntity.To = "parentcustomerid";
linkEntity.Operator = JoinOperator.LeftOuter;
linkEntity.Alias = "acct";
// リンクされた表から列を追加してください
linkEntity.AddColumn("name");
// リンクされた表にフィルターを追加してください
var linkFilter = linkEntity.AddFilter();
var linkCondition = linkFilter.AddCondition();
linkCondition.Column = "statecode";
linkCondition.Operator = ConditionOperator.Equal;
linkCondition.Value = "0";
ソート結果
AddSortOrderを使ってソート順を定義します。列名や降順に並べ替えるかどうかを指定することができます。
// フルネームで昇順に並べ替え
builder.Fetch.Entity.AddSortOrder("fullname");
// 下から順に並べ替えてください
builder.Fetch.Entity.AddSortOrder("createdon", descending: true);
ページング
Fetch要素のCount、Page、PagingCookieプロパティでページングを制御します。ReturnRecordCount = true結果に記録総数を含めるように設定してください。
builder.Fetch.Count = 50;
builder.Fetch.Page = 1;
builder.Fetch.ReturnRecordCount = true;
// 次のページでは、ページングクッキーを前の結果から設定してください
builder.Fetch.Page = 2;
builder.Fetch.PagingCookie = previousPagingCookie;
既存のfetchXMLの解析
既存のFetchXML文字列をコンストラクタに渡し、解析・操作します。これはビューやその他のソースからのクエリを修正するのに役立ちます。
var fetchXml = @"<fetch>
<entity name='contact'>
<attribute name='fullname' />
<filter>
<condition attribute='statecode' operator='eq' value='0' />
</filter>
</entity>
</fetch>";
var builder = new FetchXMLBuilder(fetchXml);
// 解析クエリを修正してください
builder.Fetch.Entity.AddColumn("emailaddress1");
builder.Fetch.Entity.AddSortOrder("fullname");
fetchXML文字列の生成
ToString()を呼び出してFetchXML文字列を生成します。出力は決定論的に順序付けられています:属性、次にソート順序、フィルター、リンクエンティティ。各グループ内では、要素はアルファベット順に並べられています。
var fetchXmlString = builder.ToString();
FetchXMLBuilder クラス
性質
名称 | 種類 | デフォルト | 概要 |
|---|---|---|---|
Fetch | FetchElement | クエリのルートフェッチ要素を取得します。 |
Fetch