5.2. Запуск отчётов из экранов
Отчёты можно запускать из произвольных экранов системы, используя специальные действия и связанные с ними кнопки или элементы контекстного меню компонентов. При этом кроме доступности отчёта в соответствии с ролью пользователя проверяется также его принадлежность данному экрану.
Рассмотрим типы действий и примеры их использования.
-
com.haulmont.reports.gui.actions.RunReportAction
– действие, отображающее список всех доступных отчётов. При выборе пользователем отчёта из списка отображается форма ввода параметров (если они заданы), и отчёт запускается на исполнение.Пример использования действия совместно с кнопкой, объявленной в XML-дескрипторе экрана:
-
XML-дескриптор
<layout> <groupTable id="booksTable"> ... <buttonsPanel id="buttonsPanel"> ... <button id="reportButton" icon="PRINT"/> </buttonsPanel> </groupTable>
-
Контроллер
@Inject private Button reportButton; @Subscribe private void onInit(InitEvent event) { reportButton.setAction(new RunReportAction("report")); }
-
messages.properties
report = Report
-
-
com.haulmont.reports.gui.actions.TablePrintFormAction
– действие, связанное с таблицей, отображающей список экземпляров сущности. Действие отбирает только те отчёты, которые имеют внешний параметр типа Entity или List of entities, и тип сущности параметра совпадает с типом сущности, отображаемой таблицей. Если в результате отбора доступен только один отчёт, он сразу запускается на выполнение. Если доступно несколько отчётов, их список предлагается пользователю.В отчёт передается значение внешнего параметра по следующим правилам:
-
Если параметр типа List of entities, то в него передается список выбранных в данный момент в таблице экземпляров.
-
Если параметр типа Entity, и в таблице выбран один экземпляр (выделена одна строка), то в отчёт передается этот экземпляр.
-
Если параметр типа Entity, а в таблице выделено несколько строк, то отчёт выполняется несколько раз по числу выбранных экземпляров. После выполнения пользователю возвращается один ZIP архив, в котором находятся все сформированные отчёты.
Пример использования с кнопкой и контекстным меню таблицы:
-
XML-дескриптор
<layout> <groupTable id="booksTable"> ... <buttonsPanel id="buttonsPanel"> ... <button id="reportButton" icon="PRINT"/> </buttonsPanel> </groupTable>
-
Контроллер
@Inject private Button reportButton; @Inject private GroupTable<Book> booksTable; @Subscribe private void onInit(InitEvent event) { TablePrintFormAction action = new TablePrintFormAction("report", booksTable); booksTable.addAction(action); reportButton.setAction(action); }
-
messages.properties
report = Report
-
-
com.haulmont.reports.gui.actions.EditorPrintFormAction
– действие, связанное с экраном редактирования экземпляра сущности. Действие отбирает только те отчёты, которые имеют внешний параметр типа Entity или List of entities, и тип сущности параметра совпадает с типом редактируемой сущности. Если в результате отбора доступен только один отчёт, он сразу запускается на выполнение. Если доступно несколько отчётов, их список предлагается пользователю.В отчёт передается значение внешнего параметра – экземпляр редактируемой сущности. Если тип параметра – List of entities, то передается список из одного элемента.
Пример использования с кнопкой, размещенной рядом со стандартными кнопками OK и Cancel:
-
XML-дескриптор
-
<layout expand="editActions" spacing="true">
...
<hbox id="editActions" spacing="true">
<button action="windowCommitAndClose"/>
<button action="windowClose"/>
<button id="reportButton" icon="PRINT"/>
</hbox>
</layout>
-
Контроллер
@Inject private Button reportButton; @Subscribe private void onBeforeShow(BeforeShowEvent event) { reportButton.setAction(new EditorPrintFormAction("report", this, null)); }
-
messages.properties
report = Report