Fonctionnement du moteur des rapports : Différence entre versions
(→Variable associé à un champ de type dbObjectMulti) |
(→Visualisation de rapport) |
||
Ligne 117 : | Ligne 117 : | ||
* Récupère les valeurs des [[#Champ-de-saisie|champs de saisie]] affichées dans le formulaire et stocke ces valeurs dans les variables correspondantes à ces [[#Champ-de-saisie|champs de saisie]] | * Récupère les valeurs des [[#Champ-de-saisie|champs de saisie]] affichées dans le formulaire et stocke ces valeurs dans les variables correspondantes à ces [[#Champ-de-saisie|champs de saisie]] | ||
* Extrait la requête du rapport | * Extrait la requête du rapport | ||
− | * Remplace dans la requête, chaque variable par leur valeur correspondante | + | * [[#Remplacement-des-variables|Remplace dans la requête]], chaque variable par leur valeur correspondante |
* Interprète la requête. Lors d'une [[#Requête-dynamique|requête dynamique]], celle-ci est interprété une seconde fois | * Interprète la requête. Lors d'une [[#Requête-dynamique|requête dynamique]], celle-ci est interprété une seconde fois | ||
* Affiche le résultat sous forme de tableau | * Affiche le résultat sous forme de tableau |
Version du 23 octobre 2017 à 14:14
Sommaire
Présentation
L'objet de cette page est de présenter le fonctionnement du moteur des rapports.
Bibliothèque des rapports
Requête dynamique
La présence du tag "[OF_DYNAMIC_SQL]" dans un rapport, permet d'identifier une requête dynamique.
Une requête dynamique est une requête SELECT construisant une autre requête SELECT à l'intérieur d'elle-même. Elles sont principalement utilisées pour afficher sous forme de colonne, des données provenant de champs métiers comme par exemple, pour le rapport Coordonnées (avec profil X et/ou validité Y expirant à une date postérieure ou égale à Z).
Remplacement des variables
Variable associé à un champ de type dbObject
Une variable associée à ce type de champ recevra comme valeur possible :
- Lorsque "Pas de filtre" est sélectionné, le caractère : -
- Lorsqu'une valeur est sélectionnée, un id sous forme de nombre
Exemple de rapport : Liste des utilisateurs actifs possédant le profil "$profileId"
SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id='$profileId' AND activated=1
Exemple de remplacement :
SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id='1' AND activated=1
Exemple de rapport : Liste des utilisateurs actifs avec ou non, un filtrage sur le profil "$profileId"
SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id='$profileId' OR '-'='$profileId' )
Dans ce rapport, cette partie permet d'assurer le filtrage :
profile.id='$profileId'
Et cette partie s'assurer le non-filtrage :
'-'='$profileId'
Exemple de remplacement assurant le filtrage :
SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id='1' OR '-'='1' )
Exemple de remplacement assurant le non-filtrage :
SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id='-' OR '-'='-' )
Variable associé à un champ de type dbObjectMulti
Une variable associée à ce type de champ recevra comme valeur possible :
- Lorsque rien n'est coché, la chaîne : '-'. Cela est considéré comme "Pas de filtre".
- Lorsqu'une valeur est cochée, un id sous forme de nombre
- Lorsque plusieurs valeurs sont cochées, plusieurs id sous forme de chaîne suivante : 1,2,3
Exemple de rapport : Liste des utilisateurs actifs possédant le(s) profil(s) "$profileId"
SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id IN ($profileId) AND activated=1
Exemple de remplacement :
SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id IN (1) AND activated=1
SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id IN ('-') AND activated=1
SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id IN (1,4,8) AND activated=1
Exemple de rapport : Liste des utilisateurs actifs avec ou non, un filtrage sur le(s) profil(s) "$profileId"
SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id IN ($profileId) OR '-' IN ($profileId) )
Dans ce rapport, cette partie permet d'assurer le filtrage :
profile.id IN ($profileId)
Et cette partie s'assurer le non-filtrage :
'-' IN ($profileId)
Exemple de remplacement assurant le filtrage :
SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id IN (1) OR '-' IN (1) )
Exemple de remplacement assurant le non-filtrage :
SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id IN ('-') OR '-' IN ('-') )
Visualisation de rapport
Lors d'une demande de visualisation de rapport, le moteur des rapports :
- Récupère les valeurs des champs de saisie affichées dans le formulaire et stocke ces valeurs dans les variables correspondantes à ces champs de saisie
- Extrait la requête du rapport
- Remplace dans la requête, chaque variable par leur valeur correspondante
- Interprète la requête. Lors d'une requête dynamique, celle-ci est interprété une seconde fois
- Affiche le résultat sous forme de tableau
Exemple de rapport :
SELECT * FROM ma_table WHERE mon_champ='$maVariable'
Exemple de rapport après remplacement des variables :
SELECT * FROM ma_table WHERE mon_champ='1'
SELECT * FROM ma_table WHERE mon_champ='test'