ウォークスルー

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

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

このウォークスルーは「 エクステンディング・ザ・xConnectコレクション」モデルウォークスルーシリーズの第4部です。このウォークスルーを完了するには、まずパート123のウォークスルーをクリアする必要があります。

匿名の連絡先はインデックス化されず、検索もできません。経験データはインデックス化されますが、xDBインデックスにはIDと同期トークンのみが格納されます。クエリの一部としてファセットを返すためにExpandOptionsを使う場合、そのデータはxDBインデックスではなくxDBコレクションデータベース から来ています。

xConnectは個人識別情報(PII)コンプライアンスを強制する仕組みを提供しますが、使用するかどうかは自分で決める必要があります。ファセットやプロパティがPIISensitiveとマークされている場合、それはインデックス化されておらず、検索もできません。たとえ名前で検索できなくても、連絡先のファーストネームなどのPII機密データを返すことは可能です。

このウォークスルーでは、以下の方法を説明しています:

  • Search連絡先
  • Search インタラクション

!注Sitecore 9.1.0のSitecore.Xdb.Common.Web名前空間では:

  • Certificate**WebRequest**HandlerModifierOptionsCertificate**HttpClient**HandlerModifierOptionsになった。

  • Certificate**WebRequest**HandlerModifierCertificate**HttpClient**HandlerModifierになった。

連絡先を検索するには:

  1. Visual Studio、Solution ExplorerではProgram.csファイルをダブルクリックし、内容を以下のコードに置き換えてください。

    using Sitecore.XConnect; using Sitecore.XConnect.Client; using Sitecore.XConnect.Client.WebApi; using Sitecore.XConnect.Collection.Model; using Sitecore.XConnect.Schema; using Sitecore.Xdb.Common.Web; using System; using System.Collections.Generic; using System.Threading.Tasks;

    namespace Sitecore.Documentation { public class Program { // From \App_Config\AppSettings.config const string CERTIFICATE_OPTIONS = "StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=???";

    // From your installation const string XCONNECT_URL = "https://???XConnect.local";

    private static void Main(string args) { MainAsync(args).ConfigureAwait(false).GetAwaiter().GetResult(); System.Console.ForegroundColor = ConsoleColor.DarkGreen; System.Console.WriteLine(""); Console.WriteLine("END OF PROGRAM."); Console.ReadKey(); }

    private static async Task MainAsync(string args) { CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(CERTIFICATE_OPTIONS);

    var certificateModifier = new CertificateHttpClientHandlerModifier(options);

    List clientModifiers = new List(); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier);

    var collectionClient = new CollectionWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );

    var searchClient = new SearchWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );

    var configurationClient = new ConfigurationWebApiClient( new Uri(XCONNECT_URL + "/configuration"), clientModifiers, new { certificateModifier } );

    var cfg = new XConnectClientConfiguration( new XdbRuntimeModel(CollectionModel.Model), collectionClient, searchClient, configurationClient );

    try { cfg.Initialize();

    // Print xConnect if configuration is valid var arr = new { @" ______ __ ", @" / \ | \ ", @" __ __ | $$$$$$\ ______ _______ _______ ______ _______ _| $$_ ", @"| \ / \| $$ \$$ / \ | \ | \ / \ / \| $$ \ ", @"\$$\/ $$| $$ | $$$$$$\| $$$$$$$\| $$$$$$$\| $$$$$$\| $$$$$$$ \$$$$$$ ", @" >$$ $$ | $$ __ | $$ | $$| $$ | $$| $$ | $$| $$ $$| $$ | $$ __ ", @" / $$$$\ | $$__/ \| $$__/ $$| $$ | $$| $$ | $$| $$$$$$$$| $$_____ | $$| \", @"| $$ \$$\ \$$ $$ \$$ $$| $$ | $$| $$ | $$ \$$ \ \$$ \ \$$ $$", @" \$$ \$$ \$$$$$$ \$$$$$$ \$$ \$$ \$$ \$$ \$$$$$$$ \$$$$$$$ \$$$$ " }; Console.WindowWidth = 160; foreach (string line in arr) Console.WriteLine(line);

    } catch (XdbModelConflictException ce) { Console.WriteLine("ERROR:" + ce.Message); return; }

    // Initialize a client using the validated configuration using (var client = new XConnectClient(cfg)) { try { var results0 = client.Contacts.ToEnumerable().Count();

    Console.WriteLine("Total contacts: " + results0.ToString());

    // Use InteractionsCache instead of // client.Contacts.Where(x => x.Interactions.Any()) // as not all search providers support joins var results = await client.Contacts.Where(c => c.InteractionsCache().InteractionCaches.Any()).GetBatchEnumerator();

    Console.WriteLine("Contacts with interactions: " + results.TotalCount);

    var results2 = await client.Contacts.Where(c => c.LastModified > DateTime.UtcNow.AddHours(-10)).GetBatchEnumerator();

    Console.WriteLine("Updated 10hrs ago: " + results2.TotalCount);

    var results3 = await client.Contacts.Where(c => c.GetFacet().JobTitle == "Programmer Writer").GetBatchEnumerator();

    Console.WriteLine("Programmer Writers: " + results3.TotalCount);

    var results4 = await client.Interactions.Where(i => i.EndDateTime > DateTime.UtcNow.AddHours(-10)).GetBatchEnumerator();

    Console.WriteLine("Interactions < 10hrs old: " + results4.TotalCount);

    Console.ReadKey(); } catch (XdbExecutionException ex) { // Deal with exception } } } } }

  2. CERTIFICATE_OPTIONSとXCONNECT_URL定数を編集してください。

  3. Program.csファイルを保存してください。

  4. F5を押してアプリを起動します。接続が確立されると、アプリはターミナルに次のように書き込みます:

    • 接触数。
    • 接触回数と交流。
    • 連絡先数は10時間以上前に更新されました。
    • 職種名の連絡先数 Programmer Writer。
    A terminal with the contact details in the app output.

    !注数字は、前のウォークスルーでプログラムをいつ何回実行したかによって異なります。

相互作用を検索するには:

  1. Visual Studio、Solution ExplorerではProgram.csファイルをダブルクリックし、内容を以下のコードに置き換えてください。

    using Sitecore.XConnect; using Sitecore.XConnect.Client; using Sitecore.XConnect.Client.WebApi; using Sitecore.XConnect.Collection.Model; using Sitecore.XConnect.Schema; using Sitecore.Xdb.Common.Web; using System; using System.Collections.Generic; using System.Threading.Tasks;

    namespace Sitecore.Documentation { public class Program { // From \App_Config\AppSettings.config const string CERTIFICATE_OPTIONS = "StoreName=My;StoreLocation=LocalMachine;FindType=FindByThumbprint;FindValue=???";

    // From your installation const string XCONNECT_URL = "https://???XConnect.local";

    private static void Main(string args) { MainAsync(args).ConfigureAwait(false).GetAwaiter().GetResult(); System.Console.ForegroundColor = ConsoleColor.DarkGreen; System.Console.WriteLine(""); Console.WriteLine("END OF PROGRAM."); Console.ReadKey(); }

    private static async Task MainAsync(string args) { CertificateHttpClientHandlerModifierOptions options = CertificateHttpClientHandlerModifierOptions.Parse(CERTIFICATE_OPTIONS);

    var certificateModifier = new CertificateHttpClientHandlerModifier(options);

    List clientModifiers = new List(); var timeoutClientModifier = new TimeoutHttpClientModifier(new TimeSpan(0, 0, 20)); clientModifiers.Add(timeoutClientModifier);

    var collectionClient = new CollectionWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );

    var searchClient = new SearchWebApiClient( new Uri(XCONNECT_URL + "/odata"), clientModifiers, new { certificateModifier } );

    var configurationClient = new ConfigurationWebApiClient( new Uri(XCONNECT_URL + "/configuration"), clientModifiers, new { certificateModifier } );

    var cfg = new XConnectClientConfiguration( new XdbRuntimeModel(CollectionModel.Model), collectionClient, searchClient, configurationClient );

    try { cfg.Initialize();

    // Print xConnect if configuration is valid var arr = new { @" ______ __ ", @" / \ | \ ", @" __ __ | $$$$$$\ ______ _______ _______ ______ _______ _| $$_ ", @"| \ / \| $$ \$$ / \ | \ | \ / \ / \| $$ \ ", @"\$$\/ $$| $$ | $$$$$$\| $$$$$$$\| $$$$$$$\| $$$$$$\| $$$$$$$ \$$$$$$ ", @" >$$ $$ | $$ __ | $$ | $$| $$ | $$| $$ | $$| $$ $$| $$ | $$ __ ", @" / $$$$\ | $$__/ \| $$__/ $$| $$ | $$| $$ | $$| $$$$$$$$| $$_____ | $$| \", @"| $$ \$$\ \$$ $$ \$$ $$| $$ | $$| $$ | $$ \$$ \ \$$ \ \$$ $$", @" \$$ \$$ \$$$$$$ \$$$$$$ \$$ \$$ \$$ \$$ \$$$$$$$ \$$$$$$$ \$$$$ " }; Console.WindowWidth = 160; foreach (string line in arr) Console.WriteLine(line);

    } catch (XdbModelConflictException ce) { Console.WriteLine("ERROR:" + ce.Message); return; }

    // Initialize a client using the validated configuration using (var client = new XConnectClient(cfg)) { try { var results0 = client.Contacts.ToEnumerable().Count();

    Console.WriteLine("Total contacts: " + results0.ToString());

    var results = await client.Contacts.Where(c => c.InteractionsCache().InteractionCaches.Any()).WithExpandOptions(new ContactExpandOptions(PersonalInformation.DefaultFacetKey) { Interactions = new RelatedInteractionsExpandOptions(IpInfo.DefaultFacetKey) { EndDateTime = DateTime.MaxValue, StartDateTime = DateTime.MinValue } }) .GetBatchEnumerator();

    Console.WriteLine("Contacts with interactions: " + results.TotalCount);

    var results2 = await client.Contacts.Where(c => c.LastModified > DateTime.UtcNow.AddHours(-10)).GetBatchEnumerator();

    Console.WriteLine("Updated 10hrs ago: " + results2.TotalCount);

    var results3 = await client.Contacts.Where(c => c.GetFacet().JobTitle == "Programmer Writer").GetBatchEnumerator();

    Console.WriteLine("Programmer Writers: " + results3.TotalCount);

    var results4 = await client.Interactions.Where(i => i.EndDateTime > DateTime.UtcNow.AddHours(-10)) .WithExpandOptions(new InteractionExpandOptions(new string { IpInfo.DefaultFacetKey }) { Contact = new RelatedContactExpandOptions(PersonalInformation.DefaultFacetKey) } ).GetBatchEnumerator();

    Console.WriteLine("Interactions < 10hrs old: " + results4.TotalCount);

    int interactionNumber = 0;

    // Enumerate through batches of 200 while (await results4.MoveNext()) { // Loop through interactions in current batch foreach (var interaction in results4.Current) { interactionNumber++;

    Console.WriteLine("Interaction #" + interactionNumber);

    var ipInfoFacet = interaction.GetFacet(IpInfo.DefaultFacetKey);

    if (ipInfoFacet != null) { Console.WriteLine("Interaction business name: " + ipInfoFacet.BusinessName); } else { Console.WriteLine("No business name available."); }

    var contact = interaction.Contact;

    if (contact != null) { var realContact = contact as Contact;

    var personal = realContact.GetFacet(PersonalInformation.DefaultFacetKey);

    if (personal != null) { Console.WriteLine("Interaction contact name: " + personal.FirstName); } else { Console.WriteLine("No contact name available."); } }

    Console.WriteLine(); } } Console.ReadKey(); } catch (XdbExecutionException ex) { // Deal with exception } } } } }

  2. CERTIFICATE_OPTIONSとXCONNECT_URL定数を編集してください。

  3. Program.csファイルを保存してください。

  4. F5を押してアプリを起動します。接続が確立されると、アプリはターミナルに次のように書き込みます:

    • 接触数。
    • 接触回数と交流。
    • 連絡先数は10時間以上前に更新されました。
    • 職種名の連絡先数 Programmer Writer。
    • 各やり取りについて:
      • IpInfo面が存在する場合のビジネス名。
      • PersonalInfoファセットが存在する場合、そのインタラクションの連絡先の名前です。
    A terminal with the contact and interaction details in the app output.

次のウォークスルーで カスタムファセットやイベントの作成方法を学びましょう。

この記事を改善するための提案がある場合は、 お知らせください!