Действия экспорта

ExportAction

ExportAction - это базовое действие списка, предназначенное для экспорта содержимого таблицы данных с использованием указанного экспортера. Для этого действия требуется экземпляр DataGridExporter.

Это действие можно настроить для использования с компонентами dataGrid и treeDataGrid.

В ExportAction доступны методы для управления функциями, которые извлекают значения из колонок DataGrid:

  • addColumnValueProvider() добавляет функцию для получения значений из колонки.

  • removeColumnValueProvider() удаляет функцию-провайдер значений колонки по id колонки.

Режимы экспорта

ExportAction имеет три режима экспорта: все строки, текущая страница и выбранные строки.

export action
  • Опция All rows экспортирует все записи базы данных, соответствующие примененному фильтру и начальному запросу, использованному для заполнения данных экрана.

    Загрузка и экспорт данных происходят пакетами для оптимизации производительности и управления использованием памяти. Размер пакета настраивается через свойство приложения jmix.gridexport.export-all-batch-size. Размер пакета по умолчанию - 1000.

    При экспорте всех записей стратегия пагинации по умолчанию - keyset. Чтобы изменить это, используйте свойство приложения jmix.gridexport.export-all-pagination-strategy.

  • Опция Current page экспортирует только содержимое, отображаемое на текущей странице таблицы данных.

  • Опция Selected rows экспортирует только записи, выбранные в таблице данных.

Набор опций экспорта может быть определен конкретным действием с помощью его метода setAvailableExportModes() и соответствующего свойства availableExportModes в XML. Набор опций по умолчанию определяется свойством приложения jmix.gridexport.default-export-modes.

Вы можете переопределить заголовок и сообщение диалогового окна, добавив сообщения с ключами exportConfirmationDialog.header и exportConfirmationDialog.message в ваш пакет сообщений.

Экспорт колонок

Вы можете управлять тем, какие колонки включаются в экспорт, используя три различных варианта фильтрации:

  1. Предопределенный предикат фильтрации колонок

    Эта опция позволяет выбрать из предопределенного набора поведений фильтрации, чтобы определить, какие колонки экспортируются. Настройте это с помощью свойства приложения jmix.gridexport.default-columns-to-export или дополнительного свойства columnsToExport непосредственно в действии экспорта. Доступные варианты:

    • ALL_COLUMNS: Экспортирует все колонки, независимо от видимости.

    • VISIBLE_COLUMNS: Экспортирует только колонки, видимые в данный момент в DataGrid. Колонки, отмеченные как видимые с помощью компонента gridColumnVisibility, включаются в список экспортируемых колонок. Это означает, что скрытые колонки будут исключены.

      Значение по умолчанию для новых проектов - VISIBLE_COLUMNS. В существующих проектах предыдущее поведение экспорта (вероятно, ALL_COLUMNS) будет перенесено в файл application.properties.

      Ниже приведен пример, показывающий, как настроить экспорт всех колонок для dataGrid клиентов.

      <dataGrid id="customersDataGrid" dataContainer="customersDc"
                width="100%"
                minHeight="20em">
          <actions>
              <action id="excelExport" type="grdexp_excelExport">
                  <properties>
                      <property name="columnsToExport" value="ALL_COLUMNS"/>
                  </properties>
              </action>
          </actions>
          <columns>
              <column property="firstName"/>
              <column property="lastName"/>
              <column property="email"/>
              <column property="age"/>
          </columns>
      </dataGrid>
      Этот метод имеет наименьший приоритет; более специфичные методы переопределят эту настройку.
  2. Гибкий предикат фильтрации

    Этот механизм обеспечивает высоконастраиваемую логику выбора колонок. Создайте метод, аннотированный @Install, предназначенный для действия экспорта. Этот метод получает объект Grid.Column и возвращает true, если колонка должна быть экспортирована, и false в противном случае.

    @Install(to = "customersDataGrid.excelExport", subject = "columnsExportFilter")
    private boolean customersDataGridExcelExportColumnsExportFilter(
            final Grid.Column<Customer> column) {
        return column.getKey().contains("firstName")
                || column.getKey().contains("email");
    }

    Чтобы сгенерировать заглушку обработчика в Jmix Studio, используйте вкладку Handlers панели инспектора Jmix UI, или команду Generate Handler, доступную на верхней панели контроллера экрана и через меню CodeGenerate (Alt+Insert / Cmd+N).

    Этот подход имеет средний приоритет, то есть он переопределит предопределенный предикат фильтрации колонок, но будет переопределен явным указанием ключей колонок.
  3. Явное указание ключей колонок:

    Этот вариант обеспечивает самый прямой контроль над тем, какие колонки экспортируются. Используйте дополнительное свойство columnKeysToExport действия экспорта, чтобы определить разделенный запятыми список ключей колонок для экспорта в определении <action>:

    <action id="excel" type="grdexp_excelExport">
        <properties>
            <property name="columnKeysToExport" value="email, firstName, lastName"/>
        </properties>
    </action>
    Этот вариант имеет наивысший приоритет и переопределит любые другие настройки.

Порядок приоритета. Итак, варианты фильтрации обрабатываются в следующем порядке:

  1. Явное указание ключей колонок.

  2. Гибкий предикат фильтрации.

  3. Предопределенный предикат фильтрации колонок.

ExcelExportAction

ExcelExportAction - это действие, расширяющее ExportAction и предназначенное для экспорта содержимого таблицы данных в формате XLSX.

Действие реализовано классом io.jmix.gridexportflowui.action.ExcelExportAction и должно быть определено в XML с использованием атрибута действия type="grdexp_excelExport" для компонента списка. Общие параметры действия можно настроить через XML-атрибуты внутри элемента action. Для получения дополнительной информации обратитесь к документации Декларативные действия.

Например:

<actions>
    <action id="excelExport" type="grdexp_excelExport"/>
</actions>

Альтернативно, вы можете инжектировать действие в контроллер экрана и настроить его параметры с помощью методов-сеттеров:

@ViewComponent("customersDataGrid.excelExport")
private ExcelExportAction customersDataGridExcelExport;

@Subscribe
public void onInit(final InitEvent event) {
    customersDataGridExcelExport.setText("Export data grid to Excel");
}

Вы также можете переопределить локализованные строки формата данных. Настройки строк формата по умолчанию для экспорта в Excel выглядят следующим образом:

excelExporter.label=Excel
excelExporter.true=Yes
excelExporter.false=No
excelExporter.empty=[Empty]
excelExporter.bytes=<bytes>
excelExporter.timeFormat=h:mm
excelExporter.dateFormat=m/d/yy
excelExporter.dateTimeFormat=m/d/yy h:mm
excelExporter.integerFormat=#,##0
excelExporter.doubleFormat=#,##0.00##############
excelExporter.decimalFormat=#,##0.00

JsonExportAction

JsonExportAction - это действие, расширяющее ExportAction и предназначенное для экспорта содержимого таблицы данных в формате JSON.

Действие реализовано классом io.jmix.gridexportflowui.action.JsonExportAction и должно быть определено в XML с использованием атрибута действия type="grdexp_jsonExport" для компонента списка. Общие параметры действия можно настроить через XML-атрибуты внутри элемента action. Для получения дополнительной информации обратитесь к документации Декларативные действия.

Например:

<actions>
    <action id="jsonExport" type="grdexp_jsonExport"/>
</actions>

Альтернативно, вы можете инжектировать действие в контроллер экрана и настроить его параметры с помощью методов-сеттеров:

@ViewComponent("customersDataGrid.jsonExport")
private JsonExportAction customersDataGridJsonExport;

@Subscribe
public void onInit(final InitEvent event) {
    customersDataGridJsonExport.setText("Export data grid to JSON");
}

Ограничения

  • При экспорте TreeDataGrid колонка, содержащая свойство иерархии, не будет включать никаких отступов.

  • Экспорт сущностей с составным первичным ключом не поддерживается.