インタラクションファセットを取得する

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

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

インタラクションまたはインタラクションのバッチで返すファセットを指定するには、ファセットキーの配列をInteractionExpandOptionsに渡します。

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

var contacts = await client.GetAsync<Interaction>(references, new InteractionExecutionOptions(new Sitecore.XConnect.InteractionExpandOptions(IpInfo.DefaultFacetKey)));

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

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

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

  • ファセットは、インタラクションが最初に取得されたときにInteractionExpandOptionsの一部として要求されませんでした

  • ファセットが特定のインタラクションに対して設定されていない

  • タイプとキーの組み合わせが正しくありません

次の例は、IpInfoファセットを取得して操作する方法を示しています。

メモ

すべての組み込みファセットモデルには、WebVisit.DefaultFacetKeyなどのDefaultFacetKeyプロパティがあります。

using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect.Operations;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Sitecore.XConnect;
using System.Collections.ObjectModel;
using Sitecore.XConnect.Client;

namespace Documentation
{
    public class GetInteractionsWithFacets
    {
        public async void ExampleAsync()
        {
            using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
            {
                try
                {

                    // Contact reference from ID
                    var contactRef = new Sitecore.XConnect.ContactReference(Guid.Parse("B9814105-1F45-E611-82E6-34E6D7117DCB"));
                    Sitecore.XConnect.InteractionReference interactionRef = new Sitecore.XConnect.InteractionReference(contactRef, Guid.Parse("DA2DA5F0-4348-E611-82E7-34E6D7117DCB"));

                    // Contact reference from identifier
                    var identifiedContactRef = new Sitecore.XConnect.IdentifiedContactReference("twitter", "myrtlesitecore");
                    Sitecore.XConnect.InteractionReference secondInteractionRef = new Sitecore.XConnect.InteractionReference(identifiedContactRef, Guid.Parse("E6067926-1F45-E611-82E6-34E6D7117DCB"));


                    var references = new List<Sitecore.XConnect.InteractionReference>()
                    {
                        interactionRef, secondInteractionRef
                    };

                    Task<ReadOnlyCollection<IEntityLookupResult<Interaction>>> interactionTask = client.GetAsync<Interaction>(references, new InteractionExecutionOptions(new InteractionExpandOptions(IpInfo.DefaultFacetKey)));

                    ReadOnlyCollection<IEntityLookupResult<Interaction>> interactions = await interactionTask;

                    foreach (var i in interactions)
                    {
                        IpInfo ipInfoFacet = i.Entity.GetFacet<IpInfo>(Sitecore.XConnect.Collection.Model.CollectionModel.FacetKeys.IpInfo);

                        var businessName = ipInfoFacet.BusinessName; // Do some work with facet values
                    }
                }
                catch (XdbExecutionException ex)
                {
                    // Manage exceptions
                }
            }
        }

        public void ExampleSync()
        {
            using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
            {
                try
                {

                    // Contact reference from ID
                    var contactRef = new Sitecore.XConnect.ContactReference(Guid.Parse("B9814105-1F45-E611-82E6-34E6D7117DCB"));
                    Sitecore.XConnect.InteractionReference interactionRef = new Sitecore.XConnect.InteractionReference(contactRef, Guid.Parse("DA2DA5F0-4348-E611-82E7-34E6D7117DCB"));

                    // Contact reference from identifier
                    var identifiedContactRef = new Sitecore.XConnect.IdentifiedContactReference("twitter", "myrtlesitecore");
                    Sitecore.XConnect.InteractionReference secondInteractionRef = new Sitecore.XConnect.InteractionReference(identifiedContactRef, Guid.Parse("E6067926-1F45-E611-82E6-34E6D7117DCB"));

                    var references = new List<Sitecore.XConnect.InteractionReference>()
                    {
                        interactionRef, secondInteractionRef
                    };

                    IReadOnlyCollection<IEntityLookupResult<Interaction>> interactions = client.Get<Interaction>(references, new InteractionExecutionOptions(new InteractionExpandOptions(IpInfo.DefaultFacetKey)));

                    foreach (var i in interactions)
                    {
                        IpInfo ipInfoFacet = i.Entity.GetFacet<IpInfo>(Sitecore.XConnect.Collection.Model.CollectionModel.FacetKeys.IpInfo);

                        var businessName = ipInfoFacet.BusinessName; // Do some work with facet values
                    }
                }
                catch (XdbExecutionException ex)
                {
                    // Manage exceptions
                }
            }
        }
    }
}

デフォルトのファセットキーを使用してファセットを取得する

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

[FacetKey(CollectionModel.FacetKeys.IpInfo)]
public class IpInfo : Facet

ファセット キーが指定されていない場合、xConnectは既定値にフォールバックします。この動作を模倣するために、独自のファセットモデルにFacetKey属性を追加します。次の例では、ファセットキーを指定せずに .Expand<IpInfo>().GetFacet<IpInfo>() を使用しています。

大事な

ファセット・モデルにFacetKey属性がない場合、例外がスローされます。

using Sitecore.XConnect.Collection.Model;
using Sitecore.XConnect.Operations;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Sitecore.XConnect;
using System.Collections.ObjectModel;
using Sitecore.XConnect.Client;

namespace Documentation
{
    public class GetInteractionsWithFacetsDefaults
    {
        public async void ExampleAsync()
        {
            using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
            {
                try
                {

                    // Contact reference from ID
                    var contactRef = new Sitecore.XConnect.ContactReference(Guid.Parse("B9814105-1F45-E611-82E6-34E6D7117DCB"));
                    Sitecore.XConnect.InteractionReference interactionRef = new Sitecore.XConnect.InteractionReference(contactRef, Guid.Parse("DA2DA5F0-4348-E611-82E7-34E6D7117DCB"));

                    // Contact reference from identifier
                    var identifiedContactRef = new Sitecore.XConnect.IdentifiedContactReference("twitter", "myrtlesitecore");
                    Sitecore.XConnect.InteractionReference secondInteractionRef = new Sitecore.XConnect.InteractionReference(identifiedContactRef, Guid.Parse("E6067926-1F45-E611-82E6-34E6D7117DCB"));


                    var references = new List<Sitecore.XConnect.InteractionReference>()
                    {
                        interactionRef, secondInteractionRef
                    };

                    Task<ReadOnlyCollection<IEntityLookupResult<Interaction>>> interactionTask = client.GetAsync<Interaction>(references, new InteractionExecutionOptions(new InteractionExpandOptions(IpInfo. DefaultFacetKey)));

                    ReadOnlyCollection<IEntityLookupResult<Interaction>> interactions = await interactionTask;

                    foreach (var i in interactions)
                    {
                        IpInfo ipInfoFacet = i.Entity.GetFacet<IpInfo>();

                        var businessName = ipInfoFacet.BusinessName; // Do some work with facet values
                    }
                }
                catch (XdbExecutionException ex)
                {
                    // Manage exceptions
                }
            }
        }

        public void ExampleSync()
        {
            using (Sitecore.XConnect.Client.XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
            {
                try
                {

                    // Contact reference from ID
                    var contactRef = new Sitecore.XConnect.ContactReference(Guid.Parse("B9814105-1F45-E611-82E6-34E6D7117DCB"));
                    Sitecore.XConnect.InteractionReference interactionRef = new Sitecore.XConnect.InteractionReference(contactRef, Guid.Parse("DA2DA5F0-4348-E611-82E7-34E6D7117DCB"));

                    // Contact reference from identifier
                    var identifiedContactRef = new Sitecore.XConnect.IdentifiedContactReference("twitter", "myrtlesitecore");
                    Sitecore.XConnect.InteractionReference secondInteractionRef = new Sitecore.XConnect.InteractionReference(identifiedContactRef, Guid.Parse("E6067926-1F45-E611-82E6-34E6D7117DCB"));

                    var references = new List<Sitecore.XConnect.InteractionReference>()
                    {
                        interactionRef, secondInteractionRef
                    };

                    IReadOnlyCollection<IEntityLookupResult<Interaction>> interactions = client.Get<Interaction>(references, new InteractionExecutionOptions(new
InteractionExpandOptions(IpInfo. DefaultFacetKey)));

                    foreach (var i in interactions)
                    {
                        IpInfo ipInfoFacet = i.Entity.GetFacet<IpInfo>();

                        var businessName = ipInfoFacet.BusinessName; // Do some work with facet values
                    }
                }
                catch (XdbExecutionException ex)
                {
                    // Manage exceptions
                }
            }
        }
    }
}
手記

ファセットモデル( IpInfoなど)を使用して複数のファセットを定義した場合は、デフォルト以外のファセットキーを定数としてモデルクラスに格納することを検討してください。

インタラクションファセットの設定とイベントの追加

接触ファセットを設定するには、.SetFacet() 拡張メソッドを使用する必要があります。詳細については、以下を参照してください。

手記

インタラクションファセットは、一度設定すると更新できません。

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