Динамическая замена элементов выбора в поле со списком с использованием SQL запросов
В этом примере будет рассмотрена динамическая замена набора тэгов в поле со списком с использованием SQL запросов и передача списка возможных значений с использованием оператора SQL “Where…”. Этот пример использует базу данных process.mdb, которая входит в дистрибутив Dream Report.
Примечание:
Эти строки должны быть добавлены в файл DreamReport.ini file, который расположен в \ODS\Dream Report\System
[AutoAddQuotes]
Use=no
В студии Dream Report, в меню «Инструменты» необходимо выбрать Менеджер DSN, и создать ODBC DSN, назвав его “Process”, которое описывает “Process” DSN:
- Добавить элемент Поле со списком (меню Веб-элементы) в Веб отчёт и назвать его “cb_User”
2. Установить “Режим отображения” в “Показать в виде списка” и разрешить “Множественный выбор”.
3. Настроить опцию “Показывать данные из:”. В этом примере используется SQL запросы для получения списка пользователей из таблицы Batch_Data, которая находится в базе данных Process. Этот список может быть также заполняться данными, которые введены вручную, номерами батчей и т.д.
4. Добавить второй список в отчёт, назвав его “cb_Tag”
5. Установить “Режим отображения” в “Показать в виде списка” и разрешить “Множественный выбор”.
6. Настроить опцию «Показывать данные из:» в “Значения, занесённые вручную”, и ввести Tank1, Tank2 и Tank3:
7. На панели объектов отчёта справа выбрать объект «Выражение» и добавить его в отчёт, назвав его “Expr1”
8. В поле ввода выражения необходимо написать следующую функцию, которая описывает первое поле со списком (“cb_User”): OdsObjComboGetSelectedListQuoted('[on#cb_User]')
9.На вкладке “Внешний вид”, пользователь может снять выбор опции “Видимый”, но во время разработки хорошей идеей будет оставить его видимым, чтобы проверить правильность передачи параметров SQL запросов.
10. Далее, создаём другой объект «Выражение» и называем его “Expr2”.
11. В этом выражении вводится текст обработки для второго поля со списком (“cb_Tag”): OdsObjComboGetSelectedList('[on#cb_Tag]')
12. На этой же панели выбираем и добавляем в отчёт SQL таблицу
13. Выбираем “Process” из списка “База данных”
14. Для этого запроса, запросим список тэгов уровня переменных Tank (который будет передан в таблицу из поля со списком “cb_Tag”) и значение счётчика из таблицы Batch_Data, где Счётчик =500 – то есть, этот запрос имеет динамический вариант запроса “Select…”, и фиксированное выражение “Where…”. Введём следующее SQL выражение:
Select [f#Expr2], Counter from Batch_Data where Counter=50
15. Выбрать ещё один объект SQL таблица
16. Выбираем “Process” из списка “База данных”
17. Для второй таблицы, получим список тэгов с названием Motor (которые будут переданы через поле со списком “cb_Tag”) из таблицы Batch_Data, где Счётчик = 500 и пользователь один из выбранных пользователей в поле со списком “cb_Users” – то есть, этот запрос будет иметь динамический оператор “Select…”, и динамическое выражение “Where…”. Введём следующее выражение:
Select [f#Expr1], User from Batch_Data Where Counter=500 And User IN ([f#Expr2])
18. Далее, добавим в отчёт Кнопку действия (меню Веб-элементы), с названием “Обновить”, и функцией “Обновить отчёт”
19. Отчёт должен выглядеть в студии так:
20. Запустим отчёт в Веб браузере и получим следующие результаты: