/// <summary> /// Преобразовывает прикладной объект в объект xml-модели, используя указанный маппер. /// </summary> /// <param name="appObject"></param> /// <returns></returns> private IEnumerable <ISync> GetXMLObjectByMapper <TItem>(DataObject appObject) where TItem : IChangedItem { IEnumerable <ISync> xmlObjects; SyncSetting setting = null; IPropertyMapper mapper = null; try { // Преобразуем вычитанный изменнённый объект в его xml-представление. //TODO Проверить обработку мастеровых и детейловых объектов при маппинге. В маппинге используется дочитка, возможно сброситься состояние полученное при откате изменений. var field = GetXMLDestinationTypeByChangedItem <TItem>(appObject); // Этот объект так же должен поддерживать ISync. var syncObj = appObject as ISync; setting = SettingService.Current.GetSettings(syncObj).First(s => s.Destination.Name == field.FullName); mapper = setting.ExtractMapper <IPropertyMapper>(); xmlObjects = mapper.Map(appObject).Cast <ISync>(); } catch (ArgumentException ex) { throw; } catch (Exception ex) { throw new MappingException(appObject, setting, mapper, ex.Message); } return(xmlObjects); }
/// <summary> /// Получить настройки из SyncDOEntity. /// </summary> /// <param name="syncEntity">SyncDOEntity из которой будем получать настройки</param> /// <param name="type">Тип объекта, который был изменён.</param> /// <param name="mapper">Маппер для объекта, который был изменён.</param> /// <param name="appObjPrimaryKey">Первичный ключ прикладного объекта, который был изменён.</param> private void GetSyncSettings(SyncDOEntity syncEntity, out Type type, out IPropertyMapper mapper, out Guid appObjPrimaryKey) { SyncSetting setting = null; type = null; mapper = null; if (syncEntity.ObjectPrimaryKey == null || !syncEntity.Date.HasValue || !syncEntity.AuditChangePK.HasValue) { throw new NullParamInSyncEntityException(syncEntity); } appObjPrimaryKey = syncEntity.ObjectPrimaryKey.Value; try { setting = SettingService.Current.GetSetting(syncEntity); type = setting.Source.ExtractType(); mapper = setting.ExtractMapper <IPropertyMapper>(); } catch (Exception ex) { throw new LoadSyncSettingException(syncEntity.ObjectPrimaryKey, setting, type, mapper, ex.Message); } }
/// <summary> /// Получить настройки по входящему типу. /// </summary> /// <param name="source">входящий объект</param> /// <param name="destType">Тип объекта, который был изменён.</param> /// <param name="mapper">Маппер для объекта, который был изменён.</param> private void GetSyncSettings(ISync source, out Type destType, out IPropertyMapperWithChangedAttrs mapper) { SyncSetting setting = null; destType = null; mapper = null; if (source == null) { throw new ArgumentNullException(nameof(source)); } try { setting = SettingService.Current.GetSettings(source).First(); destType = setting.Destination.ExtractType(); mapper = setting.ExtractMapper <IPropertyMapperWithChangedAttrs>(); } catch (Exception ex) { var text = "Ошибка: не удалось"; if (setting == null) { text = $"{text} загрузить настройки SyncSettings для входящего типа = {source.GetType().FullName}."; } else if (destType == null) { text = $"{text} получить исходящий тип из настройки SyncSettings.PK - {setting.__PrimaryKey}."; } else if (mapper == null) { text = $"{text} получить маппер из настройки SyncSettings.PK - {setting.__PrimaryKey}."; } throw new Exception($"{text}{Environment.NewLine}{ex.Message}"); } }