Параметры, настройка файла конфигурации и примеры использования
Параметры строки запроса к ODataService
Включение режима экспорта в Excel происходит, если в строке запроса установлен параметр exportExcel=true
.
В запросе на получение документа Excel должны присутствовать следующие параметры для установки свойств в ExportParams
:
colsOrder
- используется для установки порядка колонок в свойствах PropertiesOrder и HeaderCaptionsdetSeparateCols
- используется для установки свойства DetailsInSeparateColumnsdetSeparateRows
- используется для установки свойства DetailsInSeparateRows
Пример строки запроса к ODataService:
http://localhost/odata/Странаs?exportExcel=true&colsOrder=Название/НазваниеCAPTION&detSeparateCols=false&detSeparateRows=false&$filter=contains(Название,'1')
В строке запроса могут присутствовать любые другие параметры, которые необходимы в реализации интерфейсов экспорта данных в Excel - IODataExportService
и ISpreadsheetCustomizer
. Тест с примером реализации данных интерфейсов.
Настройка файла конфигурации
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>
<register type="NewPlatform.Flexberry.IODataExportService, ICSSoft.STORMNET.Business" mapTo="NewPlatform.Flexberry.ORM.ODataService.Tests.CRUD.Read.Excel.ExportExcel,NewPlatform.Flexberry.ORM.ODataService.Tests">
<lifetime type="singleton" />
</register>
</container>
<alias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
</unity>
Настройка файла конфигурации без использования дополнительных параметров
Настройка файла конфигурации для базовой функциональности без использования дополнительных параметров запроса HTTP и без необходимости реализации интерфейсов экспорта данных в Excel - IODataExportService
и ISpreadsheetCustomizer
.
<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<container>
<register name="Export" type="NewPlatform.Flexberry.IExportService, ICSSoft.STORMNET.Business" mapTo="NewPlatform.Flexberry.Reports.ExportToExcel.ExportExcelODataService, NewPlatform.Flexberry.Reports.ExportToExcel">
<lifetime type="singleton" />
</register>
</container>
<alias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
</unity>
Пример реализации интерфейса IODataExportService
/// <summary>
/// Реализация интерфейса для экспорта данных из ODataService.
/// </summary>
public class ExportExcel : IODataExportService
{
/// <summary>
/// Создаёт файл экспорта данных из ORM.
/// </summary>
/// <param name="dataService">Сервис данных ORM.</param>
/// <param name="parameters">Параметры экпорта.</param>
/// <param name="objs">Объекты для экспорта.</param>
/// <param name="queryParams">Параметры в запросе HTTP.</param>
/// <returns>Возвращает файл экспорта в виде MemoryStream.</returns>
public MemoryStream CreateExportStream(IDataService dataService, IExportParams parameters, DataObject[] objs, NameValueCollection queryParams)
{
var exportService = new DataExportLimitedService(parameters, dataService);
var dataExport = exportService.GetDataExport(objs);
var excelService = new ExcelExportService(parameters, queryParams);
excelService.SpreadsheetCustomizer = new SpreadsheetCustomizer();
MemoryStream result = excelService.GetExportStream(dataExport);
return result;
}
}
Пример реализации интерфейса ISpreadsheetCustomizer
/// <summary>
/// Реализация интерфейса для обработки документа Excel.
/// </summary>
public class SpreadsheetCustomizer : ISpreadsheetCustomizer
{
/// <summary>
/// Обработка документа Excel.
/// </summary>
/// <param name="document">Документ Excel.</param>
/// <param name="parameters">Параметры экпорта.</param>
/// <param name="queryParams">Параметры в запросе HTTP.</param>
public void Process(ref SpreadsheetDocument document, IExportParams parameters = null, NameValueCollection queryParams = null)
{
var worksheetPart = document.WorkbookPart.GetPartsOfType<WorksheetPart>().First();
var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
var row = new Row();
string query = null;
foreach (var key in queryParams.AllKeys)
{
if (query != null)
{
query += "&";
}
query += $"{key}={queryParams[key]}";
}
var excelDataType = new ExcelTypeDefinition(CellValues.String, CustomStylesheet.StyleIndexTextAllBordersWrapAlignment);
var cell = CreateCell(query, excelDataType);
row.AppendChild(cell);
sheetData.AppendChild(row);
return;
}
/// <summary>
/// Создание объекта ячейки Excel с указанным значение и форматом.
/// </summary>
/// <param name="value">Значение ячейки.</param>
/// <param name="excelDataType">Формат ячейки.</param>
/// <returns>Объект Cell.</returns>
private static Cell CreateCell(string value, ExcelTypeDefinition excelDataType)
{
var headerCell = new Cell { CellValue = new CellValue(value), StyleIndex = excelDataType.StyleIndex };
if (excelDataType.CellValues != CellValues.Date)
{
headerCell.DataType = new EnumValue<CellValues>(excelDataType.CellValues);
}
return headerCell;
}
}