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

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

このページの翻訳は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<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);
            }
        }
    }
この記事を改善するための提案がある場合は、 お知らせください!