Открытие всплывающих отчетов

Как открыть отчет из виджета? Как задать местоположение окна отчета? Вот простая инструкция по решению этой задачи.

Создание отчета

Для начала давайте создадим отчет, используемый в этом примере. Для этого:

  • Дважды щелкните на контексте Reports
  • Впишите имя (специфичное, пусть будет testReport) и описание (скажем, Test Report)
  • Просто нажмите OK в следующем окне, а затем откажитесь редактировать шаблон отчета (поскольку сейчас мы не хотим тратить время, это просто пример).

Теперь мы можем проверить отчет: дважды щелкните по его контексту, и он должен открыться в дополнительном окне справа.

Создание "вызывающего" виджета

Дважды щелкните по контексту Widgets и внесите его имя; здесь можно использовать любое имя (и описание), которое вам нравится. Для остальных полей оставьте значения по умолчанию. Окно Редактора виджетов теперь должно появиться с пустой формой. Перетащите кнопку из инструментальной панели компонента в форму. Заметьте, что у кнопки есть имя button1.

Мы хотим открыть отчет по имени testReport, когда пользователь нажимает на эту кнопку. Чтобы это сделать, нужно связать событие клика с вызовом действия отчета Show. Для добавления привязки щелкните правой кнопкой мыши по кнопке и выберите меню Edit bindings. В открывшемся окне нажмите на зеленую кнопку со знаком "плюс" для добавления привязок. Для добавленной записи очистите кнопку-флажок On start, оставьте настройку флажка On event и убедитесь в том, что не задан Periodically.

Задайте выражение в событии click поля Activator. Вам не придется запоминать зашифрованное выражение, как то, что мы собираемся создать. Просто нажмите в поле кнопку .... Она откроет окно Activator. Откройте вкладку Component Event в панели слева и выберите пункт Click узла button1 слева.

Теперь нажмите OK и убедитесь, что выражение Activator находится в этом поле:

form/button1:click@

Закончив с активатором, нужно прикрепить действие для его выполнения при появлении события. В нашем случае событие можно задать в поле Target следующим образом: нажмите кнопку ... в этом поле, выберите вкладку Action в окне Action, а в дереве справа выберите последовательно Users -> admin (Administrator) -> Reports -> Test Report и, наконец, действие Show Report.

Нажмите OK и проверьте выражение:

users.admin.reports.r:show!

Теперь мы готовы проверить наш виджет. Итак, сохраните его и запустите. Кликните по кнопке в открывшемся виджете и посмотрите открывшийся Test Report в отдельнйо вкладке в пределах Main Dashboard. Заметьте, что система автоматически переключается на окно главного клиента и отображает отчет.

Настройка местоположения для отчета

На данном этапе местоположение нашего отчета выбирается автоматически. Зачастую это не то, чего мы хотим. Например, если наш управляющий виджет находится в инструментальной панели, тогда отчет откроется на том же месте в пределах новой вкладки. Это будет выглядеть некрасиво, так как не будет достаточно места для отображения всего отчета, а компоновка других компонентов инструментальной панели будет нарушена. В нашем случае, например, было бы лучше открыть отчет в "плавающем" окне. Тогда окно отчета можно увеличить по необходимости, не меняя компонент инструментальная панель.

Чтобы это реализовать, вернитесь к открытому виджету и закройте его. В Редакторе виджетов откройте привязку кнопки и наберите следующую строку в поле Выражение:

table("<<location><T>>", table("<<state><I>>", 1))

Здесь мы задаем дополнительные параметры для действия, которое мы вызываем кликом. Все параметры действия должны быть занесены в одну таблицу. Действие show требует определения местоположения окна в поле по имени location. Это поле должно содержать другую таблицу, определяющую само местоположение. Для полного описания таблицы Расположение окна зайдите в специфичная тема. Теперь нужно задать состояние окна как "плавающее", которое закодировано целым числом 1 в поле state. При использовании функции table мы создаем таблицу, имея только одно поле с целым числом под именем state (формат таблицы <<state><I>>) и введите 1 как его значение:

table("<<state><I>>", 1)

Затем с помощью той же функции table мы вводит эту таблицу как значение для поля location:

table("<<location><T>>", table("<<state><I>>", 1))

Сохраниет виджет, запустите его и будьте уверены, что нажатие кнопки теперь будет открывать виджет в плавающем окне: