logo

6 окт. 2009 г.

BIEE: вызов информационных панелей с инициализацией переменных презентаций

Приведенное решение является альтернативой GO-URL-метода (смотри, например, здесь).

С помощью GO-URL мы можем передать значения конкретных столбцов, определить условие фильтра по ним. Но задать значение переменной презентации при вызове дашборда извне нельзя.



Пример перехода на страницу BIEE с инициализацией presentation variable.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1">
<title>Untitled Document</title>

<script>
function fSubmit()
{
var tForm = document.getElementById('test_form');

tForm.P0.value =
"<sawx:expr xmlns:sawx=\"com.siebel.analytics.web/expression/v1\" xsi:type=\"sawx:logical\" op=\"and\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><sawx:expr xmlns:sawx=\"com.siebel.analytics.web/expression/v1\" xsi:type=\"sawx:list\" op=\"in\" setVariable=\"dashboard.currentPage.variables['XXX']\"><sawx:expr xmlns:sawx=\"com.siebel.analytics.web/expression/v1\" xsi:type=\"sawx:sqlExpression\">XX_DUMMY_COLUMN</sawx:expr><sawx:expr xmlns:sawx=\"com.siebel.analytics.web/expression/v1\" xsi:type=\"sawx:untypedLiteral\">XXX value</sawx:expr></sawx:expr><sawx:expr xmlns:sawx=\"com.siebel.analytics.web/expression/v1\" xsi:type=\"sawx:list\" op=\"in\" setVariable=\"dashboard.currentPage.variables['YYY']\"><sawx:expr xmlns:sawx=\"com.siebel.analytics.web/expression/v1\" xsi:type=\"sawx:sqlExpression\">XX_DUMMY_COLUMN</sawx:expr><sawx:expr xmlns:sawx=\"com.siebel.analytics.web/expression/v1\" xsi:type=\"sawx:untypedLiteral\">YYY value</sawx:expr></sawx:expr></sawx:expr>";

tForm.submit();
}
</script>
</head>

<body>
<form id = "test_form" method = post action = "http://localhost:9704/analytics/saw.dll?Dashboard">
<input type = hidden name = "nquser" value = "Administrator" />

<input type = hidden name = "nqpassword" value = "Administrator" />

<input type = hidden name = "Action" value = "applyfilter" />

<input type = hidden name = "PortalPath" value = "/shared/Tests/_portal/test_dashboard" />

<input type = hidden name = "Page" value = "test_page" />

<input type = hidden name = "P0" value = "" />

<button type = button onclick = "fSubmit()">submit</button>
</form>
</body>
</html>


1) передать значения можно лишь методом POST;

2) рассматривается случай явного задания логина/пароля;

3) нужно задать тип операции (для задания переменных презентации - applyfilter), путь до дашборда (можно использовать утилиту Catalog Manager для просмотра корректного пути), имя страницы дашборда

4) интерес представляет собой параметр "P0" - он содержит инструкции в виде XML, которые будут использованы BI Presentation Server; в данном случае - инструкции по заданию переменных презентации.

Анализ значения "P0":

<sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:logical" op="and" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:list" op="in" setVariable="dashboard.currentPage.variables['XXX']">
<sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:sqlExpression">XX_DUMMY_COLUMN</sawx:expr>
<sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:untypedLiteral">XXX value</sawx:expr>
</sawx:expr>
<sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:list" op="in" setVariable="dashboard.currentPage.variables['YYY']">
<sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:sqlExpression">XX_DUMMY_COLUMN</sawx:expr>
<sawx:expr xmlns:sawx="com.siebel.analytics.web/expression/v1" xsi:type="sawx:untypedLiteral">YYY value</sawx:expr>
</sawx:expr>
</sawx:expr>


В данном примере есть два узла "sawx:expr" с атрибутами "xsi:type", равными "sawx:list", каждый из которых инициализирует свою переменную презентации. Конструкция dashboard.currentPage.variables['XXX'] говорит о том, что будет инициализироваться переменная презентации с именем XXX, и что область видимости этой переменной - текущая страница. Подузлы с атрибутом "xsi:type", равным "sawx:sqlExpression", задают столбец предметной области, в случае, если никаких столбцов инициализировать не требуется - можно указать здесь любую "абракадабру". Подузлы с атрибутом "xsi:type", равным "sawx:untypedLiteral", задают значения, которые будут инициализировать соответствующие переменные презентации.

7 комментариев:

  1. Попытался использовать этот метод для установки значений в промпте дэшборда, на который осуществляется переход. То есть, устанавливаю на целевом промпте переменную, как значение по-умолчанию для поля, а этим переходом задаю ее значение. Значение устанавливается, но не нажимается кнопка "Перейти" - в промпте фильтры заданы, но к отчету они не применены. После нажатия кнопки вручную они применяются, отчет формируется правильный. Может быть, можно как-то сделать, чтоб это происходило автоматически?

    ОтветитьУдалить
  2. Насколько я помню, автоматически же фильтры применяются и к анализу BI.
    Судя по тому, что промпт подхватил переданные значения, механизм у вас работает.
    Быть может, в самом анализе дело - например, используются в фильтрах какие-то переменные презентации (@{...}), которые инициализируются лишь промптом...
    Кстати, какая версия BI используется?

    ОтветитьУдалить
  3. Выйду из тени )
    Версия BI 10.1.3.4.1.
    Да, это поле промпта инициализирует переменную презентации, по которой фильтруется отчет. Например, это переменная @{var1}. Если я в качестве значения по умолчанию этому полю ставлю другую переменную, например @{var2}, и ее инициализирую этим методом, то возникает описанная ситуация. Если же я в качестве значения по умолчанию ставлю переменную @{var1}, то на первый взгляд все в порядке - значения в промпт встают и отчет формируется верно, но зато потом, при смене значений в полях промпта, ничего не происходит - отчет не формируется заново с новыми установками фильтра, видимо значение переменной @{var1} остается прежним, промпт его не меняет по какой-то причине.

    ОтветитьУдалить
  4. 1) Данный пост писался как раз для версии BI 10.1.3.4.1.
    2) У вас не получится сделать зависимые параметры в промпте таким образом. Как вариант - используйте галочку "Ограничить"/"Constraint" для конкретных столбцов подсказки.

    ОтветитьУдалить
  5. То есть, все работает так, как должно... Понятно, буду искать другой способ. Спасибо

    ОтветитьУдалить
  6. Пожалуйста!
    Вы бы описали подробнее задачу (можно в личку).

    ОтветитьУдалить
  7. Пожалуй, воспользуюсь предложением и напишу на мыло )

    ОтветитьУдалить