---
title: "ウォークスルー:コードを使ってデータマッピングを定義する"
slug: "walkthrough--using-code-to-define-data-mapping"
abstract: "Sitecore Data Exchange Frameworkのコードを用いたデータマッピングの定義入門。"
---
# ウォークスルー:コードを使ってデータマッピングを定義する

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

しかし、マッピングロジックが構成だけで記述するには複雑すぎる場合もあります。既存のデータマッピングロジックを再利用すべき場合もあります。その場合はコードを使ってデータマッピングを定義しなければなりません。

このウォークスルーでは、コードベースのデータマッピングを実装するために必要なコンポーネントの構築、展開、統合方法を説明します。

-   データマッピングのためのVisual Studioプロジェクトを作成
-   カスタム値マッピングセットを実装してください
-   カスタム値マッピングセットのテンプレートを作成します
-   カスタム値マッピングセット用のコンバーターを実装します
-   カスタム値マッピングセットを統合する

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

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

プロジェクト作成方法:

1.  Visual Studioで以下のプロジェクトを作成します:
    
    **プロジェクトタイプ**
    
    *Class Library (.NET Framework)*
    
    **.NETバージョン**
    
    *.NET フレームワーク 4.7.1*
    
    **プロジェクト名**
    
    *例。DataExchange*
    
2.  以下のNuGetパッケージへの参照を追加してください:
    
    -   Sitecore.DataExchange

> !注Sitecoreの公開NuGetフィードは[https://nuget.sitecore.com/resources/v3/index.json](https://nuget.sitecore.com/resources/v3/index.json)で視聴可能です。

## カスタム値マッピングセットを実装してください

データ同期プロセスでは、[値マッピングセット](https://doc.sitecore.com/xp/ja/developers/def/80/data-exchange-framework/value-mapping-sets.html "Value mapping sets") がソースオブジェクトからターゲットオブジェクトへのデータのマッピングを制御します。通常は、個々の [値マッピング](https://doc.sitecore.com/xp/ja/developers/def/80/data-exchange-framework/value-mappings.html "Value mappings") を割り当てて設定します。しかし、データマッピングのロジックが非常に複雑な場合は、コードでデータマッピングを制御することもできます。そのためには、データマッピングを決定するコードを実装するカスタムの値マッピングセットを作成する必要があります。

このトピックのコード例は、以下のデータマッピングロジックを実装しています:

-   ソースオブジェクトから *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](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/def/80/data-exchange-framework/images/add-template.png)
    
2.  「 **名前選択** 」ダイアログで、以下の値を入力してください:
    
    **名称**
    
    *Custom Value Mapping Set*
    
    **ベーステンプレート**
    
    *テンプレート/データ交換/Framework>データアクセス > マッピング > 値マッピングセット*
    
3.  **「次へ**」をクリックします。**ロケーション**ダイアログで*Templates/Data Exchange/Framework/Data Access/Mapping*を選択します。
    
    ![Data access mapping dialog](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/def/80/data-exchange-framework/images/location4.png)
    
4.  **「次へ**」をクリックします。確認ダイアログで**「閉じる**」をクリックします。
    
5.  新しいテンプレートのアイコンを設定するには、コンテンツツリー内でテンプレートを選択してください。例えば、テンプレート/ *データ交換/フレームワーク/データアクセス/マッピング/カスタム値マッピングセット*などです。
    
6.  右側のペインの **「コンテンツ** 」タブで、タイトルの横にあるアイコンをクリックしてください。
    
    ![Value Mapping Set icon](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/def/80/data-exchange-framework/images/icon4.png)
    
7.  アイコン **変更** ダイアログの **アイコン** フィールドで、例えば*Office/32x32/vector\_circle.png*と入力します。
    
8.  テンプレートアイテムを選択し、リボンのビル **ダーオプション** タブの **テンプレート** グループで「 **標準値**」をクリックします。
    
9.  新しい *\_\_Standard Values*項目を選択し、リボンの **「構成** 」タブの **「Insert Options** 」グループで「 **Assign**」をクリックします。
    
10.  右側のリストにある **「オプション挿入** 」ダイアログで「 *Value Mapping*」をクリックします。
     
     ![Insert Options dialog](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/def/80/data-exchange-framework/images/value-mapping-selected.png)
     
11.  左矢印(![Left arrow icon](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/def/80/data-exchange-framework/images/left-arrow.png))をクリックすると、**選択**リストから*Value Mapping*を削除してください。変更を保存するには**OK**をクリックしてください。
     

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

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

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

カスタムコンバーターの実装方法:

1.  コンテンツエディターで */sitecore/templates/Data Exchange/Framework/Data Access/Mapping/Custom Value Mapping Set*へ移動します。
    
2.  リボンの **コンテンツ** タブの **クイックインフォ** セクションで、*Item ID*値をコピーします。
    
    ![Quick Info section on the Content tab, showing the Item ID value.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/def/80/data-exchange-framework/images/quick-info-section.png)
    
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.  **データ交換フレームワーク**セクションの**「構成**」タブで、以下のフィールド値を設定します:
    
    フィールド
    
    価値
    
    **コンバータータイプ**
    
    *例:DataExchange.CustomMappingSetConverter、例.DataExchange*
    
3.  メニューリボンの「 **構成** 」タブの **「オプションを挿入** 」グループで「 **割り当て**」をクリックします。
    
4.  左側のツリーの **「オプション挿入** 」ダイアログで、「 *テンプレート/データ交換/フレームワーク/データアクセス/マッピング/カスタム値マッピングセット*」へ移動します。右矢印(![Arrow pointing right](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/def/80/data-exchange-framework/images/right-arrow.png))をクリックすると、**セットを「選択** 済みリスト」に追加できます。
    
    ![Insert Options dialog](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/def/80/data-exchange-framework/images/custom-value-mapping-set-added-to-insert-options.png)
    
5.  **OK**をクリックします。