ウォークスルー
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
このウォークスルーは「 エクステンディング・ザ・xConnectコレクション」モデルウォークスルーシリーズの第4部です。このウォークスルーを完了するには、まずパート1、2、3のウォークスルーをクリアする必要があります。
匿名の連絡先はインデックス化されず、検索もできません。経験データはインデックス化されますが、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になった。
Search連絡先
連絡先を検索するには:
-
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 } } } } }
-
CERTIFICATE_OPTIONSとXCONNECT_URL定数を編集してください。
-
Program.csファイルを保存してください。
-
F5を押してアプリを起動します。接続が確立されると、アプリはターミナルに次のように書き込みます:
- 接触数。
- 接触回数と交流。
- 連絡先数は10時間以上前に更新されました。
- 職種名の連絡先数 Programmer Writer。

!注数字は、前のウォークスルーでプログラムをいつ何回実行したかによって異なります。
Searchインタラクション
相互作用を検索するには:
-
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 } } } } }
-
CERTIFICATE_OPTIONSとXCONNECT_URL定数を編集してください。
-
Program.csファイルを保存してください。
-
F5を押してアプリを起動します。接続が確立されると、アプリはターミナルに次のように書き込みます:
- 接触数。
- 接触回数と交流。
- 連絡先数は10時間以上前に更新されました。
- 職種名の連絡先数 Programmer Writer。
- 各やり取りについて:
- IpInfo面が存在する場合のビジネス名。
- PersonalInfoファセットが存在する場合、そのインタラクションの連絡先の名前です。

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