カスタム値マッピングセットを実装してください
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
データ同期プロセスでは、値マッピングセット がソースオブジェクトからターゲットオブジェクトへのデータのマッピングを制御します。通常は、個々の 値マッピング を割り当てて設定します。しかし、データマッピングのロジックが非常に複雑な場合は、コードでデータマッピングを制御することもできます。そのためには、データマッピングを決定するコードを実装するカスタムの値マッピングセットを作成する必要があります。
このトピックのコード例は、以下のデータマッピングロジックを実装しています:
- ソースオブジェクトから 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
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); } } }