📥 Ressources · Release notes · ORM_CSHX2 · 22 mars 2026

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.

1 Correction bloquante 1 Nouveauté 1 Amélioration Rétrocompatible MySQL · MariaDB · PostgreSQL
01
📋 Sommaire

Trois modifications livrées dans cette version :

TypeSujetImpact
🐛 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
02
🐛 Correction bloquante — Crash à l'enregistrement selon la casse des rubriques
🚨 Correction critique
⚠️ Symptôme utilisateur

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.

✅ Ce qui change
  • 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.
Périmètre couvert
INSERT, UPDATE, détection des colonnes framework manquantes, mode METADATA_MODE_SQL_ONLY.
Classes touchées
xFrameWork_CSHX2
Risque de régression
Nul — la recherche insensible à la casse accepte un sur-ensemble des cas que la recherche sensible acceptait. Les résolutions qui fonctionnaient continuent de fonctionner à l'identique.
03
✨ Nouveauté — Callback personnalisé pour le mode verbose
✨ Ajout fonctionnel

La 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.

Nouvelle signature
PROCÉDURE ORM_VerboseMode(LOCAL bModeVerboseStatus est un booléen, LOCAL sCallBack est une chaîne = "")
Ancien usage — toujours valide
xFrameWork_Session.ORM_VerboseMode(Vrai)
Nouveau usage
xFrameWork_Session.ORM_VerboseMode(Vrai, "MaProcedureDeLog")

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.

📐 Signature requise de la procédure de callback

La procédure dont le nom est passé à ORM_VerboseMode doit respecter la signature suivante :

Signature callback
PROCÉDURE VerboseCallBack(LOCAL sMessage est une chaîne)

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.

Rétrocompatibilité
Totale — le second paramètre a une valeur par défaut "", les appels existants à un seul paramètre continuent de fonctionner à l'identique.
Classe touchée
xFrameWork_Session
Validation existence procédure
Non contrôlée — à la charge de l'appelant.
04
🔧 Amélioration — Cohérence de m_tabResults après INSERT unitaire
🔧 Amélioration comportementale
Avant cette version

Aprè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().

✅ Ce que vous gagnez
  • p_nOccurrencesTrouvées reflè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, sans mth_Charger… préalable.
  • Comportement cohérent avec SELECT : un objet fraîchement créé est immédiatement exposé dans m_tabResults.
OpérationComportement
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é
UPDATEPrécédé d'un SELECT qui remplit déjà m_tabResults — comportement inchangé
DELETESans objet — comportement inchangé
05
🔒 Compatibilité & Déploiement
AxeStatut
ProvidersMySQL · MariaDB · PostgreSQL
Modes metadataStandard · SQL_ONLY · JOIN
Rétrocompatibilité code applicatifTotale — aucune API modifiée en rupture
Changement de signature publiqueOui, additif uniquementORM_VerboseMode avec second paramètre optionnel
Mise à jour base de donnéesAucune
Action requiseRemplacer le composant, recompiler, déployer
ℹ️ Recommandation

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.

06
📚 Détail technique

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 :

CarteSujet
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
🔍 Procédures concernées par le fix de casse
  • prv_CLASS_Mapping — résolution rubriqueSQL → membre WLangage
  • prv_DetectFrameworkMissingColumns — détection des colonnes framework absentes de l'analyse
  • prv_InjectFrameworkValues — injection des colonnes framework en INSERT/UPDATE
  • prv_SQL_BuildValues — bloc METADATA_MODE_SQL_ONLY
  • pro_CLASS_Introspection — tri final de g_tabListesMembres aligné