3.5.5.2.6. ExcelAction
ExcelAction - действие с коллекцией, предназначенное для экспорта содержимого таблицы в файл XLS.
Если в таблице есть выделенные строки, то действие предлагает пользователю выбор: экспортировать только выделенные строки, или все содержимое. Заголовок и сообщение диалога выбора можно переопределить в проекте путем добавления в главный пакет сообщений с ключами actions.exportSelectedTitle
и actions.exportSelectedCaption
.
Действие реализовано классом com.haulmont.cuba.gui.actions.list.ExcelAction
и объявляется в XML с помощью атрибута type="excel"
. Общие свойства действий можно конфигурировать с помощью атрибутов элемента action
, подробнее см. раздел Декларативное создание действий. Ниже рассматриваются параметры, специфичные для класса ExcelAction
.
-
fileName
- имя файла экспорта. Если не задано, то генерируется автоматически на основе имени сущности. -
exportAggregation
- экспортировать ли строки агрегации, если они существуют в таблице. По умолчанию true.
Например:
<action id="excel" type="excel">
<properties>
<property name="fileName" value="customers"/>
<property name="exportAggregation" value="false"/>
</properties>
</action>
В качестве альтернативы, действие можно инжектировать в контроллер экрана и сконфигурировать, используя сеттеры:
@Named("customersTable.excel")
private ExcelAction customersTableExcel;
@Subscribe
public void onInit(InitEvent event) {
customersTableExcel.setFileName("customers");
customersTableExcel.setExportAggregation(false);
}
Для того, чтобы произвести какие-либо проверки, или взаимодействовать с пользователем перед выполнением действия, необходимо подписаться на событие ActionPerformedEvent
действия и в нужный момент вызвать метод execute()
. В примере ниже перед выполнением действия отображается диалог подтверждения:
@Named("customersTable.excel")
private ExcelAction customersTableExcel;
@Subscribe("customersTable.excel")
public void onCustomersTableExcel(Action.ActionPerformedEvent event) {
dialogs.createOptionDialog()
.withCaption("Please confirm")
.withMessage("Are you sure you want to print the content to XLS?")
.withActions(
new DialogAction(DialogAction.Type.YES)
.withHandler(e -> customersTableExcel.execute()), // execute action
new DialogAction(DialogAction.Type.NO)
)
.show();
}
Можно также подписаться на ActionPerformedEvent
, и вместо вызова метода execute()
действия, использовать класс ExcelExporter
напрямую.