1. xConnectクライアントAPI (C#)

バッチインデックス作成

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

xConnectは、バッチがxConnectに送信されるたびに、ストレージ レイヤーの同期トークンをインクリメントします。検索の実行時にクライアントのSyncTokenプロパティが設定されている場合、インデックス作成が少なくともその数に追いついた場合にのみ結果が返されます。

大事な

検索結果が返されたときにすべてのバッチがインデックス付けされているという保証は、クライアントインスタンスに対してローカルです。xConnectに並列スレッドでデータを送信すると、クライアントAがクライアントBより先に検索結果を返す可能性があります。

最新の同期トークンは、バッチの結果と共にクライアントに返されます。

await client.SubmitAsync();

var searchSynchronizationToken = client.SyncToken;
メモ

変更の追跡は、デバイス プロファイルでは有効になっていません。

10,000件の取引先担当者を5つのバッチで送信した場合、インデックス作成ワーカーが5番目のバッチまでの変更にインデックスを付けたときに、これらの10,000件の取引先担当者のインデックス作成が完了します。このバッチは、特定の同期トークンで表されます。これらの50,000件の連絡先のインデックス作成が完了したことを確認するには、次のようにします。

  1. 5つのバッチを送信します。

  2. 最終バッチで返されるSyncTokenへの参照を保存します。たとえば、List Managerは同期トークンをリスト定義アイテムに格納します。

  3. インデックス作成が完了したかどうかを確認するコードで、SyncTokenプロパティを保存されたトークンに設定します。

  4. このクライアントを使用してダミー検索を実行します。結果は、インデックス作成が指定された同期トークンに追いついた場合にのみ返されます。

何を検索するかは関係ありません - インデックス作成が少なくとも指定された数に追いつくまで、結果は返されません。 SyncTokenがnullの場合、クライアントはインデックス作成が特定の同期トークンに追いつくのを待たずに、結果がすぐに返されます。

シナリオ: SyncTokenの保存と使用

次のシナリオでは、xConnect クライアント Aが多数のコンタクトを追加し、ListSubscriptionsファセットを設定して新しいリストにサブスクライブします。別のページでは、xConnect クライアント Bがコンタクト検索を使用して、そのリスト内のすべてのコンタクトを返しています。ただし、クライアントBのSyncTokenプロパティは設定されていないため、インデックス作成が完了する前に結果が返され、結果の数は正確になりません。

Two separate operations on contacts could conflict if you don't use a sync token

インデックス作成が完了したときにのみ結果が返されるようにするには、クライアントAに返されたSyncTokenを保存します。たとえば、リストIDのSQLテーブルと、そのリストに追加される連絡先の最新バッチの同期トークンを保持できます。

ジョブID

サブスクリプション リストID

同期トークン

1

A256FE54-9915-4779-AFE1-511B74795DDE

6E26FE54-9915-4779-AFE1-511B74795DDE

検索を実行する前に、次に示すように、SyncTokenプロパティを保存された値に設定します。インデックス作成が完了するまで、結果は返されません。

using Sitecore.XConnect;
using Sitecore.XConnect.Client;
using Sitecore.XConnect.Collection.Model;
using System;
using System.Linq;

namespace Documentation
{
    public class ChangeTracking
    {
        // Async example
        public async void ExampleAsync()
        {
            using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
            {
                // Manually set sync token
                client.SyncToken = Guid.Parse("6e26fe54-9915-4779-afe1-511b74795dde").ToByteArray();

                try
                {
                    var listId = Guid.Parse("a256fe54-9915-4779-afe1-511b74795dde");
                    var query = client.Contacts.Where(c => c.ListSubscriptions().Subscriptions.Any(s => s.ListDefinitionId == listId));

                    // Will only return results when indexing is complete
                    var results = await query.GetBatchEnumerator();
                }
                catch (XdbExecutionException ex)
                {
                    // Handle exception or timeout
                }
            }
        }

        // Sync Example
        public void ExampleSync()
        {
            using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
            {
                // Manually set sync token
                client.SyncToken = Guid.Parse("6e26fe54-9915-4779-afe1-511b74795dde").ToByteArray();

                try
                {
                    var listId = Guid.Parse("a256fe54-9915-4779-afe1-511b74795dde");
                    var query = client.Contacts.Where(c => c.ListSubscriptions().Subscriptions.Any(s => s.ListDefinitionId == listId));

                    // Will only return results when indexing is complete
                    var results = query.GetBatchEnumeratorSync();
                }
                catch (XdbExecutionException ex)
                {
                    // Handle exception or timeout
                }
            }
        }
    }
}
この記事を改善するための提案がある場合は、 お知らせください!