Открытие всплывающих отчетов
Как открыть отчет из виджета? Как задать местоположение окна отчета? Вот простая инструкция по решению этой задачи.
Создание отчета
Для начала давайте создадим отчет, используемый в этом примере. Для этого:
- Дважды щелкните на контексте
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))
Сохраниет виджет, запустите его и будьте уверены, что нажатие кнопки теперь будет открывать виджет в плавающем окне: