Évolution et migrations
Adapter un Model sans perdre les données et le travail existants.
Décrire le changement
Ajouter un Field, changer son type et supprimer une relation n’ont pas le même effet. Avant d’activer une nouvelle définition, examinez les données, vues, Actions et travaux concernés. Les identités stables permettent de reconnaître ce qui évolue.
| Changement | Analyse attendue | Vérification |
|---|---|---|
| Ajouter un Field | Valeur initiale et caractère requis | Création et fiches existantes |
| Changer un type | Compatibilité et transformation des valeurs | Données et contrôles |
| Renommer une clé | Références et identité | Queries, vues et Actions |
| Changer une relation | Objets et cardinalité | Sélection et liens inverses |
| Modifier un Flow | Exécutions et résultats en cours | Version et reprise |
Préparer et examiner
Le changement doit présenter son périmètre, les transformations nécessaires et les éventuels conflits. Un aperçu permet d’examiner les effets avant activation. Les contenus humains ne doivent pas être réécrits comme une simple conséquence d’une mise à jour de présentation.
Exemple
Vous rendez Courriel obligatoire pour les nouveaux clients. Les fiches historiques sans courriel doivent être identifiées et traitées selon la politique choisie. Ajouter une validation dans le formulaire ne suffit pas à rendre ces données conformes.
Activer et contrôler
Après application, vérifiez les objets affectés et les parcours concernés. La version installée, les opérations de migration et les diagnostics permettent de comprendre le résultat. Les anciens contrats restent interprétés selon leur définition, sans ajouter silencieusement les propriétés d’une version plus récente.
Pour une mise à niveau publiée, choisissez la version exacte puis la destination de chaque Space. La revue distingue le fonctionnement conservé de l’adaptation à la nouvelle version; adapter un Space exige l’autorité sur son contenu. Les noms déclarés restent ceux de l’application source, même si les destinations de la nouvelle version portent d’autres noms. Une réponse incertaine reprend la même confirmation. Après une mise à niveau enregistrée, réessayez uniquement l’ouverture si elle échoue : ne confirmez pas à nouveau. Un accès au nouveau guide à rétablir est signalé séparément de l’enregistrement de la mise à niveau.
Exemples appliqués : Faire évoluer une fiche existante
Préservez les clés des Fields et comparez la nouvelle présentation avant de l’appliquer aux instances.
Configuration
Fragment à placer dans presentation.recordProfiles[]. Propriétés et valeurs admises.
{
"key": "client",
"definitionPaths": [
"workspace/clients/surface/client"
],
"editActionKey": "edit-client",
"identity": {
"title": {
"kind": "field",
"fieldPath": "fields/company"
},
"avatar": {
"kind": "initials",
"maximumLetters": 2
},
"subtitle": {
"kind": "field",
"fieldPath": "fields/status"
}
},
"valueLabels": [
{
"fieldPath": "fields/status",
"values": [
{
"value": "prospect",
"label": "Prospect"
},
{
"value": "active",
"label": "Actif"
}
]
}
],
"card": {
"summary": {
"kind": "field",
"fieldPath": "fields/notes"
},
"tags": {
"namespace": "user",
"maximumVisible": 3
},
"metricKeys": [],
"openLabel": "Ouvrir le client"
},
"queryBindings": [],
"metrics": [],
"detail": {
"primaryActionKey": null,
"creationActionKeys": [],
"actionKeys": [],
"sections": [
{
"kind": "fields",
"key": "follow-up",
"label": "Suivi du client",
"fieldPaths": [
"fields/notes",
"fields/status"
]
}
],
"settings": {
"fieldPaths": [
"fields/email"
]
},
"tags": {
"namespace": "user",
"maximumVisible": 3
},
"relatedGroups": [],
"primaryActionLabel": null
}
}
Variante et raccordement
Fragment à placer dans forms[]. Propriétés et valeurs admises.
{
"contract": "WorkspaceForm@2",
"key": "edit-client",
"label": "Modifier le client",
"actionKey": "edit-client",
"targetDefinitionPath": "workspace/clients/surface/client",
"mode": "edit",
"fields": [
{
"contract": "WorkspaceFormControl@2",
"repeatable": false,
"key": "company",
"label": "Entreprise",
"input": "text",
"binding": {
"kind": "field",
"fieldKey": "company"
},
"required": true,
"ruleKeys": [],
"options": []
},
{
"contract": "WorkspaceFormControl@2",
"repeatable": false,
"key": "status",
"label": "État",
"input": "choice",
"binding": {
"kind": "field",
"fieldKey": "status"
},
"required": true,
"ruleKeys": [],
"options": [
"prospect",
"active"
]
},
{
"contract": "WorkspaceFormControl@2",
"repeatable": false,
"key": "notes",
"label": "Notes",
"input": "multiline",
"binding": {
"kind": "field",
"fieldKey": "notes"
},
"required": false,
"ruleKeys": [],
"options": []
}
],
"ruleKeys": []
}
Exemple de disposition UI
La disposition illustrative ci-dessous situe cette configuration dans l’app Clients/Soumissions. Chaque fragment s’insère à l’emplacement indiqué; ses références aux Fields, Queries et Actions correspondent aux déclarations du Model.
- Objet concerné
- Changement proposé
- Vérifications
- Confirmer
- Changement proposé
- Préservez les clés des Fields et comparez la nouvelle présentation avant de l’appliquer aux instances.
- Données et références
- Client · Besoin · Tarifs