---
title: "アウトカムデータクラス"
slug: "outcome-data-classes"
abstract: "アウトカムデータクラスの概要および利用可能な手法。"
---
# アウトカムデータクラス

アウトカムデータクラスは、分析データクラスと構造が非常に似ています。

アウトカムデータクラスは、データがインタラクションにシリアライズされる際に2つのメソッドを公開し、1つのメソッドをコンテンツの再水化に使います。

![0300000B.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/102/sitecore-experience-commerce/images/0300000B.png)

![0300000C.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/102/sitecore-experience-commerce/images/0300000C.png)

名称

概要

Initialize

結果をトリガーする文脈では、このメソッドを呼び出し、サービスリクエストに渡された引数を渡します。特定のアウトカムデータオブジェクトは、RequestオブジェクトとResultオブジェクトを解析してシリアライズしたいデータを抽出する方法を知る責任があります。

Serialize

このメソッドを呼び出して、内容を指定された辞書にシリアライズし、そのインタラクションのページイベントや目標のカスタム値に書き込まれます。

Deserialize

このメソッドを呼び出してデータクラスの内容を再水和化します。現在、Connect Experience ProfileおよびExperience Analyticsのレポートコンポーネントで使用されています

データをシリアライズする際には、以下のユーティリティ手法が利用可能です:

![0300000D.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/102/sitecore-experience-commerce/images/0300000D.png)

-   名称:説明
-   AddEntityToSimpleValues<T>: このテンプレート化されたメソッドは、カスタム値辞書にConnectエンティティを追加する際に使用されます。注:Connectエンティティを直接追加する代わりに、このメソッドを使うことが非常に重要です。このメソッドはいくつかのことをします。まず、ECSによって行われた可能性のある拡張を除去したベースエンティティの値のみを保存します。これは、分散環境ではECS固有のデータ型が利用できない可能性があり、デシリアライズフェーズ中にレポーティングサーバーや処理サーバーに問題を引き起こす可能性があるためです。これら両方のサーバーが自分のドメインおよびコントロール内にある場合、元の「カスタム」ECSエンティティを持つことが望ましい場合があります。この場合、Sitecoreで以下の設定が利用可能です。Commerce.configファイル:有効な値は:BaseCustome両方をベースエンティティのみ保存します。カスタムは元のエンティティを保存します。両方ともベースエンティティと元のバージョンの両方を保存します。デフォルトではBaseは設定されています。結果のカスタムデータは常に文字列で、このメソッド呼び出しで処理されます。詳細については、Experience Profile Commerce タブのトピックをご覧ください。

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

データをリハイドレートする際は、以下のユーティリティ手法を使用します。

![0300000E.png](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/102/sitecore-experience-commerce/images/0300000E.png)

上記のメソッドは、必要な型のシリアライズ済みリストから値を取得することを可能にします。 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)
 {
 valuesConstants.KnownPageEventDataNames.ExternalId = this.ExternalId;
 valuesConstants.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;
 }
}

いくつか言及すべきことがあります:

-   2つの Initialize メソッドがあります。1つ目はトリガーの結果メカニズムが呼び出すServicePipelineArgsを受け取ります。2つ目はオフライン注文の登録時に使われるOrderを受け取ります。
-   Serialize法はAddEntityToSimpleValues()テンプレート法を用いて順序を結果に追加します。

以下のコードスニペットは、結果のカスタムデータをどのように利用するかを示しています:

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

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