Les Sources de données

Préambule

La fusion du modèle de document avec des données variables nécessite de fournir ces informations au moteur de fusion. L'application livre des sources de données de base (voir plus bas) mais la fusion requiert souvent d'autres données en lien avec l'action ou la procédure qui utilise le modèle.

Par exemple, la génération d'une réponse à un courrier nécessite de récupérer les informations relatives au courrier initial, au contact (émetteur ou destinataire du courrier), les notes de traitement, etc...

Cette fonction est remplie par un script spécifique appelé source de données. Il collecte les données complémentaires par des requêtes dans la base ou des fonctions de l'application. Pour ce faire, il doit recevoir certaines variables qui sont fournies au moment de l'appel au moteur de fusion (page de traitement, batch de notification...).

Par exemple, la source de données pour la fusion d'une réponse à un courrier doit recevoir le numéro GED de celui-ci (res_id) ainsi que la collection (coll_id) et la vue pour la requête (res_view).

Les sources de données sont déclarées par l'administrateur dans le fichier de configuration modules/templates/xml/datasources.xml :

<datasource>
<id>letterbox_attachment</id>
<label>Pièce jointe ou réponse</label>
<script>modules/templates/datasources/letterbox_attachment.php</script>
</datasource>

Ce système implique que :

  • les variables utilisées par la source de données complémentaire sont bien renseignées avec les identifiants et clés nécessaires pour que le script fonctionne (res_id, coll_id, res_view par exemple).
  • les informations collectées par la source correspondent bien aux données fusionnées dans le modèle auquel il est rattaché

Syntaxe

Chaque source de données est identifiée par un nom (contenant des caractères 'a' à 'z', des chiffres et tiret bas '_').

Le plus souvent le nom de la source correspond au nom de la table dont sont extraites les données.

La source de données est un tableau dont chaque colonne est aussi nommée. Le nom des colonnes est défini dans le script de source, mais dans la plupart des cas il correspond au nom de la colonne de la table ou vue dont est extraite la donnée.

Par exemple, le script "Pièce jointe" fournit des valeurs pour le courrier maître, rassemblées dans une source nommée res_letterbox et dont les colonnes sont 'res_id', 'subject', 'doc_date', etc.

Insertion de zone

L'instruction de base permet d'insérer une donnée provenant d'une source :

[nom_source.nom_colonne{;block=limite_bloc}{param1}]

Zone simple

Pour une zone simple, on fournit le nom de la source et le nom de la colonne à insérer. Par exemple, pour insérer le sujet du courrier maître dans une réponse, l'instruction sera la suivante :

[res_letterbox.subject]

Liste ou tableau

La source peut contenir plusieurs lignes, auquel cas il faut préciser sur au moins une des instructions du bloc la balises d'encadrement de la ligne par le paramètre 'block'. Ceci permettra au moteur de fusion de boucler pour produire une liste.

Par exemple, pour insérer la date et le texte des notes ajoutées au courrier maître dans une réponse sous la forme d'une liste à puces, l'instruction sera placée après une puce et précisera la balise :

[notes.note_text;block=li] ([notes.date_note])

Formatage

On peut modifier le format d'une zone, par exemple la date, avec le paramètre 'frm'.

Par exemple, une date fournie dans une source sous la forme '31-01-2013 00:00:00.000' peut être affichée sous la forme '31/01/2013' par le formatage suivant :

[notes.date_note;frm=dd/mm/yyyy]

Valeur de remplacement si vide

Pour une colonne, on peut préciser la valeur de remplacement par :

[res_letterbox.subject;ifempty=--Sans objet--]

Pour un bloc (liste ou ligne de table) il faut ajouter sur une ligne complémentaire :

[notes.note_text;block=li] ([notes.user_id] le [notes.date_note;frm=dd/mm/yyyy])
[notes;nodata]Aucune note

Insertion de fichier

Il est possible d'intégrer le contenu d'un fichier au début ou à la fin de la fusion, par exemple un bloc de texte externe, un style css ou même un autre modèle qui sera aussi fusionné !

[onload;file=chemin_fichier]

results matching ""

    No results matching ""