Механизм параметризации

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

Исходные данные для процессора параметризации заданы в формате XML. Он определяет количество параметров которые должны быть введены. Обычно это происходит следующим образом: администраторы создают исходные данные параметризации (XML) и вставляют их в параметризированный запрос или фильтр событий. Пользователи могут уточнять параметры на лету при выполнении запроса или фильтра.

Формат параметров

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

Далее приведен пример таблицы полей Формат:

Данный пример определяет два поля: поле типа Boolean под названием "byusername" (с удобным для чтения описанием, "Фильтрация по имени пользователя") и строку "username" ("Имя пользователя"). Первый параметр может использоваться, к примеру, для включения фильтрации определенным пользователем в отчете, второй параметр – это имя пользователя.

Пользователю дается подсказка для ввода данных параметра (скриншот, сделанный в AggreGate Client):

Здесь намного более сложный формат:

Который включает в себя даже привязки:

Этот формат определяет множество полей и некоторые отношения между ними, контролируемые привязками. Например, привязка "username#enabled={byusername}" делает так, чтобы пользователь мог заполнить лишь параметр "Имя пользователя" ("username"), если включена фильтрация по имени пользователя (т.е., поле "byusername" выставлено как TRUE).

При запуске фильтра, использующего этот формат, пользователю дается подсказка для ввода данных параметра, используя следующий диалог (скриншот, сделанный в AggreGate Client):

Выражение для параметризации

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

Так как Выражение для параметризации содержит теги XML (см. далее), оно не может быть записано в блоке CDATA. Из этого следует, что символы, используемые в синтаксисе XML должны быть экранированы (escaped). Например, если в итоговом выражении должен появиться символ &, он должен быть записан как &amp в Выражении для параметризации.

Условный абзац

Условный абзац определяет блок текста, который вставляется в параметризованное выражение, если выражение в его заголовке имеет результат TRUE. Данное выражение может содержать ссылки на различные поля в Формате.

Синтаксис:

<p enabled="ENABLING_CONDITION_EXPRESSION">TEXT_OF_CONDITIONAL_PARAGRAPH</p>

ENABLING_CONDITION_EXPRESSION является выражением AggreGate, которое может содержать ссылки на ячейки Таблиц данных, построенных из PARAMETERS_FORMAT. Форматом ссылок является{FIELD_NAME}, где FIELD_NAME - имя поля, определенного через PARAMETERS_FORMAT. Более подробную информацию о ссылках см. здесь.

Пример ENABLING_CONDITION_EXPRESSION:

{filterByName} && {filterByValue}

Пример of EXPRESSION_TO_PARAMETERIZE с условным абзацем:

SELECT * FROM users.*:childInfo <p enabled="{showOnlyUsersWithPhones}">WHERE childInfo$phone IS NOT NULL</p>

В данном примере, childInfo$phone ссылается на поле "phone number" в записи информации о пользователе (см. Запросы). ENABLING_CONDITION_EXPRESSION ссылается на поле типа Boolean showOnlyUsersWithPhones , определенное в PARAMETERS_FORMAT (например, так: "<<showOnlyUsersWithPhones><B><D=Show only users that have phone numbers>>"). Если это поле установлено пользователем на FALSE во время процесса параметризации, полученным выражением будет "SELECT * FROM users.*:childInfo". Если это поле установлено на TRUE, итоговым выражением будет "SELECT * FROM users.*:childInfo WHERE childInfo$phone IS NOT NULL", т.е. TEXT_OF_CONDITIONAL_PARAGRAPH включен в результат.

Условный абзац не должен обязательно быть в конце строки запроса/фильтра. В следующем примере, он расположен в середине выражения (прямо перед оператором ORDER BY): SELECT * FROM users.*:childInfo <p enabled="{showOnlyUsersWithPhones}">WHERE childInfo$phone IS NOT NULL</p> ORDER BY childInfo$name DESC

Выражения

Как было сказано выше, Выражение для параметризации является просто строкой. Само по себе оно не является Выражением AggreGate. Однако, оно может включать Выражения AggreGate. Такие выражения AggreGate могут содержать в себе ссылки на ячейки Таблиц данных, простроенных из Формата. Выражение оценивается, результат оценки конвертируется в строку и вставляется в конечный результат параметризации (выражение запроса или фильтра AggreGate, которое образуется в ходе процесса параметризации).

Синтаксис:

<e>EXPRESSION</e>

Данное выражение может содержать ссылки на ячейки Таблицы данных, построенной из Формата так же, как и ENABLING_CONDITION_EXPRESSION условного параграфа (см. выше).

Пример:

SELECT * FROM users.*:childInfo WHERE childInfo$phone = '<e>{phone}</e>'

Метки ' сверху необходимы, т.к. они используются для экранирования строкового литерала SQL.

The ' marks above are necessary - they're used to escape the SQL string literal.

This example assumes a "phone" field exists in PARAMETERS_FORMAT. For example, if a user has entered phone "123-45-67" during the parameterization process, the result of parameterization will be "SELECT * FROM users.*:childInfo WHERE childInfo$phone = '123-45-67'".

Различие

1) Условные абзацы позволяют вам добавлять/удалять различные части итогового выражения, основанные на результате да/нет (Boolean) какого-либо выражения.

2) Выражения позволяют вам вставлять специальные значения, полученные в результате вычислений, в ваш итоговый резльтат параметризации.

Поток процесса параметризации

  • Выполняется анализ и проверка пригодности данных для параметризации.

  • Пользователю предлагается ввести параметры, заданные через Формат.

  • Теперь изменяется Выражение для параметризации с применением параметров из шага (2): текст условных абзацев добавляется или даляется, выражения оцениваются, а результат оценки вставляется в конечную строку.

  • Полученная строка используется в качестве выражения запроса или фильтра.