private TableXsd ArchiveTableXsd(FileInfo path, ITable table, int tableNo) { if (path == null) { throw new ArgumentNullException(nameof(path)); } if (table == null) { throw new ArgumentNullException(nameof(table)); } if (tableNo < 1) { throw new DeliveryEngineRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.IllegalValue, tableNo, "tableNo")); } ReadOnlyObservableCollection <IFilter> fieldFilters = table.FieldFilters; var columnId = 1; var xsd = new TableXsd(table, tableNo, path, _fileIndex); foreach (var field in table.Fields.Where(m => ExcludeField(m, fieldFilters) == false)) { field.ColumnId = $"c{columnId++}"; xsd.AddColumn(field.ColumnId, field.DatatypeOfTarget, field.Nullable); } xsd.Perist(); return(xsd); }
private int ArchiveTableXml(FileInfo path, TableXsd tableXsd, ITable table, IEnumerable <IEnumerable <IDataObjectBase> > dataRows, int tableNo, object syncRoot) { if (path == null) { throw new ArgumentNullException(nameof(path)); } if (tableXsd == null) { throw new ArgumentNullException(nameof(tableXsd)); } if (dataRows == null) { throw new ArgumentNullException(nameof(dataRows)); } if (table == null) { throw new ArgumentNullException(nameof(table)); } if (tableNo < 1) { throw new DeliveryEngineRepositoryException(Resource.GetExceptionMessage(ExceptionMessage.IllegalValue, tableNo, "tableNo")); } if (syncRoot == null) { throw new ArgumentNullException(nameof(syncRoot)); } ReadOnlyObservableCollection <IFilter> fieldFilters = table.FieldFilters; using (var tableXml = new TableXml(tableXsd, path, _fileIndex, tableNo)) { var rowCount = 0; foreach (var dataRow in dataRows) { tableXml.AddRow(); foreach (var dataObject in dataRow.Where(m => ExcludeField(m.Field, fieldFilters) == false)) { var genericMethodForValue = dataObject.GetType() .GetMethod("GetTargetValue", new Type[] { }) .MakeGenericMethod(dataObject.Field.DatatypeOfTarget); var value = genericMethodForValue.Invoke(dataObject, null); tableXml.AddField(dataObject.Field.ColumnId, value); } tableXml.CloseRow(); rowCount++; } tableXml.Persist(syncRoot); return(rowCount); } }