Екстернализиране на 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 на набора от данни.

Какво ще кажете за поставянето на една и съща съхранена процедура във всяка DB? След това можете да параметризирате информацията за връзката с данни (на страницата Редактиране за източника на данни за отчета) и динамично да насочите отчета си към конкретен източник на данни. Докато съхранената процедура е на всички инстанции, ще получите правилните данни от правилния източник.

person MystikSpiral    schedule 17.03.2010