5.3. Отчет по экземплярам сущности, отобранным при помощи запроса

Теперь рассмотрим второй тип отчета - отчет по списку сущностей, выбранных с помощью запроса. Для этого усложним задачу: отчет должен содержать в себе список экземпляров книг (с именами и названиями отделов), добавленных после определенной даты.

Как и в предыдущем случае, начнем с того, что зададим детали отчета:

  • Entity - сущность, по списку экземпляров которой будет создаваться отчет - library$BookInstance.

  • Format of template file - формат вывода отчета - XSLX.

  • Report name - имя отчета - Recently added book items.

Затем нужно выбрать тип построения отчета - Report for list of entities, selected by query.

list of entities step 1

Выбранный тип отчета позволит нам автоматически отобрать список сущностей, соответствующих определенному запросу. Для того чтобы задать этот запрос, необходимо нажать на ссылку Set query, появившуюся внизу.

Отобразится окно выбора условий запроса, которое во многом аналогично соотвествующему окну универсального фильтра. Оно позволяет добавлять условия, объединять их в группы AND/OR и настраивать их параметры.

Для добавления нового условия запроса нужно нажать на кнопку Add. Отобразится окно выбора атрибутов сущности library$BookInstance, в котором необходимо выбрать атрибут Created at. Атрибут будет добавлен в дерево условий запроса и в панели справа отобразятся его свойства. Выберем оператор запроса (>=).

query parameter

После сохранения запроса необходимо нажать Next и перейти к выбору атрибутов сущности library$BookInstance, которые будут включены в отчет. В соответствии с условием задачи, перенесем в правую колонку атрибуты BookItem.Publication.Book.Name, BookItem.LibraryDepartment.Name. Нажмем ОК для перехода ко второму этапу.

query step 2

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

query editor

В редакторе можно усложить структуру отчета, добавив новые полосы и наборы данных, а также настроить дизайн шаблона отчета, сделать локализацию отчета или определить настройки прав доступа.

К примеру, перейдем на вкладку Parameters and Values. В списке Parameters выберем и изменим имя параметра запроса: Date вместо стандартного CreateTs1.

query parameter rename

Наконец, добавим в экран просмотра списка отделов библиотеки кнопку Report, позволяющую запустить данный отчет.

Для этого внесем в XML-дескриптор экрана librarydepartment-browse.xml реализацию кнопки:

<table id="libraryDepartmentTable"
    ...
    <buttonsPanel id="buttonsPanel">
        ...
        <button id="reportBtn"
         caption="msg://reportBtn"/>
     </buttonsPanel>
</table>

После чего в контроллере инжектируем компонент Button:

@Inject
private Button reportBtn;

и в переопределенном методе init() зададим для кнопки действие RunReportAction:

reportBtn.setAction(new RunReportAction("report"));

В браузере отделов библиотеки появится кнопка Report, по нажатию на которую открывается список всех доступных в системе отчетов. Для того чтобы запустить наш отчет, необходимо выбрать в списке Recently added book items, указать дату и нажать Run report.

query running

Готовый отчет выглядит следующим образом:

query result