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 105: Line 105:
<sql>[OF_DYNAMIC_SQL]
<sql>[OF_DYNAMIC_SQL]
SELECT CONCAT('SELECT *
SELECT CONCAT('SELECT *
FROM person
  FROM person
LEFT JOIN profile ON person.profile & profile.id
  LEFT JOIN profile ON person.profile & profile.id
WHERE ( profile.id IN (', IF('-' IN ($validityTypeId), '\'-\'', '$validityTypeId'), ') OR \'-\' IN (', IF('-' IN ($validityTypeId), '\'-\'', '$validityTypeId'), ') )')</sql>
  WHERE ( profile.id IN (', IF('-' IN ($validityTypeId), '\'-\'', '$validityTypeId'), ') OR \'-\' IN (', IF('-' IN ($validityTypeId), '\'-\'', '$validityTypeId'), ') )')
FROM ma_table
WHERE mon_champ='$unId'</sql>


=Visualisation de rapport=
=Visualisation de rapport=

Revision as of 13:32, 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. L'on nomme cette autre requête, une requête imbriquée.

Les requêtes dynamiques 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>

Exemple de rapport avec une requête dynamique : <sql>[OF_DYNAMIC_SQL] SELECT 'SELECT *

 FROM person
 LEFT JOIN profile ON person.profile & profile.id
 WHERE ( profile.id=\'$profileId\' OR \'-\'=\'$profileId\' )'

FROM ma_table WHERE mon_champ='$unId'</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 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>

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

<sql>SELECT * FROM person LEFT JOIN profile ON person.profile & profile.id WHERE ( profile.id IN (1,2,4) OR '-' IN (1,2,4) )</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>

Exemple de rapport avec une requête dynamique : <sql>[OF_DYNAMIC_SQL] SELECT CONCAT('SELECT *

 FROM person
 LEFT JOIN profile ON person.profile & profile.id
 WHERE ( profile.id IN (', IF('-' IN ($validityTypeId), '\'-\, '$validityTypeId'), ') OR \'-\' IN (', IF('-' IN ($validityTypeId), '\'-\, '$validityTypeId'), ') )')

FROM ma_table WHERE mon_champ='$unId'</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>