Analyticsデータ・クラス

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

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

カスタムAnalytics Dataクラスは、データがインタラクションにシリアル化されるときに2つのメソッドを公開し、コンテンツをリハイドレートする1つのメソッドを公開します。

An example of Initialize and Serialize methods in the BaseAnalyticsData class diagram.
An example of the Deserialize method in the BaseAnalyticsData class diagram.

名前

形容

初期化する

ページ イベントのコンテキストでは、このメソッドを呼び出し、呼び出し中に受け取った引数をサービス層に渡します。特定のAnalyticsEntityオブジェクトは、RequestオブジェクトとResultオブジェクトを解析してシリアル化するデータを抽出する方法を知る必要があります。

メモ

一部の実装では、ECSから取得されない明示的な順序など、さまざまな入力パラメータに対応するために、オーバーロードされた初期化が作成されています。

シリアル 化

このメソッドを呼び出して、コンテンツを指定されたディクショナリにシリアル化し、インタラクションのページイベントまたは目標のカスタム値に書き込まれます。

逆シリアル化

このメソッドを呼び出して、データ・クラスのコンテンツをリハイドレートします。現在、Connect Experience ProfileおよびExperience Analyticsレポートコンポーネントで使用されています

データがシリアル化されているときは、次のユーティリティ メソッドを使用できます。

An example of the AddEntityToEventDictionary method in the BaseAnalyticsData class diagram.

名前

形容

AddEntityToEventDictionary<T>

このテンプレート化された方法は、Connectエンティティをカスタム値ディクショナリに追加するときに使用されます。

手記

Connectエンティティを直接追加するのではなく、この方法を使用することが非常に重要です。

この方法では、いくつかのことを行います。まず、ECSによって行われた可能性のある拡張から削除された基本エンティティ値のみを保存します。これは、分散環境では、ECS固有のデータ型が使用できず、逆シリアル化フェーズ中にレポート サーバーと処理サーバーで問題が発生する可能性があるためです。

これらのサーバーの両方が独自のドメインにあり、制御されている場合は、元の「カスタム」ECSエンティティを持つことが望ましい場合があります。この場合、Sitecore.Commerce.configファイルで次の設定を使用できます。

<setting name="Commerce.Analytics.EntitiesIncludedInXDB" value="Base"/>

有効な値は次のとおりです。

  • Base

  • Custom

  • Both

Base - 基本エンティティのみを保存します。

Custom - 元の指定されたエンティティを保存します。

Both - 基本エンティティと元のバージョンを保存します。

デフォルトでは、Baseが設定されています。

詳細については、「 エクスペリエンス プロファイル コマース」タブ のトピックを参照してください。

データのリハイドレート中は、次のユーティリティ メソッドを使用します。

A BaseAnalyticsData class diagram showing utility methods.

上記のメソッドを使用すると、必要な任意の型のシリアル化されたリストから値を取得できます。 GetMandatory* メソッドは、必須パラメータが見つからない場合に備えて、適切なnullチェックやエラーロギングの追加など、追加のエラー処理コードを追加します。

Get Optional*メソッドは、キーが存在しない場合にエラーログが発生しないことを除いて、GetMandatory*メソッドと同じです。

以下は、新しい訪問者注文が作成されたときに登録される注文目標のConnect実装を示しています。

public class OrderGoalAnalyticsData : BaseAnalyticsData
{
public string ExternalId { get; set; }
public string ShopName { get; set; }
public Total Total { get; set; }
public Order Order { get; set; }
public bool? IsOfflineOrder { get; set; }
public override void Initialize(Pipelines.ServicePipelineArgs args)
   {
   base.Initialize(args);
       this.Order = this.GetOrderFromArgs();
            
       this.ExternalId = this.Order.ExternalId;
       this.ShopName = this.Order.ShopName;
       this.Total = this.Order.Total.ToBaseType<Total>();
       this.IsOfflineOrder = this.Order.IsOfflineOrder;
   }
public virtual void Initialize(Order order)
   {
   this.ServicePipelineArgs = null;
       this.Order = order;
       this.ExternalId = this.Order.ExternalId;
       this.ShopName = this.Order.ShopName;
       this.Total = this.Order.Total.ToBaseType<Total>();
       this.IsOfflineOrder = this.Order.IsOfflineOrder;
   }
public override void Serialize(IDictionary<string, object> customValues)
   {
   customValues.Add(Constants.KnownPageEventDataNames.ExternalId, this.ExternalId);
       customValues.Add(Constants.KnownPageEventDataNames.ShopName, this.ShopName);
       customValues.Add(Constants.KnownPageEventDataNames.Total, this.Total);
       customValues.Add(Constants.KnownPageEventDataNames.IsOfflineOrder, this.IsOfflineOrder);
       this.AddEntityToEventDictionary<Order>(this.Order, customValues, Constants.KnownPageEventDataNames.Order);
   }
public override void Deserialize(IDictionary<string, object> customValues)
   {
   this.ExternalId = this.GetMandatoryCustomValueAsObject<string>(Constants.KnownPageEventDataNames.ExternalId, customValues);
       this.ShopName = this.GetMandatoryCustomValueAsObject<string>(Constants.KnownPageEventDataNames.ShopName, customValues);
       this.Total = this.GetMandatoryCustomValueAsObject<Total>(Constants.KnownPageEventDataNames.Total, customValues);
       this.Order = this.GetOptionalCustomValueAsObject<Order>(Constants.KnownPageEventDataNames.Order, customValues);
       var isOfflineOrder = this.GetOptionalCustomValueAsObject<bool?>(Constants.KnownPageEventDataNames.IsOfflineOrder, customValues);
       this.IsOfflineOrder = isOfflineOrder ?? false;
       base.Deserialize(customValues);
   }
protected virtual Order GetOrderFromArgs()
   {
   Assert.IsTrue(this.ServicePipelineArgs.Result is SubmitVisitorOrderResult, "args.Result is SubmitVisitorOrderResult");
       return ((SubmitVisitorOrderResult)this.ServicePipelineArgs.Result).Order;
   }
}

言及する価値のあることがいくつかあります。

  • Initialize方法が2つあります。最初のものは、トリガー ページ イベント メカニズムによって呼び出されているServicePipelineArgsを受け取ります。2番目のものは、オフライン注文プロセスの登録中に使用される注文を受け取ります。

  • Totalプロパティを設定するときは、ToBaseType<Total>()が使用されます。カスタム拡張をページイベントに保存したくないのは、これらのデータタイプがレポートサーバーと処理サーバー(マルチサーバーデプロイメント)で使用できない可能性があるため、これは重要です。

  • Serializeメソッドは、AddEntityToEventDictionary() テンプレート メソッドを使用して、ページ イベントに順序を追加します。

次のコード スニペットは、分析データを使用する方法を示しています。

var customData = AnalyticsDataInitializerFactory.Create<SearchAnalyticsData>();
customData.Deserialize(pageEventData.CustomValues);

上記は、Sitecoreインタラクションからのページ イベント データがあることを前提としています。 Deserializeメソッドを呼び出すと、SearchAnalyticsDataオブジェクトのプロパティに情報が入力されます。

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