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

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

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

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

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

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

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

query step 1

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

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

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

В панели свойств можно установить значение параметра по умолчанию. Если не планируется изменять логику отчёта, можно сделать этот параметр скрытым условием, для этого необходимо установить флажок Hidden. В этом случае пользователям не будет предлагаться ввести этот параметр при запуске отчёта.

Выберем оператор запроса (>=).

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