/// <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); } }
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); }
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); }
public NullParamInSyncEntityException(SyncDOEntity syncEntity) : base(GetErrorText(syncEntity)) { }