---
title: "ウォークスルー:コンタクトの入手方法"
slug: "walkthrough--getting-contacts"
abstract: "Sitecore xConnectから連絡先とやり取りを取得する方法。"
---
# ウォークスルー:コンタクトの入手方法

このウォークスルーは「[エクステンディング・ザ・xConnectコレクション」モデルウォークスルーシリーズ](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/extending-the-xconnect-collection-model-walkthrough-series.html "Extending the xConnect collection model walkthrough series")の第3部です。このウォークスルーを完了するには、まずパート[1](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/walkthrough--creating-a-contact-and-an-interaction.html "Walkthrough: Creating a contact and an interaction")と [パート2](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/walkthrough--setting-contact-and-interaction-facets.html "Walkthrough: Setting contact and interaction facets")をクリアする必要があります。

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

-   連絡先識別子から連絡先を取得する
-   連絡先のやり取りを取得
-   交流を得ましょう

> !注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 <xConnect instance>\\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";
    
     // From the previous xConnect walkthrough
     const string CONTACT\_IDENTIFIER = "myrtlesitecore???";
    
     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<IHttpClientModifier> clientModifiers = new List<IHttpClientModifier>();
     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
     {
     // Get a known contact
     IdentifiedContactReference reference = new IdentifiedContactReference(
     "twitter",
     CONTACT\_IDENTIFIER
     );
    
     Contact existingContact = await client.GetAsync<Contact>(
     reference,
     new ContactExpandOptions(new string {
     PersonalInformation.DefaultFacetKey
     })
     );
    
     PersonalInformation existingContactFacet = existingContact.GetFacet<PersonalInformation>(PersonalInformation.DefaultFacetKey);
    
     Console.WriteLine("Contact ID: " + existingContact.Id.ToString());
     Console.WriteLine("Contact Name: " + existingContactFacet.FirstName);
    
     Console.ReadLine();
     }
     catch (XdbExecutionException ex)
     {
     // Deal with exception
     }
     }
     }
     }
    }
    
2.  CERTIFICATE\_THUMBPRINT、XCONNECT\_URL、CONTACT IDENTIFIER定数を編集してください。
    
3.  Program.csファイルを保存してください。
    
4.  **F5**を押してアプリを起動します。接続が確立されると、アプリはターミナルに次のように書き込みます:
    
    -   連絡先ID。
    -   連絡先の名前です。
    
    ![A terminal with the contact details in the app output.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/93/sitecore-experience-platform/images/xconn-tut3-code1.png)
    

> !重要ファセットを取得するには、明示的にContactExpandOptionsの一部としてリクエストしなければなりません。 ContactExpandOptionsなしでコードを実行するとファセットはNULLになり、使用しようとすると例外エラーが発生します。

> !注外部システムは通常、接触IDを保存するために使われないため、接触IDを受け入れる .Get<Contact> オーバーロードを使うことはまずありません。

## 連絡先のやり取りを取得

接触の相互作用を得るには、Interactionsプロパティ をContactExpandOptionsを設定する必要があります。

連絡先のやり取りを得るには:

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 <xConnect instance>\\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";
    
     // From the previous xConnect walkthrough
     const string CONTACT\_IDENTIFIER = "myrtlesitecore???";
    
     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<IHttpClientModifier> clientModifiers = new List<IHttpClientModifier>();
     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
     {
     // Get a known contact
     IdentifiedContactReference reference = new IdentifiedContactReference(
     "twitter",
     CONTACT\_IDENTIFIER
     );
    
     Contact existingContact = await client.GetAsync<Contact>(
     reference,
     new ContactExpandOptions(new string {
     PersonalInformation.DefaultFacetKey
     })
     {
     Interactions = new RelatedInteractionsExpandOptions(IpInfo.DefaultFacetKey)
     {
     StartDateTime = DateTime.MinValue,
     EndDateTime = DateTime.MaxValue
     }
     }
     );
    
     if (existingContact != null)
     {
     PersonalInformation existingContactFacet = existingContact.GetFacet<PersonalInformation>(PersonalInformation.DefaultFacetKey);
    
     Console.WriteLine("Contact ID: " + existingContact.Id.ToString());
     Console.WriteLine("Contact Name: " + existingContactFacet.FirstName);
    
     var interactions = existingContact.Interactions;
     var i = 0;
    
     Console.WriteLine("Interaction count: " + interactions.Count);
     Console.WriteLine("");
    
     // Cycle through all interactions
     foreach (var interaction in interactions)
     {
     i++;
     var ipInfo = interaction.GetFacet<IpInfo>(IpInfo.DefaultFacetKey);
     Console.WriteLine("Interaction #" + i);
    
     if (ipInfo != null)
     {
     // For each interaction, print out the business name
     // associated with that interaction's IpInfo
     Console.WriteLine("Interaction business name: " + ipInfo.BusinessName);
     }
     }
    
     Console.ReadLine();
     }
    
     Console.ReadLine();
     }
     catch (XdbExecutionException ex)
     {
     // Deal with exception
     }
     }
     }
     }
    }
    
2.  CERTIFICATE\_THUMBPRINT、XCONNECT\_URL、CONTACT IDENTIFIER定数を編集してください。
    
3.  Program.csファイルを保存してください。
    
4.  **F5**を押してアプリを起動します。接続が確立されると、アプリはターミナルに次のように書き込みます:
    
    -   連絡先ID。
    -   連絡先の名前です。
    -   交流の回数。
    -   各やり取りのビジネス名。
    
    ![A terminal with the contact and interaction details in the app output.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/93/sitecore-experience-platform/images/xconn-tut3-code2.png)
    

> !ヒント
> 
> -   StartDateTimeとEndDateTimeのプロパティを調整して、これら2点間の相互作用だけを取得することができます。
>     
> -   Limitプロパティを、見たい相互作用数(最初の相互作用から数えて)に設定できます。
>     

## 交流を得ましょう

やり取りを得るには、連絡先IDとやり取りIDが必要です。また、関連する連絡先や指定した連絡先の側面を取得できるInteractionExpandOptionsも渡せます。

インタラクションを得るには、以下のコードを使用します:

var contactId = Guid.NewGuid();
var interactionId = Guid.NewGuid();

InteractionReference interactionReference = new InteractionReference(contactId, interactionId);

Interaction interaction = client.Get<Interaction>(
 interactionReference,
 new InteractionExpandOptions(new string { IpInfo.DefaultFacetKey })
 {
 Contact = new RelatedContactExpandOptions(new string {
 PersonalInformation.DefaultFacetKey
 })
 }
);

次のウォークスルーで [連絡先ややり取りの検索](https://doc.sitecore.com/xp/ja/developers/93/sitecore-experience-platform/walkthrough--searching-contacts-and-interactions.html "Walkthrough: Searching contacts and interactions")方法を学びましょう。