Создали сущность (условно назовем её 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 и опции “Показать все” в настройках отображаемых колонок таблицы. Последовательность действий по воспроизведению.
- Открыть таблицу
Результат: отображается половина колонок, как и ожидалось, так как вторая половина скрыта по умолчанию - Нажать на иконку настроек таблицы, выбрать выбрать “Показать все”
Результат- на экране показываются все колонки - Выгрузить данные в 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 везде.