Fonctionnement du moteur des rapports: Difference between revisions

From Documentation de la solution web de gestion OpenFlyers
Jump to navigation Jump to search
imported>Jcheng
imported>Jcheng
Line 117: Line 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

Revision as of 12:14, 23 October 2017

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" <sql>SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id='$profileId'

 AND activated=1</sql>

Exemple de remplacement : <sql>SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id='1'

 AND activated=1</sql>

Exemple de rapport : Liste des utilisateurs actifs avec ou non, un filtrage sur le profil "$profileId" <sql>SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id='$profileId' OR '-'='$profileId' )</sql>

Dans ce rapport, cette partie permet d'assurer le filtrage : <sql>profile.id='$profileId'</sql> Et cette partie s'assurer le non-filtrage : <sql>'-'='$profileId'</sql>

Exemple de remplacement assurant le filtrage : <sql>SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id='1' OR '-'='1' )</sql>

Exemple de remplacement assurant le non-filtrage : <sql>SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id='-' OR '-'='-' )</sql>

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" <sql>SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id IN ($profileId)

 AND activated=1</sql>

Exemple de remplacement : <sql>SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id IN (1)

 AND activated=1</sql>

<sql>SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id IN ('-')

 AND activated=1</sql>

<sql>SELECT person.* FROM person LEFT JOIN profile ON person.profile & profile.id WHERE profile.id IN (1,4,8)

 AND activated=1</sql>

Exemple de rapport : Liste des utilisateurs actifs avec ou non, un filtrage sur le(s) profil(s) "$profileId" <sql>SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id IN ($profileId) OR '-' IN ($profileId) )</sql>

Dans ce rapport, cette partie permet d'assurer le filtrage : <sql>profile.id IN ($profileId)</sql> Et cette partie s'assurer le non-filtrage : <sql>'-' IN ($profileId)</sql>

Exemple de remplacement assurant le filtrage : <sql>SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id IN (1) OR '-' IN (1) )</sql>

Exemple de remplacement assurant le non-filtrage : <sql>SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id IN ('-') OR '-' IN ('-') )</sql>

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 : <sql>SELECT * FROM ma_table WHERE mon_champ='$maVariable'</sql>

Exemple de rapport après remplacement des variables : <sql>SELECT * FROM ma_table WHERE mon_champ='1'</sql> <sql>SELECT * FROM ma_table WHERE mon_champ='test'</sql>