Généralités
Le but de la modularisation est de pouvoir grouper un ensemble de configurations (écrans, dashboards, notifications, …) afin de pouvoir facilement les distribuer. Elle permet également d’amener des personnalisations fines en jouant sur la fusion des différents modules.
Les fichiers de configurations sont stockés dans des dossiers en respectant une certaine nomenclature. Un module est simplement un ensemble de dossiers. Ces modules sont ensuite enregistrés sur le serveur SAINet qui va les fusionner selon l’ordre spécifié dans la société. Il est ainsi possible de faire des personnalisations fines des configurations pour chacune des société.
Possibilités
De manière générale, tous les fichiers contenus dans un module sont susceptibles d’être modifiés, remplacés, voire même supprimés par un autre module. Cela dépend de l’ordre dans lequel les modules sont fusionnés.
Selon le type de fichier, la fusion se comporte différemment (détails):
- Fichiers XML: règles appliquées selon le fichier et le tag
- Fichier properties: remplacement des propriétés existantes
- Autres fichiers: remplacement complet du fichier
Il est primordial que le paramétreur soit attentif aux possibilités d’ordre de fusion qu’il laisse à un administrateur ! Suivant les modifications et l’ordre de fusion, cela peut engendrer des conflits rendant le paramétrage incohérent.
Exemple
Il est possible de définir plusieurs modules personnalisés, ainsi que les différentes manières de les combiner (où plutôt fusionner). Pour exemple, voici 3 modules:
main
qui contient une définition de la combo “SAMPLE_COMBO”pers1
qui va ajouter un élément dans cette combo.pers2
qui va enlever un élément de cette combo.
<!-- Définition de SAMPLE_COMBO dans le module main -->
<Combos>
<Combo ID="SAMPLE_COMBO">
<Elem ID="Q" Label="Quotidien" />
<Elem ID="H" Label="Hebdomadaire" />
<Elem ID="M" Label="Mensuel" />
<Elem ID="A" Label="Annuel" />
</Combo>
</Combos>
<!-- Définition de SAMPLE_COMBO dans le module pers1 -->
<Combos>
<Combo ID="SAMPLE_COMBO">
<Elem ID="B" Label="Bi-annuel" />
</Combo>
</Combos>
<!-- Définition de SAMPLE_COMBO dans le module pers2 -->
<Combos>
<Combo ID="SAMPLE_COMBO">
<Elem ID="A" MergeType="DELETE" />
</Combo>
</Combos>
Dans les modules pers1
et pers2
, la redéfinition des éléments de “SAMPLE_COMBO” n’est pas nécessaire. Seuls les éléments à ajouter/modifier/supprimer doivent être mentionnés. Lors de la fusion, c’est l’attribut ID
qui est utilisé pour repérer les tags à influencer.
Dans l’exemple ci-dessus, il y a deux manières de fusionner les modules: main,pers1
et main,pers2
:
<!-- Résultat fusionné de "main,pers1" -->
<Combos>
<Combo ID="SAMPLE_COMBO">
<Elem ID="Q" Label="Quotidien" />
<Elem ID="H" Label="Hebdomadaire" />
<Elem ID="M" Label="Mensuel" />
<Elem ID="A" Label="Annuel" />
<Elem ID="B" Label="Bi-annuel" />
</Combo>
</Combos>
<!-- Résultat fusionné de "main,pers2" -->
<Combos>
<Combo ID="SAMPLE_COMBO">
<Elem ID="Q" Label="Quotidien" />
<Elem ID="H" Label="Hebdomadaire" />
<Elem ID="M" Label="Mensuel" />
</Combo>
</Combos>
Il serait également possible de fusionner avec les ordres main,pers1,pers2
ou main,pers2,pers1
avec le même résultat:
<Combos>
<Combo ID="SAMPLE_COMBO">
<Elem ID="Q" Label="Quotidien" />
<Elem ID="H" Label="Hebdomadaire" />
<Elem ID="M" Label="Mensuel" />
<Elem ID="B" Label="Bi-annuel" />
</Combo>
</Combos>
Par contre, il n’y a aucun sens à utiliser la combinaison pers1,pers2
car la combo “SAMPLE_COMBO” n’est pas définie et le résultat serait identique à la définition inscrite dans pers1
puisque l’élément “B” n’existe pas.
Dans le cas où plusieurs <Combo>
sont définies dans le même parent <Combos>
, le merger va utiliser l’attribut ID afin de faire le merge.