Question

Y at-il un moyen de requêtes de rapport extérioriser pour les rapports BIRT. Nous devons soutenir les moteurs de bases de données multiples et que nos requêtes sont différentes en fonction de la base de données sous-jacente. Je voudrais utiliser un paramètre de configuration pour dire rapport BIRT d'utiliser un fichier de requête spécifique

Était-ce utile?

La solution

Bien sûr,

vous pouvez. Si vous le code Javascript dans un peu de rapport lui-même, il peut accéder aux fichiers sur le disque pour récupérer les requêtes textuelles et modifier la requête avant qu'elle ne soit exécutée.

L'événement que vous devez code pour est beforeOpen sur la source de données. Nous utilisons en fait cela pour les paramètres de caractères génériques en détectant si elles sont réglées sur "*" et en ajustant dynamiquement la requête SQL, changer à partir de:

select A from B where C = ?

à:

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

La modification laid est juste pour que nous n'avons pas à vous soucier de changer les paramètres de position.

Vous pouvez lire une ligne à partir d'un fichier de disque et changer la requête avec quelque chose comme:

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

bien que vous devriez probablement avoir une meilleure vérification des erreurs que je l'ai enlevé :-) comme il est (1) un peu grande; et (2) un peu propriétaire.

Autres conseils

Je ne sais pas d'une façon de le faire hors de la boîte. Vous pourriez probablement imaginer des scripts assez complexes pour déclencher l'événement onLoad de l'ensemble de données.

Que diriez-vous de placer la même procédure stockée dans chaque DB? Ensuite, vous pouvez paramétrer les informations de connexion de données (Sur la page Modifier le rapport source de données) et dynamiquement diriger votre rapport pour interroger une source de données spécifique. Tant que la procédure stockée est sur toutes les instances, vous obtiendrez les données correctes de la source correcte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top