Вопрос

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

Это было полезно?

Решение

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

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

select A from B where C = ?

Для:

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) несколько проприетарный.

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top