---
title: "ファセッツと接触する"
slug: "get-contact-with-facets"
abstract: "コンタクトまたはコンタクトのバッチで返すファセットを指定する方法。"
---
# ファセッツと接触する

ContactExpandOptionsにフェイセットキーの配列を渡して、接触または複数の接触で返すべき面を指定する必要があります。存在すれば必ず戻される面はConsentInfoとMergeInfoだけです。

以下の例では、デフォルトのEmailAddressList面とAddressList面が連絡先展開オプションの一部として要求されています。

var contacts = await client.GetAsync<Contact>(references, new Sitecore.XConnect.ContactExpandOptions(EmailAddressList.DefaultFacetKey, AddressList.DefaultFacetKey));

ファセットがそのコンタクトのファセットが存在する場合、そのファセットがそのコンタクトのFacets辞書に追加されます。リクエストしたファセットがモデル上で定義されていなければ、リクエスト実行時にxConnectは例外をスローします。コンタクトまたはコンタクトが返されたら、コンタクトの .GetFacet<T>() メソッドを使ってファセットオブジェクトを取得します。

EmailAddressList myFacetObject = contact.GetFacet<EmailAddressList>(EmailAddressList.DefaultFacetKey);

メソッド .GetFacet<T>() は、以下の場合にnullを返します:

-   接触が最初に回収された際、 ContactExpandOptions の一部としてこのファセットは求められていませんでした
-   ファセットは特定の接触に対して設定されていません
-   タイプとキーの組み合わせは正しくありません

以下の例は、EmailAddressList面の取得方法と作業方法を示しています。

using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect.Operations;
using System;
using System.Collections.Generic;
using System.Linq;
using Sitecore.XConnect;
using Sitecore.XConnect.Client;

namespace Documentation
{
 public class GetFacetsMultiple
 {
 // Asyc example
 public async void ExampleAsync()
 {
 using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 try
 {
 var references = new List<IEntityReference<Sitecore.XConnect.Contact>>()
 {
 // Contact ID
 new ContactReference(new Guid("{A2814105-1F45-E611-52E6-34E6D7117DCB}")),
 // Username
 new IdentifiedContactReference("twitter", "myrtlesitecore"),
 // Ad network ID
 new IdentifiedContactReference("twitter", "AB973934540244")
 };

 // Get a reference to the facet by name
 string emailsFacetKey = Sitecore.XConnect.Collection.Model.CollectionModel.FacetKeys.EmailAddressList;

 // Pass the facet name into the ContactExpandOptions constructor
 var contactsTask = client.GetAsync<Sitecore.XConnect.Contact>(references,
 new ContactExpandOptions(emailsFacetKey)
 {
 });

 IReadOnlyCollection<IEntityLookupResult<Contact>> contacts = await contactsTask;

 if (contacts != null && contacts.Any())
 {
 foreach (var c in contacts)
 {
 // For each contact, retrieve the facet - will return null if contact does not have this facet set
 EmailAddressList emailsFacetData = c.Entity.GetFacet<EmailAddressList>(emailsFacetKey);

 if (emailsFacetData != null)
 {
 // Do something with data - e.g. display in view
 EmailAddress preferred = emailsFacetData.PreferredEmail;
 }
 }
 }
 }
 catch (XdbExecutionException ex)
 {
 // Handle exceptions
 }
 }
 }

 // Sync example
 public void Example()
 {
 using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 try
 {
 var references = new List<IEntityReference<Contact>>()
 {
 // Contact ID
 new ContactReference(new Guid("{A2814105-1F45-E611-52E6-34E6D7117DCB}")),
 // Username
 new IdentifiedContactReference("twitter", "myrtlesitecore"),
 // Ad network ID
 new IdentifiedContactReference("twitter", "AB973934540244")
 };

 // Get a reference to the facet by name
 string emailsFacetKey = CollectionModel.FacetKeys.EmailAddressList;

 // Pass the facet name into the ContactExpandOptions constructor
 IReadOnlyCollection<IEntityLookupResult<Contact>> contacts = client.Get<Contact>(references, new ContactExpandOptions(emailsFacetKey)
 {
 });

 if (contacts != null && contacts.Any())
 {
 foreach (var c in contacts)
 {
 // For each contact, retrieve the facet - will return null if contact does not have this facet set
 EmailAddressList emailsFacetData = c.Entity.GetFacet<EmailAddressList>(emailsFacetKey);

 if (emailsFacetData != null)
 {
 // Do something with data - e.g. display in view
 EmailAddress preferred = emailsFacetData.PreferredEmail;
 }
 }
 }
 }
 catch (XdbExecutionException ex)
 {
 // Handle exceptions
 }
 }
 }
 }
}

> !注すべての組み込みファセットモデルにはDefaultFacetKeyプロパティがあります。例えば、WebVisit.DefaultFacetKey。

## デフォルトのファセットキーでファセットを取得します

すべての組み込みファセットモデルには、デフォルトのファセットキーをファセットモデルに関連付けるFacetKey属性があります。

FacetKey(CollectionModel.FacetKeys.EmailAddressList)
public class EmailAddressList : Facet

ファセットキーが指定されていない場合、xConnectはデフォルト値に戻ります。この動作を模倣するために、FacetKey属性を自分のファセットモデルに追加してください。以下の例では、.Expand<EmailAddressList>() と .GetFacet<EmailAddressList>() をファセットキーを指定せずに使用します。

> !重要ファセットモデルにFacetKey属性がない場合は例外が投げられます。

using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect.Operations;
using System;
using System.Collections.Generic;
using System.Linq;
using Sitecore.XConnect;
using Sitecore.XConnect.Client;

namespace Documentation
{
 public class GetFacetsMultipleDefaultKey
 {
 // Asyc example
 public async void ExampleAsync()
 {
 using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 try
 {
 var contactsTask = client.GetAsync<Sitecore.XConnect.Contact>(new ContactReference(new Guid("{A2814105-1F45-E611-52E6-34E6D7117DCB}")),
 new ContactExpandOptions().Expand<EmailAddressList>());

 Contact contact = await contactsTask;

 if (contact != null)
 {
 // For each contact, retrieve the facet - will return null if contact does not have this facet set
 EmailAddressList emailsFacetData = contact.GetFacet<EmailAddressList>();

 if (emailsFacetData != null)
 {
 // Do something with data - e.g. display in view
 EmailAddress preferred = emailsFacetData.PreferredEmail;
 }
 }
 }
 catch (XdbExecutionException ex)
 {
 // Handle exceptions
 }
 }
 }

 // Asyc example
 public void Example()
 {
 using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 try
 {
 Contact contact = client.Get<Sitecore.XConnect.Contact>(new ContactReference(new Guid("{A2814105-1F45-E611-52E6-34E6D7117DCB}")),
 new ContactExpandOptions().Expand<EmailAddressList>());

 if (contact != null)
 {
 // For each contact, retrieve the facet - will return null if contact does not have this facet set
 EmailAddressList emailsFacetData = contact.GetFacet<EmailAddressList>();

 if (emailsFacetData != null)
 {
 // Do something with data - e.g. display in view
 EmailAddress preferred = emailsFacetData.PreferredEmail;
 }
 }
 }
 catch (XdbExecutionException ex)
 {
 // Handle exceptions
 }
 }
 }
 }
}

> !注もしファセットモデル( EmailAddressListなど)を使って複数のファセットを定義しているなら、デフォルトでないファセットキーをモデルクラスの定数として保存することを検討してください。

## ファセットの設定または更新

ファセットを更新するには、.SetFacet() 拡張メソッドを必ず使う必要があります。詳細は「 [Contactファセットを設定する](https://doc.sitecore.com/xp/ja/developers/91/sitecore-experience-platform/set-contact-facets.html "Set contact facets")」をご覧ください。