Aller au contenu principal

Constructeur de dialogue

L'onglet Dialogue du Concepteur d'écran ouvre le Constructeur visuel — un éditeur WYSIWYG pour le formulaire d'ajout/modification. Le modèle de données est la même structure ScreenDialog stockée dans screens.toml, mais au lieu d'éditer du TOML on glisse des champs sur des onglets et on règle les propriétés dans un inspecteur latéral.

Un écran sans dialogue fonctionne quand même comme un tableau en lecture seule ou en édition de grille. Construire un dialogue quand l'utilisateur a besoin d'un formulaire complet pour ajouter ou modifier des lignes.


Disposition à trois colonnes

Concepteur d'écran · crm.customers · DialoguePALETTEDictionnaireColonnes🔎 Rechercher…+ CUSTOMER_ID+ NAME+ EMAIL+ STATUS+ REGION_CODECANEVASGénéralAdresse+ OngletCUSTOMER_ID[clé · désactivé en édition]NAME[obligatoire]EMAIL[format=email]déposer un champ iciSTATUS[ENUM · colspan=2]REGION_CODE[sélectionné — voir Inspecteur →]MASQUÉ SUR CET ONGLETCREATED_AT (hidden=true)INSPECTEUR · REGION_CODEddREGION_CODEcolspan1requiredhiddendisabledLIAISONS DE PARAMÈTRES LOOKUP:APP_ID ← APP_ID+ Ajouter une liaisonRÈGLES CONDITIONNELLESvisible_when : (aucune)required_when : (aucune)disabled_when : (aucune)+ Ajouter une condition
RégionRôle
Palette (à gauche)Source des nouveaux champs. Deux sous-onglets : Dictionnaire (chaque entrée disponible dans la portée du connecteur courant) et Colonnes (chaque colonne que retourne la requête de lecture). Une zone de recherche restreint la liste. Cliquer sur une entrée ajoute une carte de champ sur le canevas ; faire glisser une entrée pour la déposer à un emplacement précis.
Canevas (au centre)La barre d'onglets du dialogue en haut + la grille de champs en dessous. Cliquer sur un onglet pour basculer ; + Onglet en ajoute un. Chaque carte de champ affiche le nom du champ + un résumé sur une ligne de ses indicateurs clés. La carte sélectionnée a une bordure colorée ; l'inspecteur à droite la reflète. Un groupe MASQUÉ distinct en bas rassemble les champs avec hidden = true.
Inspecteur (à droite)Les propriétés du champ sélectionné (ou un éditeur d'action par onglet quand une action d'onglet est sélectionnée — mutuellement exclusifs). Les propriétés sont rendues sous forme de formulaire générique ; les sections Liaisons de paramètres lookup et Règles conditionnelles se déploient en ligne.

Construire de zéro

Étape 1 — Ouvrir l'onglet Dialogue

La première fois, le canevas est vide avec un bouton Créer le dialogue. Cliquer dessus pour amorcer dialog.tabs = [{id: 'general', label: 'Général', fields: []}] et révéler la disposition à trois colonnes.

Étape 2 — Ajouter les champs du premier onglet

Deux moyens :

MéthodeQuand
Cliquer sur une entrée de Dictionnaire / colonne dans la PaletteAjoute une carte de champ à la fin de la grille de l'onglet courant.
Glisser une entrée de Dictionnaire / colonne sur le CanevasDépose la carte de champ là où vous la relâchez — utile pour insérer en milieu de grille.

Le champ ajouté devient la carte sélectionnée ; l'Inspecteur bascule sur ses propriétés. Mettre colspan pour l'élargir (la grille fait par défaut 2 colonnes ; un champ colspan = 2 remplit la ligne).

Étape 3 — Régler les propriétés du champ

Dans l'Inspecteur :

ChampRôle
ddEntrée de dictionnaire dont le champ hérite. Par défaut le nom de la colonne à l'ajout.
colspanCombien de cellules de grille le champ occupe. Par défaut 1.
required / hidden / disabledSurcharges par dialogue — laisser vide pour hériter de l'indication de colonne (voir Colonnes).
Liaisons de paramètres lookupLiaisons :placeholder supplémentaires pour un champ LOOKUP. Chaque liaison est {param: <placeholder sur la requête de recherche>, source: <champ sur ce dialogue>}. Le cas classique : un sélecteur de rôle restreint par l'identifiant d'application provenant d'un autre champ.
Règles conditionnellesvisible_when / required_when / disabled_when — voir Champs conditionnels.

Étape 4 — Ajouter des onglets

Cliquer sur + Onglet au-dessus du canevas. Le nouvel onglet est vide ; y glisser des champs depuis la Palette. Patrons d'onglets courants :

Nom d'ongletContenu
GénéralIdentité + champs les plus utilisés.
AuditCréé le, créé par, mis à jour le, mis à jour par — souvent hidden_on_add pour les masquer à l'insertion.
NotesChamps en texte libre.
AdresseUn groupe de champs liés (rue, ville, code postal, pays).

Deux indicateurs sur chaque onglet contrôlent la visibilité par mode :

IndicateurEffet
hide_on_addL'onglet disparaît à l'ajout d'une nouvelle ligne.
hide_on_editL'onglet disparaît à la modification d'une ligne existante.

Étape 5 — Réorganiser les champs

Glisser une carte de champ dans le même onglet pour la réorganiser. Glisser vers un onglet différent pour la déplacer entre onglets. Le glisser est natif HTML5 — la cible de dépôt se met en évidence au survol.

Étape 6 — Masquer un champ

Deux moyens :

MéthodeEffet
Mettre hidden = true dans l'Inspecteur.La carte passe dans le groupe MASQUÉ en bas du canevas. Le champ reste lié à l'enregistrement.
Supprimer le champ de l'onglet.Le champ est retiré du dialogue entièrement. La colonne reste sur l'écran ; elle ne remonte simplement pas dans le formulaire.

Le patron « masquer mais conserver » est utile pour les colonnes techniques que le dialogue doit soumettre (ex. un horodatage d'audit) mais que l'utilisateur ne doit pas voir.


Les trois types d'onglet

Les onglets ne sont pas tous identiques. Trois types résident sous dialog.tabs, discriminés par le champ type :

TypeFinalité
form (défaut)Une grille de champs éditables — le cas décrit ci-dessus.
nested_formUn formulaire d'enregistrement enfant intégré dans l'onglet. La clé primaire du parent se lie à une requête de lecture distincte ; si une ligne revient, le formulaire imbriqué la modifie, sinon il insère. Voir Onglets imbriqués.
nested_tableUne TableView de lignes liées intégrée dans l'onglet. Affiche la grille d'un autre écran restreinte à la clé primaire du parent. Voir Onglets imbriqués.

Le constructeur visuel affiche la même barre d'onglets pour les trois — basculer sur un onglet nested_form remplace le canevas par l'éditeur de formulaire imbriqué de cet onglet ; nested_table affiche le sélecteur d'écran cible.


Actions par onglet

Chaque onglet peut porter sa propre liste d'actions — des boutons qui se déclenchent depuis le pied de l'onglet. Patrons courants :

PatronPourquoi par onglet
Un bouton Recalculer sur un onglet de calculs.Déclenche une procédure stockée uniquement quand l'utilisateur regarde ces champs.
Un bouton Tester le webhook sur un onglet de notification.N'a de sens que dans ce contexte.
Un bouton Rafraîchir depuis la source sur un onglet de synchronisation.Récupère à nouveau les données affichées par l'onglet.

L'éditeur d'action s'ouvre dans l'Inspecteur quand on clique sur la ligne d'une action — l'Inspecteur ne montre qu'une chose à la fois (un champ OU une action). Sélectionner un champ efface la sélection d'action et inversement.

Voir Actions et cycle de vie pour les types d'actions complets.


Titre du dialogue

Le titre du dialogue figure en haut de la modale à son ouverture. Le définir une fois dans la section Dialogue de l'Inspecteur (sous les propriétés de champ quand aucun champ n'est sélectionné). Vide → retombe sur le label de l'écran, puis sur id.


Pièges courants

ErreurSymptômeCorrection
Champ sur un onglet référençant une colonne absente de la requête de lecture.Le dialogue affiche le champ mais la valeur est toujours vide, et l'enregistrement n'envoie aucune valeur pour lui.Ajouter la colonne à la requête de lecture ou retirer le champ de l'onglet.
lookup_param_binds référence un champ qui n'est pas sur le même onglet.La liaison se résout à NULL à la soumission.Déplacer le champ source sur le même onglet ou utiliser une liaison entre onglets (le moteur lit l'état global du formulaire, mais la liste déroulante Param de l'inspecteur ne liste que les champs visibles sur l'onglet courant).
colspan = 3 sur une grille à 2 colonnes.Le champ déborde ; la mise en page casse.Plafonner colspan à la valeur cols de l'onglet.
Deux champs avec le même name sur le même onglet.L'enregistrement envoie deux valeurs pour la même colonne ; la seconde gagne.Le name de chaque champ doit être unique au sein du dialogue.
hide_on_add = true ET hide_on_edit = true.L'onglet n'apparaît jamais.Désactiver l'un des deux ou supprimer l'onglet.

Étapes suivantes

  • Champs conditionnels — faire apparaître / rendre obligatoire / verrouiller un champ uniquement sous certaines conditions de formulaire.
  • Actions et cycle de vie — câbler on_load / on_save / on_cancel pour étendre le comportement du dialogue.
  • Onglets imbriqués — intégrer un formulaire d'enregistrement enfant ou une grille de lignes liées.