セッションで連絡先ファセットを設定する

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

大事な

セッションに読み込まれたファセットは編集できますが、セッション終了時にxConnectに保存されません。 ファセットを更新するには、xConnectクライアントAPIを使用する必要があります。

xConnectクライアントAPIを使用してxConnectでコンタクトのファセットを直接更新し、セッションに存在するそのファセットのコピーを手動で更新する必要があります。トラッカーは連絡先データをロックしないため、進行中のセッションを持つ連絡先は他のシステムによって更新できます。セッションでファセットを保持し、セッション終了時にそのファセットをxConnectに送信すると、そのファセットの最新バージョンが利用可能な場合に競合が発生する可能性があります。

このトピックでは、匿名コンタクトと既知のコンタクトのファセットを設定する方法と、セッションにロードされたファセットのバージョンを更新する方法について説明します。

新しいコンタクトのファセットを設定する

xConnectにまだ保存されていない新しい匿名コンタクトのファセットを設定するには、まずコンタクトを保存する必要があります。匿名コンタクトのファセットを設定するには、次のようにします。

  1. Sitecore.Analytics.Tracker.Current.Contact.IsNewtrueの場合は、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
                        }
                    }
                }
            }

        }
    }
}
大事な

ファセットを設定する前に、contactManager.SaveContactToCollectionを使用してxConnctにまだ存在しない連絡先を保存する必要があります。 .AddContactを使用して手動で連絡先をxConnectに追加しないでください。これはトラッカーをバイパスし、連絡先マージ機能に影響を与えます。

既存のコンタクトのファセットを設定する

コンタクトが既知である場合、そのコンタクトはxConnectにすでに存在しています。最初に使用可能な識別子を使用して、次に示すようにxConnectクライアント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初期リリースを使用している場合、または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.Facets[PersonalInformation.DefaultFacetKey] as PersonalInformation;
personalInfoXConnectFacet.FirstName = "Myrtle"; // Replace with real input source
メモ

カスタムファセットはIXConnectFacetsにのみロードされ、トラッカー内の他の場所で更新する必要はありません。一部のレガシーファセットは、2つの場所で更新する必要があります - 詳細については 、セッション内のファセットへのアクセス の表を参照してください。

この記事を改善するための提案がある場合は、 お知らせください!