---
title: "セッション内で接触面を設定する"
slug: "set-contact-facets-in-session"
abstract: "匿名および既知の連絡先のファセット設定方法や、セッションに読み込まれたファセットのバージョンを更新する方法。"
---
# セッション内で接触面を設定する

> !重要セッションにロードされたファセットは編集可能ですが、セッション終了時にxConnectに保存されることはありません。 [ファセットの更新は必ずxConnect Client API](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/xconnect-client-api-overview.html "xConnect Client API overview")を使う必要があります。

xConnect Client APIを使って直接連絡先のファセットを更新し、セッション内に存在するそのファセットのコピーも手動で更新する必要があります。トラッカーは連絡先データをロックしません。つまり、進行中のセッション中の連絡先は他のシステムによっても更新される可能性があります。セッション内でファセットを保持し、セッション終了時にそのファセットをxConnectに提出すると、そのファセットのより新しいバージョンが利用可能だと競合が発生する可能性があります。

このトピックでは、匿名および既知の連絡先のファセット設定方法と、セッションに読み込まれたファセットのバージョンを更新する方法について説明します。

## 新しいコンタクトのファセット設定

まだxConnectに保存されていない新しい匿名連絡先のファスティングを設定するには、まずその連絡先を保存する必要があります。匿名連絡先のファスティングを設定するには:

1.  Sitecore.Analytics.Tracker.Current.Contact.IsNewがtrueの場合は、contactManager.SaveContactToCollectionに連絡して連絡先を保存してください。更新するにはxConnectに連絡先が存在する必要があります。
2.  接触者のトラッカーIDと、トラッカー専用の固定ソースからトラ **ッカー識別子** を作成します。この識別子を使って接触を取得できます。
3.  トラッカー識別子を使ってxConnect Client APIを使って連絡先を取得します。
4.  ファセットを更新してxConnectに提出し、発生した競合エラーを処理してください。

以下の例は、匿名連絡先を保存し、PersonalInformation面を設定する方法を示しています。

using Sitecore.Analytics.Model;
using Sitecore.Analytics.Model.Entities;
using Sitecore.XConnect;
using Sitecore.XConnect.Client;
using Sitecore.XConnect.Collection.Model;

namespace Documentation
{
 public class TrackAnonymousContacts
 {
 public void Example()
 {
 if (Sitecore.Analytics.Tracker.Current.Contact.IsNew)
 {
 var manager = Sitecore.Configuration.Factory.CreateObject("tracking/contactManager", true) as Sitecore.Analytics.Tracking.ContactManager;

 if (manager != null)
 {
 // Save contact to xConnect; at this point, a contact has an anonymous
 // TRACKER IDENTIFIER, which follows a specific format. Do not use the contactId overload
 // and make sure you set the ContactSaveMode as demonstrated
 Sitecore.Analytics.Tracker.Current.Contact.ContactSaveMode = ContactSaveMode.AlwaysSave;
 manager.SaveContactToCollectionDb(Sitecore.Analytics.Tracker.Current.Contact);

 // Now that the contact is saved, you can retrieve it using the tracker identifier
 // NOTE: Sitecore.Analytics.XConnect.DataAccess.Constants.IdentifierSource is marked internal in 9.0 Initial and cannot be used. If you are using 9.0 Initial, pass "xDB.Tracker" in as a string.
 var trackerIdentifier = new IdentifiedContactReference(Sitecore.Analytics.XConnect.DataAccess.Constants.IdentifierSource, Sitecore.Analytics.Tracker.Current.Contact.ContactId.ToString("N"));

 // Get contact from xConnect, update and save the facet
 using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 try
 {
 var contact = client.Get<Contact>(trackerIdentifier, new Sitecore.XConnect.ContactExpandOptions());

 if (contact != null)
 {
 client.SetFacet<PersonalInformation>(contact, PersonalInformation.DefaultFacetKey, new PersonalInformation()
 {
 FirstName = "Myrtle" // Replace with real input source
 });

 client.Submit();

 // Remove contact data from shared session state - contact will be re-loaded
 // during subsequent request with updated facets
 manager.RemoveFromSession(Sitecore.Analytics.Tracker.Current.Contact.ContactId);
 Sitecore.Analytics.Tracker.Current.Session.Contact = manager.LoadContact(Sitecore.Analytics.Tracker.Current.Contact.ContactId);
 }
 }
 catch (XdbExecutionException ex)
 {
 // Manage conflicts / exceptions
 }
 }
 }
 }

 }
 }
}

> !重要ファセットを設定する前に、xConnctにまだ存在しない連絡先を保存するにはcontactManager.SaveContactToCollectionを使わなければなりません。 .AddContactを使って手動で連絡先をxConnectに追加しないでください。これによりトラッカーをバイパスし、連絡先の統合機能に影響します。

## 既存のコンタクトの面設定

連絡先が既知であれば、それはすでにxConnectに存在しています。最初に利用可能な識別子を使って、示すようにxConnect Client APIを使って連絡先を更新します。

using Sitecore.Analytics.Model;
using Sitecore.Analytics.Model.Entities;
using Sitecore.XConnect;
using Sitecore.XConnect.Client;
using Sitecore.XConnect.Collection.Model;
using System.Linq;

namespace Documentation
{
 public class TrackKnownContacts
 {
 public void Example()
 {
 var manager = Sitecore.Configuration.Factory.CreateObject("tracking/contactManager", true) as Sitecore.Analytics.Tracking.ContactManager;

 if (!Sitecore.Analytics.Tracker.Current.Contact.IsNew)
 {
 var anyIdentifier = Sitecore.Analytics.Tracker.Current.Contact.Identifiers.FirstOrDefault();

 // Get contact from xConnect, update and save the facet
 using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
 {
 try
 {
 var contact = client.Get<Contact>(new IdentifiedContactReference(anyIdentifier.Source, anyIdentifier.Identifier), new Sitecore.XConnect.ContactExpandOptions(PersonalInformation.DefaultFacetKey));

 if (contact != null)
 {
 if (contact.Personal() != null)
 {
 contact.Personal().FirstName = "Myrtle";

 client.SetFacet<PersonalInformation>(contact, PersonalInformation.DefaultFacetKey, contact.Personal());
 }
 else
 {
 client.SetFacet<PersonalInformation>(contact, PersonalInformation.DefaultFacetKey, new PersonalInformation()
 {
 FirstName = "Myrtle"
 });
 }

 client.Submit();

 // Remove contact data from shared session state - contact will be re-loaded
 // during subsequent request with updated facets
 manager.RemoveFromSession(Sitecore.Analytics.Tracker.Current.Contact.ContactId);
 Sitecore.Analytics.Tracker.Current.Session.Contact = manager.LoadContact(Sitecore.Analytics.Tracker.Current.Contact.ContactId);
 }
 }
 catch (XdbExecutionException ex)
 {
 // Manage conflicts / exceptions
 }
 }
 }
 }
 }
}

## 接触データの再読み込み

共有セッション状態にキャッシュされた連絡先データは、xConnectに変更を提出しても自動的に更新されません。9.0 Update-1以降は、共有セッション状態から連絡先を外すことで連絡先データを再読み込みできます:

manager.RemoveFromSession(Sitecore.Analytics.Tracker.Current.Contact.ContactId); // Use tracker ID, not xConnect ID
Sitecore.Analytics.Tracker.Current.Session.Contact = manager.LoadContact(Sitecore.Analytics.Tracker.Current.Contact.ContactId);

コンタクトとその側面は次のリクエスト時に共有セッション状態に再ロードされます。 RemoveFromSession() メソッドは9.0 Update-1以降のみ利用可能です。

9.0 Initial Releaseを使用している場合や、xConnectから連絡先を再読み込みしたくない場合は、キャッシュされたファセット値を手動で更新する必要があります。以下の例は、セッション中に連絡先の名前を手動で更新する方法を示しています:

// Update legacy facet
var personalInfoTrackerFacet = Sitecore.Analytics.Tracker.Current.Contact.GetFacet<IContactPersonalInfo>("Personal");
personalInfoTrackerFacet.FirstName = "Myrtle"; // replace with real input source

// Update xConnect facet
var xConnectFacet = Sitecore.Analytics.Tracker.Current.Contact.GetFacet<Sitecore.Analytics.XConnect.Facets.IXConnectFacets>("XConnectFacets");

var personalInfoXConnectFacet = xConnectFacet.FacetsPersonalInformation.DefaultFacetKey as PersonalInformation;
personalInfoXConnectFacet.FirstName = "Myrtle"; // Replace with real input source

> !注カスタムファセットはIXConnectFacetsにのみ読み込まれ、トラッカー内の他の場所で更新する必要はありません。一部のレガシーファセットは2か所で更新する必要があります。詳細は [「セッションでファセットにアクセスする](https://doc.sitecore.com/xp/ja/developers/105/sitecore-experience-platform/accessing-facets-in-session.html "Accessing facets in session") 」の表を参照してください。