Créer un formulaire d’ouverture de dossier
Dans ce guide, vous créez un formulaire d’ouverture de dossier de support et vous l’exécutez dans le starter React et Vite. Le formulaire comprend :
- des champs de contact qui apparaissent, et deviennent obligatoires, selon le mode de contact préféré ;
- une priorité calculée à partir des réponses ;
- une date de réponse calculée à partir de la priorité ;
- un champ d’impact métier obligatoire uniquement pour les dossiers de priorité haute.
Tout ce comportement tient dans un seul schéma JSON. Le code de l’application se contente d’enregistrer le formulaire.
Durée : environ 15 minutes.
Avant de commencer
- Node.js
22.19.0+ - form0-cli, installé avec
npm install --global form0-cli
Le starter React + Vite inclut les paquets form0 nécessaires. Si vous utilisez une application
existante, elle doit utiliser au minimum form0-core 0.4.1 et form0-react 0.2.2. Suivez
Installer et afficher avec React pour les installer ou les
mettre à jour avant de copier le schéma.
Créer le formulaire
-
Créez une application web avec le starter :
CodeChoisissez Application web, puis React + Vite. Entrez ensuite dans le dossier du projet :
Code -
Créez
src/forms/case-intake/schema.jsonavec ce schéma :CodeDans ce schéma, la
keyde chaque champ est identique à sondata_name, pour que les conditions restent lisibles. Quand vous ajoutez des champs avec la CLI, elle génère des clés aléatoires. -
Enregistrez le formulaire dans
src/forms/registry.jsen ajoutant une entrée au tableauforms:Code -
Démarrez l’application et le serveur de développement form0 :
CodeLa CLI installe les dépendances au premier lancement, valide le schéma, surveille ses modifications et démarre le serveur Vite.
-
Ouvrez
http://localhost:5173/case-intakeet essayez le formulaire :- Choisissez Email comme mode de contact. Le champ Email apparaît et devient obligatoire. Passez à Phone : le champ Phone le remplace.
- Choisissez My team et répondez No à Is work blocked?. Priority affiche
normal, et Respond by tombe trois jours après Received on. - Changez la réponse en Yes. Priority passe à
high, Respond by avance au lendemain et Describe the business impact apparaît comme champ obligatoire.
-
Remplissez les champs obligatoires et soumettez le formulaire. Ouvrez la console de développement de votre navigateur pour voir l’enregistrement structuré que le starter affiche.
Comment ça marche
Champs conditionnels
Le champ Email est masqué par défaut. Ses conditions l’affichent, et le rendent obligatoire,
lorsque le mode de contact est email :
Code
Une condition sur un champ de choix compare la value du choix sélectionné, pas son libellé.
Consultez Conditions et opérateurs.
Masquer un champ n’efface pas sa valeur. Si quelqu’un saisit une adresse e-mail puis passe à Phone, l’adresse reste dans les valeurs du formulaire. C’est à votre application de décider si les valeurs masquées doivent être conservées.
Priorité calculée
priority est un CalculatedField. Son expression calculate lit les réponses à Who is
affected? et Is work blocked? :
Code
CHOICEVALUE() renvoie la valeur sélectionnée d’un champ de choix. Le premier IF() laisse la
priorité vide tant que Who is affected? n’a pas de réponse.
Les expressions de cette page sont réparties sur plusieurs lignes pour rester lisibles. Dans le
schéma, chacune tient sur une seule ligne. Si vous écrivez un calcul sur plusieurs lignes, indiquez
son résultat avec SETRESULT() ou une
instruction return explicite.
Date de réponse
respond_by ajoute un nombre de jours à received_on, selon la priorité :
Code
DATEADD() renvoie null lorsque le nombre
de jours est vide : la date reste vide tant qu’il n’y a pas de priorité.
"display": { "style": "date" } indique au renderer d’afficher le résultat comme une date.
Une condition pilotée par un calcul
Describe the business impact utilise le même type de condition que Email, mais il lit
priority, qui est lui-même calculé :
Code
Cela fonctionne parce que le moteur exécute les calculs avant d’évaluer les conditions.
Ce qui vient de se passer
À chaque réponse modifiée, le renderer du starter l’a transmise au moteur form0. Le moteur a
recalculé priority puis respond_by, dans l’ordre des dépendances, puis il a réévalué quels champs
sont visibles et obligatoires. Le renderer s’est contenté d’afficher le résultat. Le même schéma
produit le même comportement dans toute application qui utilise form0.
Pour aller plus loin :
- Cycle d’évaluation : ce que fait une passe d’évaluation, et dans quel ordre.
- Calculs et dépendances : comment le moteur ordonne les calculs qui dépendent les uns des autres.
- Soumissions et connecteurs : où va l’enregistrement soumis dans le starter, et comment l’envoyer vers une base de données.