Реализация миграции для документа Счет исходящий
Для передачи данных сущности из ELMA3/4 в ELMA365 в глобальном модуле необходимо определить класс маппинга. Пример для справочника Страна (с дополнительными полями в конфигурации ELMA3/4). В ELMA365 создаем Приложение (документ) как предложено здесь:
Элемент обмена данными (маппинг):
using System;
using ITino.ELMA.E365.Common.Models;
using ITino.ELMA.Accounting.Documents.Models;
namespace E365
{
public class OutInvoiceDataItem : DocumentDataItem
{
public override string Path => "app/_clients/rmgOutInvoice";
public string Number { get; set; }
public DateTime Date { get; set; }
public OutInvoiceDataItem(DOOutInvoice document) : base(document)
{
}
}
}
Лисенер для регистрации изменений элемента сущности:
using EleWise.ELMA.ComponentModel;
using EleWise.ELMA.Runtime.NH.Listeners;
using NHibernate.Event;
using ITino.ELMA.Accounting.Documents.Models;
using EleWise.ELMA.Model.Common;
using ITino.ELMA.E365.Common.Components;
using EleWise.ELMA.Model.Entities;
using ITino.ELMA.E365.Common.Managers;
using EleWise.ELMA;
namespace E365
{
[Component]
public class OutInvoiceListener : PostFlushEventListener
{
public override void OnPostInsert(PostInsertEvent @event)
{
SyncItem(@event.Entity as DOOutInvoice, true);
}
/// <inheritdoc />
public override void OnPostUpdate(PostUpdateEvent @event)
{
SyncItem(@event.Entity as DOOutInvoice, true);
}
public static Pair<IBaseDataItem, IEntity> SyncItem(DOOutInvoice item, bool syncLink = false)
{
var data = new OutInvoiceDataItem(item);
if (item == null)
return new Pair<IBaseDataItem, IEntity>(data, item);
data.Number = item.IEEDocNumber;
data.Date = item.IEEDocDate;
E365DataItemManager.Instance.PushItem(typeof(OutInvoiceDataItem), item.Uid, data, item, SR.T("Счет исходящий: {0}", item.Name));
data.PushVersion();
return new Pair<IBaseDataItem, IEntity>(data, item);
}
}
}
Обработчик события полной синхронизации справочника. Так же используется для вызова принудительной синхронизации всех данных из хелпера:
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 : IForceSyncHandler
{
public Type Type => InterfaceActivator.TypeOf<ICOCountry>();
public bool Enabled => true;
public void Process()
{
EntityManager<ICOCountry>.Instance.FindAll().ToList().ForEach(x => CountryListener.SyncItem(x));
}
}
}