1. 連絡先を取得する

ファセットとのコンタクトを取得する

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

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

コンタクトまたはコンタクトのバッチで返すファセットを指定するには、ファセットキーの配列をContactExpandOptionsに渡します。存在する場合に常に返されるファセットは、ConsentInfoMergeInfoのみです。

次の例では、デフォルトのEmailAddressListファセットとAddressListファセットがコンタクト展開オプションの一部としてリクエストされています。

var contacts = await client.GetAsync<Contact>(references, new ContactExecutionOptions(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 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
                }
            }
        }
    }
}
メモ

すべての組み込みファセットモデルには、WebVisit.DefaultFacetKeyなどの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() 拡張メソッドを使用する必要があります。詳しくは、コンタクト・ファセットの設定を参照してください。

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