計算ファセットの作成

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

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

このトピックでは、AverageSpendという名前の計算済みファセットを実装する方法を示します。ファセットには、購入あたりの平均支出など、コンタクトの購入履歴に関するデータが格納されます。

ファセットを作成して登録する

  1. ファセットクラスを作成します。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Documentation
    {
        [FacetKey(MyCollectionModel.FacetKeys.AverageSpend)]
        public class AverageSpend : Sitecore.XConnect.Facet
        {
            public const string DefaultFacetKey = MyCollectionModel.FacetKeys.AverageSpend;
    
            public int TotalPurchases { get; set; }
            public decimal TotalSpend { get; set; } // Assumes single currency
            public decimal AverageSpendPerPurchase { get; set; }
        }
    }
    メモ

    この例では、すべての購入が同じ通貨を使用して行われることを前提としています。

  2. ファセットをモデルに登録 します。

    modelBuilder.DefineFacet<Contact, AverageSpend>(AverageSpend.DefaultFacetKey);

計算されたファセットプラグインを実装する

  1. Sitecore.XConnect.Service.MergingCalculatedFacetHandler<AverageSpend>を実装する計算ファセット ハンドラーを作成します。次の点に注意してください。

    • InteractionFacetDependencyオブジェクトが基本ハンドラーに渡されます。これにより、WebVisitファセットがインタラクションに存在する場合、ファセットがロードされます。ただし、ファセットはハンドラーの実行には必要ありません。

    • Merge() メソッドは、2つの連絡先がマージされたときにこのファセットに何が起こるかを決定します。この場合、合計支出と合計購入額が合計され、購入あたりの平均支出が再計算されます。計算されたファセットに対してMerge() メソッドを実装する必要があります。

    • UpdateFacet() メソッドは、新しいインタラクションがxConnectに送信されたときに何が起こるかを決定します。

    • すべてのメソッドは、ファセットが更新された場合trueを返します。

    using Sitecore.XConnect;
    using Sitecore.XConnect.Collection.Model;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Documentation
    {
        public class AverageSpendHandler : Sitecore.XConnect.Service.MergingCalculatedFacetHandler<AverageSpend>
        {
            public AverageSpendHandler() : base(AverageSpend.DefaultFacetKey, new[] { new Sitecore.XConnect.Service.InteractionFacetDependency(WebVisit.DefaultFacetKey, false) })
            {
            }
    
            protected override bool Merge(AverageSpend source, AverageSpend target)
            {
                if (source.TotalSpend > 0)
                {
                    target.TotalSpend += source.TotalSpend;
                    target.TotalPurchases += source.TotalPurchases;
    
                    target.AverageSpendPerPurchase = target.TotalSpend / target.TotalPurchases;
    
                    return true;
                }
    
                return false;
            }
    
            protected override bool UpdateFacet(AverageSpend currentFacet, Sitecore.XConnect.Interaction interaction)
            {
                bool edited = false;
    
                var referrer = interaction.WebVisit() != null ? interaction.WebVisit().Referrer : String.Empty;
    
                if (!String.IsNullOrEmpty(referrer))
                {
                    currentFacet.LatestReferrer = referrer;
                    edited = true;
                }
    
                var outcomes = interaction.Events.OfType<Outcome>(); // Get all purchase outcomes in interaction
    
                if (outcomes != null && outcomes.Any())
                {
                    foreach (var purchase in outcomes)
                    {
                        currentFacet.TotalPurchases++; // If there are purchases, increment purchase count
                        currentFacet.TotalSpend += purchase.MonetaryValue;
                    }
    
                    // Set average spend per purchase (NOT spend per visit)
                    currentFacet.AverageSpendPerPurchase = currentFacet.TotalSpend / currentFacet.TotalPurchases;
                }
    
                return edited;
            }
        }
    手記

    InteractionFacetDependencyRequiredプロパティがtrueに設定されている場合、ハンドラーは、このファセットがインタラクションに存在する場合にのみ実行されます。

  2. \App_data\config\sitecore\Collection\sc.XConnect.Collection.Model.Plugins.xml構成ファイルをxConnectで開きます。

  3. ハンドラーに2つのエントリを追加します (1つはICalculatedFacetHandler 、もう1つはIContactMergeHandler)。

    <ICalculatedFacetHandler.AverageSpendHandler>
        <Type>Documentation.AverageSpendHandler, Documentation</Type>
        <As>Sitecore.XConnect.Service.ICalculatedFacetHandler, Sitecore.XConnect.Service</As>
        <LifeTime>Singleton</LifeTime>
    </ICalculatedFacetHandler.AverageSpendHandler>
    
    <IContactMergeHandler.AverageSpendHandler>
        <Type>Documentation.AverageSpendHandler, Documentation</Type>
        <As>Sitecore.XConnect.Service.IContactMergeHandler, Sitecore.XConnect.Service</As>
        <LifeTime>Singleton</LifeTime>
    </IContactMergeHandler.AverageSpendHandler>

設定オプションの受け渡し

設定オプションを計算済みファセットハンドラに渡すことができます。次の例では、AverageSpendファセットのLatestReferrerプロパティを設定するかどうかは、構成オプションによって制御されます。

  1. オプションを表す公開プロパティを追加します (例: public bool PopulateReferrer { get; }.

  2. IConfigurationオブジェクトを受け取るコンストラクタを追加します。次のシナリオでは、設定オプションの名前がPopulateReferrerであると仮定しています。

    using Microsoft.Extensions.Configuration;
    using Sitecore.XConnect;
    using Sitecore.XConnect.Collection.Model;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Documentation
    {
        public class AverageSpendHandler : Sitecore.XConnect.Service.MergingCalculatedFacetHandler<AverageSpend>
        {
    
            public AverageSpendHandler(IConfiguration options) : this(options.GetValue<bool>(nameof(PopulateReferrer)))
            {
            }
    
            public AverageSpendHandler(bool populateReferrer) : base(AverageSpend.DefaultFacetKey, new[] { new Sitecore.XConnect.Service.InteractionFacetDependency(WebVisit.DefaultFacetKey, false) })
            {
                PopulateReferrer = populateReferrer;
            }
    
            public bool PopulateReferrer { get; }
    
            protected override bool Merge(AverageSpend source, AverageSpend target)
            {
                bool edited = false;
    
                if (PopulateReferrer)
                {
                    if (String.IsNullOrEmpty(target.LatestReferrer))
                    {
                        target.LatestReferrer = source.LatestReferrer;
                        edited = true;
                    }
                }
    
                if (source.TotalSpend > 0)
                {
                    target.TotalSpend += source.TotalSpend;
                    target.TotalPurchases += source.TotalPurchases;
    
                    target.AverageSpendPerPurchase = target.TotalSpend / target.TotalPurchases;
    
                    return edited;
                }
    
                return false;
            }
    
            protected override bool UpdateFacet(AverageSpend currentFacet, Sitecore.XConnect.Interaction interaction)
            {
                bool edited = false;
    
                var referrer = interaction.WebVisit() != null ? interaction.WebVisit().Referrer : String.Empty;
    
                if (PopulateReferrer && !String.IsNullOrEmpty(referrer))
                {
                    currentFacet.LatestReferrer = referrer;
                    edited = true;
                }
    
                var outcomes = interaction.Events.OfType<Outcome>(); // Get all purchase outcomes in interaction
    
                if (outcomes != null && outcomes.Any())
                {
                    foreach (var purchase in outcomes)
                    {
                        currentFacet.TotalPurchases++; // If there are purchases, increment purchase count
                        currentFacet.TotalSpend += purchase.MonetaryValue;
                    }
    
                    // Set average spend per purchase (NOT spend per visit)
                    currentFacet.AverageSpendPerPurchase = currentFacet.TotalSpend / currentFacet.TotalPurchases;
                }
    
                return edited;
            }
        }
    }
  3. \App_data\config\sitecore\Collection\sc.XConnect.Collection.Model.Plugins.xmlを開き、図のようにオプションを構成に追加します。このオプションをマージおよび更新中に使用する場合は、示されているようにオプションを2回指定します。

    <ICalculatedFacetHandler.AverageSpendHandler>
        <Type>Documentation.AverageSpendHandler, Documentation</Type>
        <As>Sitecore.XConnect.Service.ICalculatedFacetHandler, Sitecore.XConnect.Service</As>
        <LifeTime>Singleton</LifeTime>
        <Options>
            <PopulateReferrer>true</PopulateReferrer>
        </Options>
    </ICalculatedFacetHandler.AverageSpendHandler>
    
    <IContactMergeHandler.AverageSpendHandler>
        <Type>Documentation.AverageSpendHandler, Documentation</Type>
        <As>Sitecore.XConnect.Service.IContactMergeHandler, Sitecore.XConnect.Service</As>
        <LifeTime>Singleton</LifeTime>
        <Options>
            <PopulateReferrer>true</PopulateReferrer>
        </Options>
    </IContactMergeHandler.AverageSpendHandler>

計算されたファセットを取得する

xConnectクライアントAPIを使用して、他のファセットと同じ方法で計算されたファセットを取得します。計算されたファセットを直接編集しないでください。

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