Breaking changes
1. Gestion des entités et CRUD
1.1 Travail entité par entité
Chaque entité dispose désormais de fonctions de manipulation dédiées.
- Pour une entité Foo :
- $Foo pour la recherche,
- updateFoo pour lâenregistrement,
- deleteFoo pour la suppression.
En v4, ces fonctions travaillent directement sur la base de donnĂ©es et non plus en mĂ©moire. Il nâest plus nĂ©cessaire dâappeler la mĂ©thode dâenregistrement de lâentitĂ© Project pour persister les sous-entitĂ©s.
1.2 Nouvelle syntaxe
const company = await $Company(project, 123); // Recherche d'une Company par son id
await updateCompany(company); // Sauvegarde de l'entitĂ© Company1.3 Ăvolution des mĂ©thodes CRUD
OIP v3 | OIP v4 |
|---|---|
Entities('X').save('Y', X) | updateX(x) |
Entities('X').delete('Y', X) | deleteX(x) |
2. Gestion des propriétés des entités (setters)
2.1 Comportement en v3
En OIP v3, les setters (par exemple setProjectCode) modifiaient directement lâobjet passĂ© en paramĂštre (mutation in-place) :
setProjectCode('GO', project);
await Entities('Project').save(project);- Lâobjet project Ă©tait modifiĂ© directement.
- Il nâĂ©tait pas nĂ©cessaire de rĂ©assigner la variable.
2.2 Comportement en v4
En OIP v4, les setters sont purs (immutables) :
- ils ne modifient plus lâobjet dâorigine,
- ils retournent une nouvelle instance avec la modification appliquée.
project = setProjectCode('GO', project);
await updateProject(project);2.3 SynthĂšse
Les setters :
- ne produisent plus dâeffets de bord implicites,
- rendent les changements explicites (réaffectation obligatoire),
- préparent un typage plus fort et des optimisations internes (undo/redo, diff, transactions, etc.).
3. Enregistrement des entités Project et sous-entités
3.1 Comportement en v3
Lâappel Ă la fonction save sur lâentitĂ© Project permettait dâenregistrer :
- lâentitĂ© Project,
- ainsi que toutes ses sous-entités.
await Entities('Project').save(project);3.2 Comportement en v4
En OIP v4 :
- updateProject(project) ne met Ă jour que lâentitĂ© Project ;
- chaque entité dispose de sa fonction de sauvegarde dédiée.
await updateProject(project); // Met à jour l'entité Project
await updateCompany(company); // Met Ă jour l'entitĂ© CompanyIl est nĂ©cessaire dâappeler les fonctions de mise Ă jour pour chaque entitĂ© concernĂ©e.
4. Gestion du contexte (resolveContext)
4.1 Comportement en v3
En v3, le contexte était passé directement par le développeur aux fonctions.
4.2 Comportement en v4
En v4 :
- le serveur résout le contexte (par défaut ou via un callback),
- il y ajoute sessionId,
- puis appelle la résolution de projet (resolveProjectFromContext) avec un seul objet args.
5. ContrĂŽle de session
5.1 Variables de configuration
OIP v3 | OIP v4 |
|---|---|
SESSION_CHECKING_DISABLED | SECURE_SESSION |
- La variable SECURE_SESSION remplace le comportement de SESSION_CHECKING_DISABLED.
6. Migration businessRoute â routes
En v3, il était possible de définir des routes métier spécifiques via la propriété businessRoute dans la configuration serveur (serverConfig).
En v4, cette propriété est renommée routes.
7. Ăvolutions du hook useProcess
7.1 Handlers exposés
v3 | v4 |
|---|---|
onAction | â supprimĂ© |
onNext | â conservĂ© |
onPrev | â conservĂ© |
- onAction, qui combinait les comportements de onNext et onPrev, a été supprimé.
- Il faut désormais appeler explicitement la méthode correspondant à la transition souhaitée (onNext ou onPrev).
7.2 Nouvelle signature des handlers
Avant (v3)
onNext({ context });AprĂšs (v4)
onNext({ transitionData, resolvedViewData });- transitionData? : données utilisées pour la résolution de la transition,
- resolvedViewData? : données injectées dans la vue suivante.
8. Fragment ProcessFragment (rappel)
Comme indiqué dans la page Conventions & outils :
- metadata â viewData
Ce changement impacte les fragments GraphQL utilisés cÎté client.
9. SynthĂšse des principaux breaking changes
ThĂšme | v3 | v4 |
|---|---|---|
Exports app | start, useProcess, Router, Tokens | start, useProcess, Router |
Fragment process | metadata | viewData |
Custom handlers | useCustomHandlers (hook) | customHandlers (objet) |
Contexte | ctx + ctxPolicy | ctx unique |
ID racine | rootDivId | rootElementId |
Pages dâerreur | 5 props sĂ©parĂ©es | propriĂ©tĂ© unique errorPages |
Router | bundle | views |
Handlers de process | onAction, onNext, onPrev | onNext, onPrev |
Signature handlers | { context } | { transitionData?, resolvedViewData? } |
Setters entités | mutation in-place | setters immutables (retour nouvelle entité) |