1. 連絡先

カスタムコンタクトファセットを作成する

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

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

Sitecore Experience Database (xDB) では、独自のカスタム組織固有のデータで コンタクト を拡張する場合は、カスタム のコンタクト ファセットを作成できます。

ファセットは、連絡先の特定の側面を説明する、階層的に整理された関連属性のグループです。ファセットは、設定時に連絡先に追加したり、連絡先から削除したりできる属性の最小単位です。

カスタムコンタクトファセットには、次の特性があります。

  • 属性 – 属性は要素のサブアイテムです。たとえば、Address要素には、メールアドレスなどの属性を含めることができます。属性には、文字列、GUID、整数、または浮動小数点数を指定できます。

  • 要素 – 要素は、ファセットなどの1つ以上のメンバーまたは属性を含むデータ構造です。

  • ディクショナリ – ディクショナリには、名前付き要素が含まれています。ディクショナリの各要素は、一意のキーによって識別されます。

    メモ

    IFacetインターフェイスは、要素ツリーのルートを識別できるマーカー インターフェイスです

カスタムファセットを作成するには、次のことを行う必要があります。

契約を作成する

コントラクトを作成するには:

  1. 要素またはファセットの構造を定義するコントラクトを作成します。コントラクトは、ファセットが格納および返すことができるようにする属性の定義です。要素のコントラクトを定義するには、IElementインターフェイスを拡張するインターフェイスを実装します。ファセットの場合は、IFacetインターフェースを拡張します。

    次の例では、Placesファセットのコントラクトを定義します。

    public interface ICoordinate : IElement
    {
        float Longitude { get; set; }
        float Latitude { get; set; }
    }
    public interface IPlace : IElement
    {
        string Description { get; set; }
        ICoordinate Coordinate { get; }
    }
    public interface IPlaces : IFacet
    {
        IElementDictionary<IPlace> Places { get; }
    }
  2. 整数、日付/時刻、GUID、文字列、浮動小数点数などの単純な属性を追加するには、必要な型を返すgetterとsetterの両方を持つプロパティを追加します。

    例えば:

    float Longitude { get; set; }
  3. 子要素を追加するには、対象の要素のコントラクトを返すgetterのみを持つプロパティを定義します。

    例えば:

    ICoordinate Coordinate { get; }
  4. ディクショナリまたは子要素のコレクションを追加するには、getterのみを使用してプロパティを定義します。例えば:

    IElementDictionary<ICoordinate> Coordinates { get; }
    IElementCollection<ICoordinate> Coordinates { get; }

    ディクショナリと単純属性のコレクションはサポートされていません。たとえば、整数値のディクショナリが必要な場合は、このセクションの例に示すように、1つの整数属性を持つ要素を定義し、この要素をコレクションまたはディクショナリで使用できます。

契約の実施

契約を履行するには:

  • 属性、コレクション、およびディクショナリをコンストラクタの基本クラスに登録するには、次のヘルパー メソッドを使用します。

    this.EnsureAttribute<TValue>( string name );
    this.EnsureElement<TElement>( string name );
    this.EnsureDictionary<TElement>( string name );
    this.EnsureCollection<TElement>( string name );

    これらの方法により、メンバーがモデルに登録されます。次に示すように、コントラクトのプロパティを実装します。

      [Serializable]
      internal class Coordinate : Element, ICoordinate
      {
        private const string LONGITUDE = "Longitude";
        private const string LATITUDE = "Latitude";
        public float Longitude
        {
            get
            {
                return this.GetAttribute<float>( LONGITUDE );
            }
            set
            {
                this.SetAttribute( LONGITUDE, value );
            }
        }
        public float Latitude
        {
            get
            {
                return this.GetAttribute<float>( LATITUDE );
            }
            set
            {
                this.SetAttribute( LATITUDE, value );
            }
        }
        public Coordinate()
        {
          this.EnsureAttribute<float>(LONGITUDE);
          this.EnsureAttribute<float>(LATITUDE);
        }
      }
    手記

    クラスがSerializable属性でマークされていることを確認します。この属性は、このクラスのインスタンスを共有セッションおよび送信キューに格納できるようにするために必要です。

    この実装にコードを追加しないでください。この例の実装クラスはまだ実装されていません。

新しいファセットを使用するようにシステムを構成する

ファセット構造を定義して実装したら、新しいファセットを使用するようにSitecoreを設定する必要があります。

  • Sitecore.Analytics.Model.config設定ファイルを開き、すべての要素を登録します。要素は、複数のファセットで使用される場合でも、一度だけ登録する必要があります。

    手記

    ファセットは、他のすべての要素と同じ方法で登録する必要があります。

    <model>
      <elements>
        <element interface="type" implementation="type" />
      </element>
    </model>

    Sitecore.Analytics.Model.configファイルでは、インターフェイス属性は、データ モデルのコントラクトで定義されているタイプ (ICoordinateIPlaceIPlacesなど) です。実装タイプは、データをメモリに保持するためにSitecoreによってインスタンス化されるコントラクトの実際の実装です。

モデル構成の更新

拡張するモデルを更新するには:

  • 拡張するエンティティタイプを見つけて、新しいファセットを登録します。

    <model>
      <entities>
        <entity>
          <facets>
            <facet name="name" contract="type" />
          </facets>
        </entity>
      </entities>
    </model>

    この例では、ノード <entity> は、拡張するエンティティ タイプ ( <contact>など) に置き換えられます。 name属性は、コンタクトモデルでファセットにアクセスできる名前です。これは、GetFacet<TFacet>( string name ) メソッドに渡される文字列値です。

     IPlaces places = contact.GetFacet<IPlaces>( "Visited Places" );
この記事を改善するための提案がある場合は、 お知らせください!