Fonctionnement du moteur des rapports : Différence entre versions
m (→Requête dynamique) |
m (→Remplacement des variables) |
||
Ligne 12 : | Ligne 12 : | ||
=Remplacement des variables= | =Remplacement des variables= | ||
+ | |||
+ | ===Variable associé à un champ de type "dbObject"=== | ||
+ | |||
+ | Une variable associé à 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 prise en compte de la variable au niveau du rapport : Liste des utilisateurs actifs possédant le profil "$profileId" | ||
+ | <sql>SELECT person.* | ||
+ | FROM person | ||
+ | LEFT JOIN profile ON person.profile & profile.id | ||
+ | WHERE profile.id='$profileId' | ||
+ | AND activated=1</sql> | ||
+ | |||
+ | Exemple de prise en compte de la variable au niveau du rapport : Liste des utilisateurs actifs avec ou non, un filtre sur le profil | ||
+ | <sql>SELECT * | ||
+ | FROM person | ||
+ | LEFT JOIN profile ON person.profile & profile.id | ||
+ | WHERE ( profile.id='$profileId' OR '-'='$profileId' )</sql> | ||
+ | |||
+ | ===Variable associé à un champ de type "dbObjectMulti"=== | ||
+ | |||
+ | Dans le formulaire, le champ de type "dbObjectMulti" est représenté sous forme de liste de cases à cocher où est proposé comme choix : | ||
+ | * La liste des différents "objets" comme autre choix. Par exemple, un type "dbObjectMulti::Profile" va donner la liste des profils | ||
+ | |||
+ | Une variable associé à 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 prise en compte de la variable au niveau du rapport : Liste des utilisateurs actifs possédant le profil "$profileId" | ||
+ | <sql>SELECT person.* | ||
+ | FROM person | ||
+ | LEFT JOIN profile ON person.profile & profile.id | ||
+ | WHERE profile.id IN ($profileId) | ||
+ | AND activated=1</sql> | ||
+ | |||
+ | Exemple de prise en compte de la variable au niveau du rapport : Liste des utilisateurs actifs avec ou non, un filtre sur le profil | ||
+ | <sql>SELECT * | ||
+ | FROM person | ||
+ | LEFT JOIN profile ON person.profile & profile.id | ||
+ | WHERE ( profile.id IN ($profileId) OR '-' IN ($profileId) )</sql> | ||
=Visualisation de rapport= | =Visualisation de rapport= |
Version du 23 octobre 2017 à 13:56
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é à 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 prise en compte de la variable au niveau du 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 prise en compte de la variable au niveau du rapport : Liste des utilisateurs actifs avec ou non, un filtre sur le profil
SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id='$profileId' OR '-'='$profileId' )
Variable associé à un champ de type "dbObjectMulti"
Dans le formulaire, le champ de type "dbObjectMulti" est représenté sous forme de liste de cases à cocher où est proposé comme choix :
- La liste des différents "objets" comme autre choix. Par exemple, un type "dbObjectMulti::Profile" va donner la liste des profils
Une variable associé à 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 prise en compte de la variable au niveau du 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 IN ($profileId) AND activated=1
Exemple de prise en compte de la variable au niveau du rapport : Liste des utilisateurs actifs avec ou non, un filtre sur le profil
SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id IN ($profileId) OR '-' IN ($profileId) )
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'
Champ de saisie
Champ de type "dbObject"
Dans le formulaire, le champs de type "dbObject" est représenté sous forme de liste déroulante où est proposé comme choix :
- "Pas de filtre" comme premier choix
- La liste des différents "objets" comme autre choix. Par exemple, un type "dbObject::Person" va donner la liste des utilisateurs
Une variable associé à 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 prise en compte de la variable au niveau du 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 prise en compte de la variable au niveau du rapport : Liste des utilisateurs actifs avec ou non, un filtre sur le profil
SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id='$profileId' OR '-'='$profileId' )
Champ de type "dbObjectMulti"
Dans le formulaire, le champ de type "dbObjectMulti" est représenté sous forme de liste de cases à cocher où est proposé comme choix :
- La liste des différents "objets" comme autre choix. Par exemple, un type "dbObjectMulti::Profile" va donner la liste des profils
Une variable associé à 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 prise en compte de la variable au niveau du 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 IN ($profileId) AND activated=1
Exemple de prise en compte de la variable au niveau du rapport : Liste des utilisateurs actifs avec ou non, un filtre sur le profil
SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id IN ($profileId) OR '-' IN ($profileId) )