# Реализация миграции для справочника Страна Для передачи данных сущности из ELMA3/4 в ELMA365 в глобальном модуле необходимо определить класс маппинга. Пример для справочника Страна (с дополнительными полями в конфигурации ELMA3/4). В ELMA365 создаем [Приложение](https://kb.randmgroup.ru/books/rmg-365-nepreryvnaia-migraciia-elma34/page/realizaciya-prilozeniya-strana "Реализация Приложения Страна") как предложено здесь: Элемент обмена данными (маппинг): ```c# using ITino.ELMA.E365.Common.Models; using Newtonsoft.Json; namespace E365 { public class CountryDataItem : BaseDataItem { public override string Path => "app/_clients/rmgCountry"; [JsonProperty(PropertyName = "__name")] public string Name { get; set; } public string Code { get; set; } public string ShortName { get; set; } public long? CountryCode { get; set; } public string EnglishName { get; set; } public string Alpha2 { get; set; } public string Alpha3 { get; set; } public string Location { get; set; } public string LocationPrecise { get; set; } } } ``` Лисенер для регистрации изменений элемента сущности: ```c# using EleWise.ELMA.Runtime.NH.Listeners; using EleWise.ELMA.ComponentModel; using NHibernate.Event; using ITino.ELMA.E365.Common.Components; using EleWise.ELMA.Model.Common; using EleWise.ELMA.Model.Entities; using ITino.ELMA.E365.Common.Managers; using EleWise.ELMA; using ITino.ELMA.CRM.Models; namespace E365 { [Component] public class CountryListener : PostFlushEventListener { public override void OnPostInsert(PostInsertEvent @event) { SyncItem(@event.Entity as ICOCountry, true); } /// public override void OnPostUpdate(PostUpdateEvent @event) { SyncItem(@event.Entity as ICOCountry, true); } public static Pair SyncItem(ICOCountry item, bool syncLink = false) { var data = new CountryDataItem(); if (item == null) return new Pair(data, item); data.Uid = item.Uid; data.Name = item.Name; data.Code = item.Code; data.ShortName = item.ShortName; data.CountryCode = item.CountryCode; data.EnglishName = item.EnglishName; data.Alpha2 = item.Alpha2; data.Alpha3 = item.Alpha3; data.Location = item.Location; data.LocationPrecise = item.LocationPrecise; E365DataItemManager.Instance.PushItem(typeof(CountryDataItem), item.Uid, data, item, SR.T("Страна: {0}", item.Name)); return new Pair(data, item); } } } ``` Обработчик события полной синхронизации справочника. Так же используется для вызова принудительной синхронизации всех данных из хелпера: ```c# using System; using System.Linq; using EleWise.ELMA.ComponentModel; using EleWise.ELMA.Model.Services; using ITino.ELMA.E365.Common.Components; using EleWise.ELMA.Model.Managers; using ITino.ELMA.CRM.Models; namespace E365 { [Component] public class CountrySyncHandler : ForceSyncHandler { public override Type Type => InterfaceActivator.TypeOf(); public override void Process() { EntityManager.Instance.FindAll().ToList().ForEach(x => CountryListener.SyncItem(x)); } } } ```

ICOCountry является расширением модульной сущности ICountry