2010-03-11 5 views
1

Existe-t-il un moyen d'externaliser les requêtes de rapport pour les rapports BIRT. Nous devons prendre en charge plusieurs moteurs de base de données et nos requêtes sont donc différentes selon la base de données sous-jacente. Je voudrais utiliser un paramètre de configuration pour indiquer au rapport BIRT d'utiliser un fichier de requête spécifiqueExternaliser les requêtes BIRT

Répondre

1

Bien sûr, vous pouvez. Si vous codez du Javascript dans le 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 pour lequel vous devez coder 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 s'ils sont mis à "*" et en ajustant dynamiquement la requête SQL, changer de:

select A from B where C = ? 

à:

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

La modification laid est juste pour que nous ne pas avoir à se 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 grand; et (2) quelque peu propriétaire.

1

Je ne connais pas de moyen de le faire dès la sortie de la boîte. Vous pourriez probablement imaginer des scripts assez complexes pour se déclencher sur l'événement onLoad de l'ensemble de données. Comment faire pour placer la même procédure stockée dans chaque base de données? Ensuite, vous pouvez paramétrer les informations de connexion de données (Sur la page Modifier pour la source de données du rapport) et diriger dynamiquement votre rapport pour interroger une source de données spécifique. Tant que le proc stocké est sur toutes les instances, vous obtiendrez les données correctes de la source correcte.