Frage

Gibt es eine Möglichkeit Berichtsabfragen externalisieren für BIRT-Berichte. Wir müssen mehrere Datenbank-Engines unterstützen und so unsere Fragen sind unterschiedlich, abhängig von der zugrunde liegenden Datenbank. Ich möchte einen Konfigurationsparameter verwenden BIRT Report anweisen, eine bestimmte Abfrage-Datei verwenden

War es hilfreich?

Lösung

Sicher Sie können. Wenn Sie einige Javascript in dem Bericht selbst codieren, kann es Dateien auf der Festplatte zugreifen die Textabfragen und ändern Sie die Abfrage abzurufen, bevor er ausgeführt wird.

Das Event, das Sie codieren müssen, ist beforeOpen auf die Datenquelle. Wir diese tatsächlich nutzen für die Stellvertreterzeichenparameter durch Erfassen, ob sie auf "*" und dynamisch die SQL-Abfrage Einstellung ändert es aus:

select A from B where C = ?

zu:

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

Die hässliche Änderung ist nur so müssen wir uns keine Sorgen über die Positionsparameter zu ändern.

Sie können eine Zeile aus einer Datei lesen und die Abfrage mit etwas ändern wie:

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) {}

, obwohl Sie sollte wohl besser Fehler als die Kontrolle haben :-) ich es entfernt, wie es ist (1) etwas groß; und (2) etwas proprietär.

Andere Tipps

Ich weiß nicht, von einem Weg, dies aus der Box zu tun. Sie könnten wahrscheinlich einige ziemlich komplexe Skript abzufeuern auf dem onLoad Ereignis des Data Set einfällt.

Wie sei es die gleiche gespeicherte Prozedur in jeder DB platzieren? Dann können Sie die Datenverbindungsinformationen (auf der Bearbeitungsseite für die Berichtsdatenquelle) parametrieren und dynamisch Bericht anweisen, eine bestimmte Datenquelle abzufragen. Solange die gespeicherte Prozedur auf alle Instanzen ist, werden Sie die richtigen Daten aus der richtigen Quelle erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top