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 :
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.
L'instruction de base permet d'insérer une donnée provenant d'une source :
[nom_source.nom_colonne{;block=limite_bloc}{param1}]
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]
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.content;block=li]
La balise "block=" permet ainsi de boucler sur le tableau ["notes"][["content" => "ma note"], ["content" => "deuxieme note"]]
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 :
[res_letterbox.creation_date;frm=dd/mm/yyyy]
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.content;block=li]
[notes;nodata]Aucune note
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]