カスタム コードでのエンティティ検索定義の再利用
Unified Service Desk のエンティティ検索は、開発者がプログラムでカスタム コードに既存のエンティティ検索定義を使用して Microsoft Dataverse データを検索できるように、開発者向けのサービスとして公開されています。 Unified Service Desk のエンティティ検索は、FetchXML を使用して Dataverse プラットフォーム Web サービスに対してクエリを出し、データを返します。 エンティティ検索の定義の詳細については、「Unified Service Desk のエンティティ検索を使用したデータ検索 」を参照してください。
エンティティ検索を設定するときに、検索結果セット全体を返すか、パフォーマンスを高速化するためにページング Cookie を使用して大きなデータセットの FetchXML 結果をページングするかを選択することができます。 FetchXML でページング Cookie を使用する方法の詳細については、FetchXML による大量の結果セットのページング を参照してください。
コードではデータを返すために FetchXML 定義ではなくエンティティ検索名を使用するため、エンティティ検索名を変更せずに Unified Service Desk のエンティティ検索の基になる FetchXML クエリ定義を更新すると、カスタム コントロール コードの更新、再コンパイル、クライアント コンピューター上への再配布を行う必要がありません。
新しい EntitySearchRequest メッセージを使用して要求を作成し、要求をパラメーターとして EntitySearchService.EntitySearchResponse}メソッドに渡して、応答を取得します (EntitySearchResponse)。
EntitySearchRequest オブジェクトの作成
EntitySearchRequest メッセージがオーバーロードされるので、レコードがどのように返されることを望むかに応じて、次の 3 つのコンストラクターのいずれかを使用して要求オブジェクトを作成する必要があります。 これら 3 つのコンストラクターのいずれかを使用せずに要求オブジェクトを作成することはサポートされていません。 要求オブジェクトでエンティティ検索名を使用する前に、Dataverse インスタンスの Unified Service Desk でエンティティ検索が既に定義されていることを確認します。
エンティティ検索名だけを使用して要求オブジェクトを作成します。 エンティティ検索の結果としてすべてのレコードを返すには、このコンストラクターを使用します。
EntitySearchRequest mySearchRequest = new EntitySearchRequest(string entitySearchName);
エンティティ検索名と返されるレコードの最大数を使用して要求オブジェクトを作成します。 エンティティ検索の結果として返されるレコードの数を制限するには、このコンストラクターを使用します。
EntitySearchRequest mySearchRequest = new EntitySearchRequest(string entitySearchName, int maxCount);
チップ
すべてのレコードを返すには、
maxCount
パラメーターを 0 に指定します。エンティティ検索名、ページごとの数、ページ番号、ページング Cookie を使用して要求オブジェクトを作成します。 パフォーマンスを高速化するために大きなデータセットをページで返すには、このコンストラクターを使用します。
pageCount
パラメーターは、ページごとに返されるレコードの数を定義します。pageNumber
パラメーターは、データを返すための結果セットのページ番号を定義します。 たとえば、クエリが 500 件のレコードを返す場合、pageCount
を 50 と指定して 1 ページに 50 件のレコードを返すことができ、これは 10 ページ分のデータとなることを意味します (50 件のレコード * 10 ページ = 500 件)。 レコード 100 - 150 を返すには、pageNumber
の値を 3 に指定します。 結果セットの最初のページを取得するには、pageCookie
をempty
に指定する必要があります。EntitySearchRequest mySearchRequest = new EntitySearchRequest(string entitySearchName, int pageCount, int pageNumber, string pageCookie);
Note
ページで結果を取得するためにこのコンストラクターを使用して要求オブジェクトを実行すると、反応オブジェクトの EntitySearchResponse.HasMoreRecords プロパティがさらにレコードがあるかどうかを示します (値=1)。 また、EntitySearchResponse.PageCookie プロパティの値が現在の結果から返されたページング Cookie に設定されます。
要求オブジェクトの実行
EntitySearchService.EntitySearchResponse})メソッドを使用して、前のセクションで説明したように作成された要求オブジェクトを実行します。 このメソッドは EntitySearchRequest オブジェクトを実行し、エンティティ検索結果とともに EntitySearchResponse オブジェクトを返します。
既存のエンティティ検索を再利用してページで結果を取得する方法を次のコード サンプルに示します。
// Define parameters for the entity search request object.
string entitySearchName = "Sample Entity Search"; // Name of the entity search record defined in Unified Service Desk
int pageCount = 10; // Retrieve 10 records per page.
int pageNumber = 0;
string pageCookie = String.Empty; // Retrieve the first page of the result set.
var entityService = AifServiceContainer.Instance.GetService<IEntitySearchService>();
// Create a request object.
EntitySearchRequest entitySearchRequest = new EntitySearchRequest(searchName, pageCount, pageNumber, pageCookie);
bool hasMoreRecords = true;
while (hasMoreRecords)
{
entityService.GetEntitySearchResults(entitySearchRequest, (entitySearchResponse) =>
{
foreach (Entity e in entitySearchResponse.Entities)
{
Console.WriteLine("Entity with id:\"{0}\" retrieved", e.Id);
}
if (entitySearchResponse.HasMoreRecords)
{
pageNumber++;
pageCookie = entitySearchResponse.PageCookie;
entitySearchRequest = new EntitySearchRequest(searchName, pageCount, pageNumber, pageCookie);
}
else
{
hasMoreRecords = false;
}
});
}