結果データクラス

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

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

Outcome Dataクラスは、Analytics Dataクラスと構造がよく似ています。

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

名前

形容

Initialize

結果をトリガーするコンテキストでは、このメソッドを呼び出し、サービス要求に渡された引数を渡します。特定のOutcome Dataオブジェクトは、シリアル化するデータを抽出するためにRequestオブジェクトとResultオブジェクトを解析する方法を知る必要があります。

Serialize

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

Deserialize

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

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

名前

形容

AddEntityToSimpleValues<T>

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

メモ

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

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

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

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

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

  • カスタムメイド

  • 両方とも

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

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

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

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

結果のカスタムデータは常に文字列であり、このメソッド呼び出しによって処理されます。

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

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

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

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

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

public class SubmittedOrderOutcomeData : BaseOutcomeData
{
public string ExternalId { get; set; }
   public string ShopName { get; set; }
   public Order Order { get; set; }
   public override void Initialize(Pipelines.ServicePipelineArgs args)
   {
   base.Initialize(args);
       this.Order = this.GetOrderFromArgs();
       if (this.Order != null)
       {
       this.ExternalId = this.Order.ExternalId;
           this.ShopName = this.Order.ShopName;
       }
   }
public void Initialize(Order order)
{
this.ServicePipelineArgs = null;
       this.Order = order;
       if (this.Order != null)
       {
       this.ExternalId = this.Order.ExternalId;
           this.ShopName = this.Order.ShopName;
       }
   }
public override void Serialize(Dictionary<string, string> values)
   {
   if (this.Order != null)
       {
       values[Constants.KnownPageEventDataNames.ExternalId] = this.ExternalId;
           values[Constants.KnownPageEventDataNames.ShopName] = this.ShopName;
           this.AddEntityToSimpleValues<Order>(this.Order, values, Constants.KnownPageEventDataNames.Order);
       }
   }
public override void Deserialize(Dictionary<string, string> values)
   {
   this.ExternalId = this.GetMandatoryValueAsString(Constants.KnownPageEventDataNames.ExternalId, values);
       this.ShopName = this.GetMandatoryValueAsString(Constants.KnownPageEventDataNames.ShopName, values);
       this.Order = this.GetOptionalValueAsObject<Order>(Constants.KnownPageEventDataNames.Order, values);
       base.Deserialize(values);
   }
public override decimal GetMonetaryValue()
   {
   return this.Order.Total == null ? 0m : this.Order.Total.Amount;
   }
public virtual bool? IsOfflineOrder()
   {
   bool? isOfflineOrder = false;
       if (this.Order != null)
       {
       isOfflineOrder = this.Order.IsOfflineOrder;
       }
       return isOfflineOrder;
   }
protected virtual Order GetOrderFromArgs()
   {
   if (this.ServicePipelineArgs != null && this.ServicePipelineArgs.Result is SubmitVisitorOrderResult)
       {
       return ((SubmitVisitorOrderResult)this.ServicePipelineArgs.Result).Order;
       }
       return null;
   }
}

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

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

  • Serializeメソッドは、AddEntityToSimpleValues() テンプレート メソッドを使用して、結果に順序を追加します。

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

Dictionary<string, string> customValues = 
JsonConvert.DeserializeObject<Dictionary<string, string>>
(contactOutcome.CustomValues[Constants.KnownAnalyticsKeys.SitecoreCommerceOutcomeKey]);
var outcomeData = OutcomeDataFactory.Create<SubmittedOrderOutcomeData>();
outcomeData.Deserialize(customValues);

上記は、コンタクトのSitecoreの結果があることを前提としています。 ContactOutcomeクラスには、カスタム値の情報がシリアル化された形式で含まれています。つまり、SubmittedOrderOutcomeData deserializeメソッドを呼び出す前に、カスタム値ディクショナリを逆シリアル化する必要があります。近い将来、この機能をBaseOutcomeDataクラスにカプセル化する予定です。

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