計算された側面を作成します
このページの翻訳は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; } } }
!注この例は、すべての購入が同じ通貨で行われることを前提としています。
-
modelBuilder.DefineFacet<Contact, AverageSpend>(AverageSpend.DefaultFacetKey);
計算されたファセットプラグインを実装してください
-
計算されたファセットハンドラーを作成し、Sitecore.XConnect.Service.MergingCalculatedFacetHandler
を実装します。以下の点に注目してください。 - InteractionFacetDependencyオブジェクトがベースハンドラーに渡されます。これにより、WebVisitファセットがインタラクションに存在すればロードされます。しかし、ハンドラーが実行するためにファセットは必須ではありません。
- Merge()法は、2つのコンタクトが統合された際にこのファセットに何が起こるかを決定します。この方法では、総支出と総購入を合計し、1回あたりの平均支出を再計算します。計算されたファセットには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
{ 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
(); // 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; } }
!注任意のInteractionFacetDependencyのRequiredプロパティがtrueに設定されている場合、ハンドラーはこの側面がインタラクションに存在している場合にのみ実行します。
-
xConnectで \App_data\config\sitecore\Collection\sc.XConnect.Collection.Model.Plugins.xml設定ファイルを開いてください。
-
ハンドラーのエントリを2つ追加します。1つはICalculatedFacetHandler 、もう1つはIContactMergeHandler:
<ICalculatedFacetHandler.AverageSpendHandler>
Documentation.AverageSpendHandler, Documentation Sitecore.XConnect.Service.ICalculatedFacetHandler, Sitecore.XConnect.Service Singleton </ICalculatedFacetHandler.AverageSpendHandler><IContactMergeHandler.AverageSpendHandler>
Documentation.AverageSpendHandler, Documentation Sitecore.XConnect.Service.IContactMergeHandler, Sitecore.XConnect.Service Singleton </IContactMergeHandler.AverageSpendHandler>
設定オプションを通す
設定オプションを計算されたファセットハンドラに渡すことができます。以下の例では、設定オプションがAverageSpendファセットのLatestReferrerプロパティを設定するかどうかを制御します。
-
オプションを表す公共財産を追加してください。例えば、public bool PopulateReferrer { get; }。
-
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
{ public AverageSpendHandler(IConfiguration options) : this(options.GetValue
(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
(); // 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; } } }
-
\App_data\config\sitecore\Collection\sc.XConnect.Collection.Model.Plugins.xmlを開き、表示されたように設定にオプションを追加してください。マージや更新中にオプションが使われている場合は、表示通りに2回指定してください。
<ICalculatedFacetHandler.AverageSpendHandler>
Documentation.AverageSpendHandler, Documentation Sitecore.XConnect.Service.ICalculatedFacetHandler, Sitecore.XConnect.Service Singleton </ICalculatedFacetHandler.AverageSpendHandler>true <IContactMergeHandler.AverageSpendHandler>
Documentation.AverageSpendHandler, Documentation Sitecore.XConnect.Service.IContactMergeHandler, Sitecore.XConnect.Service Singleton </IContactMergeHandler.AverageSpendHandler>true
計算された側面を把握しましょう
xConnect Client APIを使って、他のファセットと同様に計算されたファセットを取得してください。計算されたファセットを直接編集しないでください。