Listes personnalisées
Une liste personnalisée est une liste de référence définie par l'opérateur — une table code → libelléFr / libelléEn gérée à côté des catalogues réglementaires de Listes de référence. Son rôle : alimenter une grille. Rattacher une liste personnalisée à une colonne dans l'éditeur Vues de liste et la colonne reçoit automatiquement un dropdown de filtre, un picker multi-sélection dans Filtres avancés et un renderer de cellule code — libellé — sans aucune modification de code.
Chaque liste se saisit ligne par ligne, ou se synchronise depuis un connecteur (API ou SQL) quand la source de vérité vit dans un système externe. La même requête / le même endpoint peut alimenter plusieurs listes en passant des paramètres différents par liste.
Vue d'ensemble
Sélecteur de liste
La page liste toutes les listes personnalisées définies. Choisir une liste pour l'éditer ; + Nouvelle liste au-dessus du tableau crée une entrée amorcée avec une ligne vide.
| Champ | Description |
|---|---|
| Liste | Liste déroulante de toutes les listes personnalisées (name). Le nom est l'identifiant référencé par l'éditeur Vues de liste — choisir une liste ici revient à l'éditer, indiquer le même nom dans une spec de colonne sous Vues de liste relie la colonne à cette liste. |
| + Nouvelle liste | Crée une nouvelle liste. Une boîte Nom demande l'identifiant ; ce nom est la valeur que les specs de colonne référenceront. |
| Enregistrer | Écrit la liste active. Basculer sur une autre liste avant l'enregistrement perd les modifications non enregistrées. |
Lignes
Le tableau de lignes est le contenu canonique de la liste. Une ligne par entrée, trois colonnes.
| Colonne | Description |
|---|---|
| Code | La valeur stockée — ce que la cellule de la colonne porte dans la grille (par ex. PAR, MCU0070, 01). |
| Libellé FR | Libellé français rendu à côté du code dans le picker et dans la cellule (code — libellé). Obligatoire. |
| Libellé EN | Libellé anglais rendu quand la locale active commence par l'anglais. Optionnel — quand vide, le libellé FR est réutilisé. |
| ⌫ | Retire la ligne. |
+ Ajouter une ligne en bas ajoute une ligne vide. Les lignes sont triées alphabétiquement par code dans les dropdowns et les pickers ; l'éditeur préserve l'ordre d'ajout pour permettre un réordonnancement manuel.
Source de synchronisation
Une liste personnalisée peut s'appuyer sur un système externe au lieu d'être saisie à la main. Le groupe Source de sync (optionnelle) se trouve sous le tableau des lignes. Choisir un connecteur API ou un connecteur SQL, puis un endpoint / une requête, puis mapper les champs de la réponse vers les trois colonnes de la liste.
| Champ | Description |
|---|---|
| Connecteur | Liste déroulante de tous les modèles api-connector et sql-connector définis. Le choix restreint le champ suivant aux cibles de ce connecteur. |
| Endpoint / Requête | Liste déroulante des endpoints (API) ou des requêtes (SQL) du connecteur. Désactivée tant qu'aucun connecteur n'est choisi. |
| Code field | Nom de colonne (SQL) ou clé JSON (API) que la sync lit comme code de chaque ligne. Obligatoire. |
| Label FR field | Colonne / clé du libellé français. Obligatoire. |
| Label EN field | Colonne / clé du libellé anglais. Optionnel. |
| List path (API seulement) | Chemin pointé vers le tableau dans le corps JSON. Supporte data.items et items[0]. Vide quand le corps est déjà un tableau JSON. |
| Paramètres | Couples clé / valeur par liste envoyés au connecteur comme valeurs fixes (pas de substitution de variables). La même requête peut alimenter plusieurs listes en enregistrant des valeurs différentes par liste ; les valeurs par défaut de la définition d'endpoint s'appliquent quand un champ est laissé vide. |
| Synchroniser | Appelle le connecteur, parcourt la réponse, construit l'ensemble de lignes et remplace les lignes en place. Un bandeau traduit indique N ligne(s) synchronisée(s) depuis connecteur · endpoint en cas de succès ou l'erreur sous-jacente en cas d'échec. |
La configuration sync vit sur le même modèle de liste sous sync.connector, sync.endpoint, sync.codeField, sync.labelFrField, sync.labelEnField, sync.listPath et sync.params. Les consommateurs de liste (renderer de cellule, dropdown Filtres avancés, ligne de filtre par colonne) ne voient jamais ces clés comme des entrées — elles sont filtrées par parseRefOptions.
Une synchronisation n'enregistre pas la liste automatiquement ; elle ne fait que reconstruire le tableau des lignes. Cliquer sur Enregistrer pour valider les lignes synchronisées.
Utiliser une liste personnalisée dans une grille
Une liste personnalisée se rattache à une grille via l'éditeur Vues de liste. Sur la ligne de colonne, renseigner le champ refList avec le name de la liste :
{
"name": "logBusinessUnit",
"label": "Business unit",
"labelFr": "Unité d'activité",
"type": "string",
"refList": "business-units",
"width": 150,
"visible": true,
"filter": true
}
Effets sur la grille :
- Renderer de cellule — chaque cellule affiche
code — libellé(FR ou EN selon la locale) au lieu du code brut. Les valeurs vides restent vides. - Ligne de filtre par colonne — le champ texte est remplacé par un dropdown recherchable alimenté par les lignes de la liste. Chaque entrée est
code — libellé. - Picker multi-sélection des Filtres avancés — la liste alimente le picker multi-sélection. Choisir plusieurs entrées émet une clause
IN (?,?,?)côté serveur.
Aucune modification de code n'est nécessaire — ajouter une ligne à la liste, la synchroniser depuis un connecteur ou renommer un libellé met à jour la grille au rendu suivant.
Endpoints REST
L'éditeur de liste et les consommateurs de la grille partagent le même back-end :
| Méthode | Chemin | Rôle |
|---|---|---|
GET | /api/ref-lists | Renvoie toutes les listes définies avec leurs lignes. La grille charge une fois par session et met en cache ; l'éditeur invalide le cache à l'enregistrement. |
GET | /api/ref-lists/{name} | Renvoie une liste avec ses lignes + la config sync quand elle existe. |
PUT | /api/ref-lists/{name} | Écrit la liste. Corps : { name, rows: [...], sync: {...} ou null }. |
POST | /api/ref-lists/{name}/sync | Déclenche la synchronisation. Renvoie l'ensemble de lignes reconstruit en cas de succès, l'erreur du connecteur sous-jacent en cas d'échec. |
Conseils & bonnes pratiques
- Choisir un nom stable. Le nom de la liste est ce que les specs de colonne référencent sous
refList. Renommer une liste plus tard casse toutes les specs qui pointent dessus — mieux vaut supprimer puis recréer sous le nouveau nom une fois les specs de colonne mises à jour. - Garder le libellé FR rempli. Le renderer de cellule retombe sur le libellé FR quand la locale active est FR ; un libellé FR vide fait apparaître le code brut dans la grille, ce qui n'est rarement ce qu'un opérateur attend.
- Une requête connecteur, plusieurs listes. Quand plusieurs listes partagent la même requête back-end (par ex. unités actives pour la société 00070 vs. unités actives pour la société 00080), enregistrer la requête une fois sur un connecteur SQL ou API et alimenter des Paramètres différents par liste. Les valeurs par défaut de l'endpoint complètent le reste.
- La sync remplace, elle ne fusionne pas. Une synchronisation retire toutes les lignes existantes avant d'insérer les nouvelles. Les modifications manuelles faites entre deux syncs sont perdues — quand des overrides manuels comptent, garder la liste soit manuelle, soit entièrement synchronisée, pas les deux.
- Une colonne cachée reste filtrable. Une colonne rattachée à une liste personnalisée peut être marquée
visible: falsedans la spec et continuer à apparaître dans Filtres avancés — utile pour les champs techniques commelogBusinessUnitqu'un opérateur veut filtrer sans les afficher.