Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
        /// <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}");
            }
        }