Экстернализация запросов BIRT

Есть ли способ внедрить запросы отчетов для отчетов BIRT. Нам нужно поддерживать несколько механизмов баз данных, поэтому наши запросы различаются в зависимости от базовой базы данных. Я хотел бы использовать параметр конфигурации, чтобы сообщить отчету BIRT об использовании определенного файла запроса.


person shikarishambu    schedule 11.03.2010    source источник


Ответы (2)


Что вы можете. Если вы запрограммируете код Javascript в самом отчете, он сможет получить доступ к файлам на диске для получения текстовых запросов и изменить запрос перед его выполнением.

Событие, для которого нужно закодировать, — beforeOpen в источнике данных. На самом деле мы используем это для подстановочных знаков, определяя, установлено ли для них значение "*", и динамически корректируя SQL-запрос, изменяя его с:

select A from B where C = ?

to:

select A from B where ((C = ?) or (1==1))

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

Вы можете прочитать строку из файла на диске и изменить запрос примерно так:

try {
  var fip0 = new Packages.java.io.FileInputStream("/query.txt");
  try {
    var fip1 = new Packages.java.io.DataInputStream(fip0);
    try {
      queryText = fip1.readLine() + "";
    } catch(e1) {}
    fip1.close();
  } catch(e2) {}
  fip0.close();
} catch(e3) {}

хотя у вас, вероятно, должна быть лучшая проверка ошибок, чем эта :-) Я удалил ее, так как она (1) несколько большая; и (2) несколько собственнический.

person paxdiablo    schedule 19.03.2010

Я не знаю способа сделать это из коробки. Вероятно, вы могли бы придумать какой-нибудь довольно сложный сценарий, который запускал бы событие onLoad набора данных.

Как насчет размещения одной и той же хранимой процедуры в каждой БД? Затем вы можете параметризовать информацию о подключении к данным (на странице «Редактировать» для источника данных отчета) и динамически направлять отчет для запроса определенного источника данных. Пока хранимый процесс есть во всех экземплярах, вы получите правильные данные из правильного источника.

person MystikSpiral    schedule 17.03.2010