Bonjour à tous,
Je souhaite créer des requêtes SQL dynamiques au sein de bibliothèques. Pour cela, je souhaite construire mes requêtes en utilisant l'événement beforeOpen() de chaque dataset. (cf. Comment créer des rapports dont le comportement est dicté par les paramètres ?).
Mes requêtes peuvent être utilisées dans différents rapports. Ces rapports ont chacun des paramètres différents.
Je voudrais donc pouvoir écrire des requêtes du genre :
Mais cela ne fonctionne pas car tous les paramètres ne sont pas utilisés au sein des rapports. Du coup, BIRT lève une exception dès que le paramètre n'est pas déclaré.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 queryText = "SELECT [...] \n" + "FROM TABLE1 t1, TABLE2 t2 \n "; if(params["PAR1"].value != null) { queryText = queryText + ", TABLE3 \n "; } queryText = queryText + "WHERE ANNEE = ? \n" + " AND [JOINTURE TABLE1/TABLE2] \n"; if(params["PAR2"].value != null) { queryText = queryText + " AND [FIELDNAME] = " + params["PAR2"].value + " \n" ; } else { queryText = queryText + " AND [FIELDNAME] = 13 \n" ; } if(params["PAR3"].value != null) { queryText = queryText + " AND [FIELDNAME] = '" + params["PAR3"].value + "' \n"; } if(params["PAR1"].value != null) { queryText = queryText + " AND [JOINTURE TABLE3/TABLE1] \n"; }
Par exemple, dans un rapport ayant un seul paramètre nommé "PAR3", si je fais ceci dans un dynamique text ...
... BIRT me lève une exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if(params["PAR44"] != null && params["PAR44"].value != null) { "ok"; } else { "pas ok"; }
Savez-vous comment tester si un paramètre existe ou non dans un rapport ?
Partager