Выгрузка всех данных (колонок) в Excel

Создали сущность (условно назовем её Theproblementity) со значительным количеством полей (16 штук), создали для неё стандартный browse с таблицей вида <dataGrid id=“theproblementitiesTable”… Так как количество полей большое, часть полей по умолчанию показывается <column id=“fieldName” property=“fieldName” ) , а часть скрыто (<column id=“fieldName” property=“fieldName” collapsed=“true” ). В таблице есть стандартные 4 действия

        <actions>
            <action id="create" type="create"/>
            <action id="edit" type="edit"/>
            <action id="remove" type="remove"/>
            <action id="excel" type="excel"/>
        </actions>

И четыре кнопки для них

        <buttonsPanel id="buttonsPanel"
                      alwaysVisible="true">
            <button id="createBtn" action="theproblementitiesTable.create"/>
            <button id="editBtn" action="theproblementitiesTable.edit"/>
            <button id="removeBtn" action="theproblementitiesTable.remove"/>
            <button id="excelBtn" action="theproblementitiesTable.excel"/>
        </buttonsPanel>

Проблема возникла во взаимодействии кнопки excel и опции “Показать все” в настройках отображаемых колонок таблицы. Последовательность действий по воспроизведению.

  1. Открыть таблицу
    Результат: отображается половина колонок, как и ожидалось, так как вторая половина скрыта по умолчанию
  2. Нажать на иконку настроек таблицы, выбрать выбрать “Показать все”
    Результат- на экране показываются все колонки
  3. Выгрузить данные в Excel
    Ожидаемый результат: выгружены все колонки
    Реальный результат: в файле будут только те колонки, которые отображались до включения всех колонок.

Если колонки сначала поочередно отобразить вручную, то их выгрузка выполняется корректно.

Аналогично со “Скрыть все”: убрать все столбцы, отобразить какой-то один/несколько, выгрузить в Excel - выгружаются дефолтные столбцы.
Проблема воспроизвелась стабильно на множестве entity в -browse.xml которых используется dataGrid. Контроллер не при чем он почти во всех случаях пустой котлин-класс вида

@ UiController(“pr_Theproblementity.browse”)
@ UiDescriptor(“theproblementity-browse.xml”)
@ LookupComponent(“theproblementitiesTable”)
@ LoadDataBeforeShow
class TheproblementityBrowse : StandardLookup()

где theproblementity-browse.xml - автосгенеренный Кубой дескриптор с dataGrid по имени theproblementitiesTable и указанными ранее четырьмя действиями создать-изменить-удалить-эксель

Версия кубы - 7.2.9, 7.2.10, браузер - любой.

Примечание программиста - дебажил вариант “Показать все” + Excel, в процессе дебага поставил брекпоинт на com.haulmont.cuba.gui.components.actions.ExcelAction:249

Там есть код
List<DataGrid.Column> columns = dataGrid.getVisibleColumns().stream()
.filter(col -> !col.isCollapsed())
.collect(Collectors.toList());

Так вот, col.isCollapsed() действительно true для половины колонок, хотя после “Показать все” isCollapsed должно было стать false везде.

1 симпатия

Добрый день, @sapalitko!

Спасибо, что сообщили о проблеме. Я завел задачу в Github. Мы постараемся исправить проблему в следующем релизе.

С уважением,
Глеб