---
title: "ファセッツと接触する"
slug: "get-contact-with-facets"
abstract: ""
---
# ファセッツと接触する

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

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

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

A facet is added to the contact’s \`Facets\` dictionary if the facet exists for that contact. If the facet you requested is not defined in the model xConnect will throw an exception when the request is executed. When the contact or contacts have been returned, use the \`.GetFacet<T>()\` method on the contact to retrieve the facet object:

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 ContactExecutionOptions(
 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 ContactExecutionOptions(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 ContactExecutionOptions(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 ContactExecutionOptions(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/105/sitecore-experience-platform/set-contact-facets.html "Set contact facets")」をご覧ください。