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.