Esempio n. 1
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);
            }
        }
Esempio n. 2
0
        private TItem CreateChangedItem <TItem>(SyncDOEntity syncEntity, ISync xmlObjects, List <string> changedField)
            where TItem : IChangedItem
        {
            var errorMessage = "";
            var changedItem  = default(TItem);

            try
            {
                changedItem            = Activator.CreateInstance <TItem>();
                changedItem.ChangeDate = syncEntity.Date;
                var objectStatus = tState.updated;
                switch (syncEntity.ObjectStatus)
                {
                case ObjectStatus.Deleted:
                    objectStatus = tState.deleted;
                    break;

                case ObjectStatus.Created:
                    objectStatus = tState.created;
                    break;
                }

                changedItem.State = objectStatus;
                var xmlObjType = xmlObjects.GetType();
                var field      = typeof(TItem).GetFields(BindingFlags.Instance | BindingFlags.NonPublic)
                                 .FirstOrDefault(x => x.FieldType == xmlObjType);
                if (field != null)
                {
                    field.SetValue(changedItem, xmlObjects);
                }
                else
                {
                    errorMessage = $"Не найдено свойство типа {xmlObjType.FullName} в объекте {typeof(TItem).FullName}";
                }

                if (changedField != null && changedField.Any())
                {
                    changedItem.СhangedAttributes = new List <AttributeDefinition>();
                    changedItem.СhangedAttributes.AddRange(changedField.Select(x => new AttributeDefinition(x)));
                }
            }
            catch (Exception ex)
            {
                errorMessage = $"{ex.Message}";
            }

            if (!string.IsNullOrEmpty(errorMessage))
            {
                throw new Exception(
                          $"Ошибка: не удалось создать ChangedItem типа {typeof(TItem).Name}{Environment.NewLine}{errorMessage}");
            }

            return(changedItem);
        }
Esempio n. 3
0
        private static string GetErrorText(SyncDOEntity syncEntity)
        {
            var text = $"Ошибка: обнаружена запись SyncDOEntity({PKHelper.GetGuidByObject(syncEntity)})";

            if (syncEntity.ObjectPrimaryKey == null)
            {
                text = $"{text} с пустым ключом на изменившийся объкт.";
            }
            else if (!syncEntity.Date.HasValue)
            {
                text = $"{text} с пустой датой изменения.";
            }
            else if (!syncEntity.AuditChangePK.HasValue)
            {
                text = $"{text} с пустым ключом на соответствующую запись изменения аудита.";
            }

            return(text);
        }
Esempio n. 4
0
 public NullParamInSyncEntityException(SyncDOEntity syncEntity) : base(GetErrorText(syncEntity))
 {
 }