Accès SQL aux données

Configuré en mode PostgreSQL, w.c.s. crée une série de vues permettant un accès aux données des différents formulaires. L'utilisation de ces vues est recommandée, l'accès direct aux tables étant réservé aux usages internes.

Vues pour les données des formulaires

Une vue nommée wcs_view_xx_libellé (avec xx étant l'identifiant du formulaire et libellé étant son nom tel qu'il appararait dans les URL) est créée par type de formulaire pour donner accès aux données de ceux-ci.

Les champs suivants sont exposés :

  • id : identifiant interne

  • id_display : identifiant externe, le cas échéant

  • user_id : identifiant de l'utilisateur

  • receipt_time : date et heure de réception

  • status : statut courant

  • is_at_endpoint : indicateur de fin de traitement

  • category_id : identifiant de la catégorie

  • formdef_id : identifiant du type de formulaire

  • fts : indexation texte intégral

  • backoffice_submission : indicateur de saisie backoffice

  • submission_channel : canal d'entrée

Les différents champs du formulaire sont ensuite présents en autant de colonnes, elles sont nommées selon le nom de variable utilisé dans la définition du champ ou, quand celui-ci n'est pas défini, selon la forme f_identifiant_libellé. Pour un certain nombre de champs, différenciant la valeur présentée de la valeur de stockage, un second champ est disponible, au nom suffixé de _display.

Un dernier champ, status_history reprend un tableau avec l'historique des statuts par lesquels le formulaire est passé.

Agrégation de formulaires

Les champs communs à l'ensemble des formulaires, c'est-à-dire ceux repris dans la première liste donnée ci-dessus (id, id_display…), sont également agrégés dans une vue unique, wcs_all_forms.

De la même manière, les formulaires tirés d'une même catégorie sont agrégés dans une vue nommée wcs_category_libellé (ou libellé correspond au titre de la catégorie).

Ces agrégations sont utiles pour permettre la réalisation d'opérations sur l'ensemble des formulaires.

=> SELECT date_part('hour', receipt_time) AS hour, count(*)
-> FROM wcs_all_forms GROUP BY hour ORDER BY hour;
 hour | count 
 ------+-------
     0 |    24
     1 |    16
     2 |    10
    (...)
    (24 lignes)