Добрый день!
Планируется ли реализовать выгрузку фильтров, по которым формируются данные, вместе с выгрузкой в Excel?
Нравится
1 комментарий
9 июня 2020 16:21
Для того, чтобы выгрузить записи по условию фильтрации, нужно зайти в группу или вручную настроить фильтр, а затем произвести выгрузку.
Если Вы имеете в виду прямо в XLSX-файле выводить информацию о фильтре, то надо дорабатывать логику функции PrepareExport в схеме ExportToExcelService:
/// <summary> /// Creates and writes excel stream to local storage and return export key. /// </summary> /// <param name="esqSerialized">Serialized export esq.</param> /// <returns><see cref="ExportToExcelResponse"/>.</returns> public virtual ExportToExcelResponse PrepareExport(string esqSerialized) { esqSerialized.CheckArgumentNull("ExportToExcelService.PrepareExport esqSerialized"); UserConnection.CheckArgumentNull("ExportToExcelService UserConnection"); UserConnection.DBSecurityEngine.CheckCanExecuteOperation(CanExportGridOperationCode); var selectQuery = Json.Deserialize<SelectQuery>(esqSerialized); selectQuery.CheckArgumentNull("ExportToExcelService.PrepareExport deserialized SelectQuery"); var entitySchemaQuery = selectQuery.BuildEsq(UserConnection); entitySchemaQuery.CheckArgumentNull("ExportToExcelService.PrepareExport entitySchemaQuery"); entitySchemaQuery = RemoveBinaryColumnsFromQuery(entitySchemaQuery); ExcelConverter.BatchSize = BatchSize; var excelData = ExcelConverter.GetExcelData(entitySchemaQuery, UserConnection); var storableExcelStream = new StorableStreamEntity { Data = excelData }; var id = StreamRepository.Create(storableExcelStream); return new ExportToExcelResponse { Key = id.ToString(), Count = ExcelConverter.ExportedRowCount }; }
Или, скорее, вызываемую из неё GetExcelData в схеме ExcelConverter:
/// <summary> /// Returns excel data by entity schema query. /// </summary> /// <param name="entitySchemaQuery">Export data entity schema query.</param> /// <param name="userConnection">User connection.</param> /// <returns>Excel data bytes.</returns> public virtual byte[] GetExcelData(EntitySchemaQuery entitySchemaQuery, UserConnection userConnection) { entitySchemaQuery.CheckArgumentNull("ExcelConverter.GetExcelData entitySchemaQuery"); userConnection.CheckArgumentNull("ExcelConverter.GetExcelData userConnection"); _isPrimaryColumnSelected = IsPrimaryColumnSelected(entitySchemaQuery); if (!_isPrimaryColumnSelected) { entitySchemaQuery.PrimaryQueryColumn.IsAlwaysSelect = true; } using (var excelStream = new MemoryStream()) { try { var spreadsheetDocument = CreateExcelFile(excelStream, entitySchemaQuery); SaveHeader(entitySchemaQuery); SaveData(entitySchemaQuery, userConnection); CloseExcelFile(spreadsheetDocument); } catch (Exception exception) { Log.Error($"Error during export to excel {exception}"); throw new ExportToExcelException(exception); } return excelStream.ToArray(); } }
Сейчас сериализованный ESQ с фильтром и набором колонок передаётся в первую в текстовом параметре в виде наподобие:
esqSerialized: "{"rootSchemaName":"Opportunity","operationType":0,"includeProcessExecutionData":true,"filters":{"items":{"4d035dfe-121a-4ac7-a729-353f872bf977":{"items":{"FixedFilters":{"items":{},"logicalOperation":0,"isEnabled":true,"filterType":6}},"logicalOperation":0,"isEnabled":true,"filterType":6}},"logicalOperation":0,"isEnabled":true,"filterType":6},"columns":{"items":{"Title":{"caption":"Название","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Title"}},"Mood":{"caption":"Настроение","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Mood"}},"Account":{"caption":"Контрагент","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Account"}},"Contact":{"caption":"Контакт","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Contact"}},"Stage":{"caption":"Стадия","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Stage"}},"Owner":{"caption":"Ответственный","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Owner"}},"Amount":{"caption":"Сумма продажи","orderDirection":0,"orderPosition":-1,"isVisible":true,"expression":{"expressionType":0,"columnPath":"Amount"}}}},"isDistinct":false,"rowCount":-1,"rowsOffset":-1,"isPageable":false,"allColumns":false,"useLocalization":true,"useRecordDeactivation":false,"serverESQCacheParameters":{"cacheLevel":0,"cacheGroup":"","cacheItemName":""},"queryOptimize":false,"useMetrics":false,"querySource":0,"ignoreDisplayValues":false,"isHierarchical":false}"
А во вторую — в виде обычной ESQ.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать