Добрый день!
Планируется ли реализовать выгрузку фильтров, по которым формируются данные, вместе с выгрузкой в 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.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать