チュートリアル : コードを使用したデータ マッピングの定義

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

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

Data Exchange Frameworkを使用する場合、データをマッピングするための標準的なアプローチは、テナントでマッピングを構成することです。多くの場合、このアプローチは、必要なカスタムコードの量を減らすため、うまく機能します。特定のマッピングは、コードを記述することなく、必要に応じて追加または削除できます。

ただし、マッピング ロジックが複雑すぎて、構成で記述できない場合があります。また、既存のデータマッピングロジックを再利用する必要がある場合もあります。このような場合は、コードを使用してデータ マッピングを定義する必要があります。

このチュートリアルでは、コードベースのデータ マッピングを実装するために必要なコンポーネントを構築、配置、および統合する方法について説明します。

  • データ マッピング用のVisual Studioプロジェクトを作成する

  • カスタム値マッピングセットを実装する

  • カスタム値マッピングセットのテンプレートの作成

  • カスタム値マッピングセットのコンバーターを実装する

  • カスタム値マッピングセットの統合

データ マッピング用のVisual Studioプロジェクトを作成する

データ マッピング ロジックを実装するには、Microsoft Visual Studioプロジェクトが必要です。

プロジェクトを作成するには:

  1. Visual Studioで、次のプロジェクトを作成します。

    Project type

    Class Library (.NET Framework)

    .NET version

    .NET Framework 4.7.1

    Project name

    Examples.DataExchange

  2. 次のNuGetパッケージへの参照を追加します。

    • Sitecore.DataExchange

メモ

Sitecoreの公開NuGetフィードはhttps://nuget.sitecore.com/resources/v3/index.jsonで入手できます。

カスタム値マッピングセットを実装する

データ同期プロセスでは、値マッピングセット によって、ソースオブジェクトからターゲットオブジェクトへのデータのマッピングが制御されます。通常、データ・マッピングを構成するには、個々の 値マッピングを 値マッピング・セットに割り当てます。ただし、データ マッピング ロジックが非常に複雑な場合は、代わりにコードを使用してデータ マッピングを制御できます。これを行うには、データ マッピングを決定するコードを実装するカスタム値マッピング セットを作成する必要があります。

このトピックのコード例では、次のデータ マッピング ロジックを実装します。

  • ソース オブジェクトからNameプロパティを読み取ります。

  • ターゲット オブジェクトのDescriptionプロパティに書き込みます。

  • ターゲット オブジェクトのLastUpdatedプロパティに現在の日付を設定します。

カスタム値マッピングセットを作成するには:

  • Visual Studioで、次のクラスを追加します。

    using Sitecore.DataExchange.DataAccess;
    using Sitecore.DataExchange.DataAccess.Mappings;
    using Sitecore.DataExchange.DataAccess.Readers;
    using Sitecore.DataExchange.DataAccess.Writers;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Examples.DataExchange
    {
        public class CustomMappingSet : IMappingSet
        {
            public CustomMappingSet() { }
    
            public ICollection<IMapping> Mappings => throw new NotImplementedException();
    
            private static IValueReader ValueReader1 = new PropertyValueReader("Name");
            private static IValueWriter ValueWriter1 = new PropertyValueWriter("Description");
            private static IValueWriter ValueWriter2 = new PropertyValueWriter("LastUpdated");
            public bool Run(MappingContext context)
            {
                if (context == null || context.Source == null || context.Target == null)
                {
                    return false;
                }
                ApplyMapping(ValueReader1, ValueWriter1, context, new Mapping { Identifier = "Mapping1" });
                ApplyMapping(DateTime.Now.Date, ValueWriter2, context, new Mapping { Identifier = "Mapping2" });
                return true;
            }
            protected void ApplyMapping(IValueReader reader, IValueWriter writer, MappingContext context, IMapping mapping)
            {
                var context2 = new DataAccessContext();
                var result = reader.Read(context.Source, context2);
                if (!result.WasValueRead)
                {
                    context.RunFail.Add(mapping);
                    return;
                }
                ApplyMapping(result.ReadValue, writer, context, mapping);
            }
            protected void ApplyMapping(object value, IValueWriter writer, MappingContext context, IMapping mapping)
            {
                var context2 = new DataAccessContext();
                var writeSuccess = writer.Write(context.Target, value, context2);
                if (writeSuccess)
                {
                    context.RunSuccess.Add(mapping);
                    return;
                }
                context.RunFail.Add(mapping);
            }
        }
    }

カスタム値マッピングセットのテンプレートの作成

カスタム値マッピング・セットを使用するようにデータ同期プロセスを構成するには、テンプレートを作成して構成する必要があります。

すべての値マッピングはコードで行われるため、ユーザーがカスタム値マッピング セットの下に値マッピング項目を追加できるようにする理由はありません。

新しいテンプレートを追加し、値マッピングを挿入するオプションを削除するには:

  1. コンテンツ エディターで、Templatesに移動します。リボンの ホーム タブの 挿入 グループで、新しいテンプレート をクリックします。

    New template option on menu ribbon
  2. Select nameダイアログで、次の値を入力します。

    Name

    Custom Value Mapping Set

    Base template

    Templates/Data Exchange/Framework> Data Access > Mapping > Value Mapping Set

  3. Next」をクリックします。 Locationダイアログで、「 Templates/Data Exchange/Framework/Data Access/Mapping」を選択します。

    Data access mapping dialog
  4. Next」をクリックします。確認ダイアログで、「 Close」をクリックします。

  5. 新しいテンプレートのアイコンを設定するには、コンテンツ ツリーでテンプレート ( Templates/Data Exchange/Framework/Data Access/Mapping/Custom Value Mapping Setなど) を選択します。

  6. 右側のペインのContentタブで、タイトル の横にあるアイコンをクリックします。

    Value Mapping Set icon
  7. Change Iconダイアログの「Icon」フィールドに、たとえば「Office/32x32/vector_circle.png」と入力します。

  8. テンプレート アイテムを選択した状態で、リボンのBuilder OptionsタブのTemplateグループでStandard valuesをクリックします。

  9. 新しい __Standard Values項目を選択した状態で、リボンのConfigureタブのInsert OptionsグループでAssignをクリックします。

  10. Insert Optionsダイアログの右側のリストで、Value Mappingをクリックします。

    Insert Options dialog
  11. 左矢印 (Left arrow icon) をクリックして、SelectedリストからValue Mappingを削除します。OKをクリックして変更を保存します。

カスタム値マッピングセットのコンバーターを実装する

Data Exchange Frameworkでは、Sitecoreアイテムは設定にのみ使用されます。データ同期プロセスが実行されると、設定はSitecoreアイテムから読み取られ、フレームワーク コンポーネントに変換されます。

カスタム値マッピング セット テンプレートのアイテムIDを使用して、カスタム コンバーター クラスを実装する必要があります。

カスタムコンバータを実装するには:

  1. コンテンツ エディターで、/sitecore/templates/Data Exchange/Framework/Data Access/Mapping/Custom Value Mapping Setに移動します。

  2. リボンのContentタブのQuick Infoセクションで、Item ID値をコピーします。

    Quick Info section on the Content tab, showing the Item ID value.
  3. カスタム コンバーター クラスを作成するには、Visual Studioで次のクラスを追加します。

    using Sitecore.DataExchange;
    using Sitecore.DataExchange.Attributes;
    using Sitecore.DataExchange.Converters;
    using Sitecore.DataExchange.Repositories;
    using Sitecore.Services.Core.Model;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Examples.DataExchange
    {
        [SupportedIds("{00000000-0000-0000-0000-000000000000}")]
        public class CustomMappingSetConverter : BaseItemModelConverter<CustomMappingSet>
        {
            public CustomMappingSetConverter(IItemModelRepository repository) : base(repository)
            {
            }
            private static CustomMappingSet _instance = new CustomMappingSet();
            protected override ConvertResult<CustomMappingSet> ConvertSupportedItem(ItemModel source)
            {
                return ConvertResult<CustomMappingSet>.PositiveResult(_instance);
            }
        }
    }
    手記

    属性SupportedIdsでは、前の手順でコピーしたテンプレート アイテムIDを使用します。

  4. コードをデプロイするには、Visual Studioプロジェクトをビルドします。

  5. Examples.DataExchange.dllファイルをSitecoreサーバーにコピーします。

カスタム値マッピングセットの統合

最後のステップは、カスタム値マッピングセットをData Exchange Frameworkに統合することです。

データ同期プロセスを構成するときは、新しいテナントを作成するときにカスタム値マッピング セットを使用します。既存のテナントの場合は、現在使用されている値マッピング セットをカスタム値マッピング セットに置き換えます。

カスタムコンバータとカスタム値マッピングセットを使用するようにテンプレートを設定するには:

  1. コンテンツ エディターで、/sitecore/templates/Data Exchange/Framework/Data Access/Mapping/Custom Value Mapping Set/__Standard Valuesに移動します。

  2. ConfigureタブのData Exchange Frameworkセクションで、次のフィールド値を設定します。

    価値

    Converter Type

    Examples.DataExchange.CustomMappingSetConverter,Examples.DataExchange

  3. メニュー リボンのConfigureタブのInsert Optionsグループで、Assignをクリックします。

  4. Insert Optionsダイアログの左側のツリーで、Templates/Data Exchange/Framework/Data Access/Mapping/Custom Value Mapping Setに移動します。右矢印 (Arrow pointing right) をクリックして、セットをSelectedリストに追加します。

    Insert Options dialog
  5. OK」をクリックします。

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