Mise à jour v1.00I
Cette mise à jour corrige un bug bloquant sur l'enregistrement d'objets et apporte deux améliorations mineures. Elle est compatible descendante : aucun changement de code applicatif n'est nécessaire pour bénéficier des corrections. Il suffit de remplacer le composant, recompiler et déployer.
Trois modifications livrées dans cette version :
| Type | Sujet | Impact |
|---|---|---|
| 🐛 Fix | Crash à l'enregistrement selon la casse des rubriques | Bloquant — certaines classes plantaient sur mth_Enregistrer() |
| ✨ Feat | Callback personnalisé pour le mode verbose | Additif — permet de rediriger les messages verbose vers une procédure applicative |
| 🔧 Enh | Cohérence de m_tabResults après INSERT unitaire |
Mineur — p_nOccurrencesTrouvées reflète maintenant correctement l'état post-INSERT |
Erreur L'opérateur d'indirection {} est interdit avec une chaîne vide comme paramètre
lors d'un mth_Enregistrer(). Tous les types de rubriques
sont potentiellement concernés — la première rubrique rencontrée dont la casse diffère du registre
déclenche le crash, quel que soit son type HFSQL. La pile d'appels pointait typiquement vers
prv_SQL_UpdateCore, prv_SQL_Persist
et mth_Enregistrer.
Le bug se manifestait quand le nom d'une rubrique SQL arrivait dans l'ORM avec une casse légèrement
différente de celle enregistrée dans le registre interne des membres de classe — par exemple
Date_Création au lieu de DATE_CREATION. Dans ce cas, la résolution interne
du nom de membre WLangage échouait silencieusement, et l'étape suivante plantait sur une indirection vide.
- Les recherches internes de l'ORM sont désormais insensibles à la casse sur les noms de tables et de rubriques.
- Le tri du registre interne est aligné sur cette même logique pour garantir la cohérence.
- Aucune action requise : le correctif s'applique automatiquement dès le remplacement du composant.
METADATA_MODE_SQL_ONLY.xFrameWork_CSHX2La procédure ORM_VerboseMode de la classe xFrameWork_Session
accepte désormais un second paramètre optionnel pour enregistrer le nom d'une procédure
de callback qui recevra les messages verbose émis par l'ORM.
Le nom de la callback est stocké dans le singleton de session (m_sCallBackVerbose) et pourra
être invoqué aux points d'émission de messages verbose : affichage dans une fenêtre de log, écriture fichier,
remontée UI, télémétrie applicative, etc.
La procédure dont le nom est passé à ORM_VerboseMode doit
respecter la signature suivante :
Le nom du paramètre formel est libre ; seuls le type
(chaîne) et l'arité (1 paramètre) importent. L'ORM invoquera cette
procédure à chaque point d'émission verbose en lui passant le message à traiter.
"", les appels existants à un seul paramètre continuent de fonctionner à l'identique.xFrameWork_SessionAprès un mth_Enregistrer() réussi sur un nouvel objet (INSERT),
la propriété p_nOccurrencesTrouvées retournait 0 au lieu de 1,
alors que l'objet venait d'être créé en base avec sa PK, son UUID, son horodatage et ses membres framework.
L'instance est désormais automatiquement ajoutée au tableau interne m_tabResults
après un INSERT unitaire réussi, au même titre qu'après un SELECT via
mth_ChargerSelonID() ou mth_ChargerSelonClauseWhere().
p_nOccurrencesTrouvéesreflète correctement l'état après INSERT unitaire.- Les méthodes agrégat (
mth_Distinct,mth_GroupConcat,mth_MaxValue,mth_MinValue,mth_AverageValue,mth_SumValues) peuvent être appelées juste après un INSERT, sansmth_Charger…préalable. - Comportement cohérent avec SELECT : un objet fraîchement créé est immédiatement exposé
dans
m_tabResults.
| Opération | Comportement |
|---|---|
INSERT unitaire (mth_Enregistrer) | ✅ Instance ajoutée automatiquement (nouveau) |
INSERT batch (mth_EnregistrerTableau) | Les objets sont déjà dans m_tabResults en amont — comportement inchangé |
| UPDATE | Précédé d'un SELECT qui remplit déjà m_tabResults — comportement inchangé |
| DELETE | Sans objet — comportement inchangé |
| Axe | Statut |
|---|---|
| Providers | MySQL · MariaDB · PostgreSQL |
| Modes metadata | Standard · SQL_ONLY · JOIN |
| Rétrocompatibilité code applicatif | Totale — aucune API modifiée en rupture |
| Changement de signature publique | Oui, additif uniquement — ORM_VerboseMode avec second paramètre optionnel |
| Mise à jour base de données | Aucune |
| Action requise | Remplacer le composant, recompiler, déployer |
La correction bloquante traitée dans cette version peut se déclencher sur n'importe quelle classe, quels que soient les types des rubriques mappées, dès que la casse utilisée dans l'analyse WinDev diffère de celle rencontrée lors des opérations de persistance. Une mise à jour est fortement recommandée pour tous les déploiements en production.
Pour les développeurs souhaitant le détail exact de chaque modification (procédures touchées, extraits de code, périmètre précis, justifications), les cartes correspondantes sont disponibles sur le board Trello ORM2026 → ChangeLog :
| Carte | Sujet |
|---|---|
| 8WP6nFD8 | xFrameWork_CSHX2 · Recherches et tri g_tabListesMembres — Passage insensible à la casse |
| NeBfjQVJ | xFrameWork_Session · ORM_VerboseMode — Ajout paramètre sCallBack pour callback verbose |
| mtIMs9Nx | xFrameWork_CSHX2 · prv_SQL_Persist — Ajout instance dans m_tabResults après INSERT unitaire |
prv_CLASS_Mapping— résolutionrubriqueSQL → membre WLangageprv_DetectFrameworkMissingColumns— détection des colonnes framework absentes de l'analyseprv_InjectFrameworkValues— injection des colonnes framework en INSERT/UPDATEprv_SQL_BuildValues— blocMETADATA_MODE_SQL_ONLYpro_CLASS_Introspection— tri final deg_tabListesMembresaligné