Fonctionnement du moteur des rapports : Différence entre versions

Aller à : navigation, rechercher
(Variable associé à un champ de type dbObject)
m (Variable associé à un champ de type dbObject)
Ligne 44 : Ligne 44 :
 
<sql>'-'='$profileId'</sql>
 
<sql>'-'='$profileId'</sql>
  
Exemple de remplacement avec filtrage :
+
Exemple de remplacement assurant le filtrage :
 
<sql>SELECT *
 
<sql>SELECT *
 
FROM person
 
FROM person
Ligne 50 : Ligne 50 :
 
WHERE ( profile.id='1' OR '-'='1' )</sql>
 
WHERE ( profile.id='1' OR '-'='1' )</sql>
  
Exemple de remplacement sans filtrage :
+
Exemple de remplacement assurant le non-filtrage :
 
<sql>SELECT *
 
<sql>SELECT *
 
FROM person
 
FROM person

Version du 23 octobre 2017 à 14:08

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 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

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'