Propriétés publiques
L'ORM_CSHX2 expose 32 propriétés publiques organisées en 5 catégories : configuration de comportement, métadonnées de classe, clauses de requête SQL, drapeaux d'état framework, et propriétés diverses. Chaque propriété est nommée prioritairement en français avec son équivalent anglais associé pour la rétro-compatibilité.
Propriétés configurables
10 propriétésPropriétés que le code applicatif peut modifier librement pour piloter le comportement d'une instance ORM_CSHX2 (politiques d'instance, drapeaux configurables).
Alimentation automatique des colonnes SQL_INSERTED et SQL_UPDATED à chaque écriture
Lorsqu'elle est à Vrai, le framework alimente automatiquement les colonnes SQL_INSERTED (à l'INSERT) et SQL_UPDATED (à l'UPDATE) avec l'horodatage courant. Mettre à Faux pour préserver les valeurs existantes (cas import / migration).
Archivage MongoDB automatique après chaque écriture
Lorsqu'elle est à Vrai, l'enregistrement est automatiquement archivé dans MongoDB après chaque INSERT ou UPDATE réussi. Permet une traçabilité complète avec horodatage et valeurs avant/après.
À activer uniquement sur les classes métier où la traçabilité est requise (RGPD, audit, données sensibles). Coût en performance et en volume disque.
Journalisation des suppressions dans la table cshx2_trashcan
Lorsqu'elle est à Vrai, chaque suppression est journalisée dans la table cshx2_trashcan avec l'ID, la date, l'utilisateur et la valeur des colonnes au moment de la suppression. Permet la récupération a posteriori d'enregistrements supprimés par erreur.
Suppression en cascade applicative des enregistrements liés
Lorsqu'elle est à Vrai, la suppression d'un enregistrement déclenche également la suppression applicative des enregistrements dépendants (selon les liens déclarés dans l'analyse). Mettre à Faux pour interdire la cascade et obtenir une erreur si des dépendances existent.
La cascade est gérée côté applicatif (dans le code de l'ORM), pas via les contraintes SQL ON DELETE CASCADE. Les politiques sont indépendantes du schéma de base.
Verrouillage applicatif de l'enregistrement (drapeau SQL_LOCKED)
Lorsqu'elle est à Vrai, l'enregistrement est marqué comme verrouillé (colonne framework SQL_LOCKED). Aucune modification ultérieure n'est autorisée tant que le verrou n'est pas levé via mth_UnLockSelonID().
Récupération du LAST_INSERT_ID après un INSERT
Lorsqu'elle est à Vrai, le framework récupère automatiquement l'ID auto-généré après un INSERT (équivalent LAST_INSERT_ID() en MySQL/MariaDB ou RETURNING id en PostgreSQL). Mettre à Faux pour les INSERT en masse où l'ID n'est pas nécessaire (gain de performance).
Override de la langue d'affichage par instance
Permet de surcharger l'ID de langue d'affichage utilisé pour le chargement des traductions, indépendamment de la langue globale de la session. Le getter implémente un fallback automatique :
- Si la valeur est
> 0, elle est renvoyée (l'instance prime) - Sinon, le getter renvoie la langue de la session globale
Permet le multi-langue par instance sans toucher la session globale.
Taille des batches pour les insertions multi-lignes
Définit le nombre d'enregistrements regroupés dans un même INSERT … VALUES par mth_EnregistrerTableau(). Plus la valeur est élevée, moins il y a d'allers-retours avec la base — au prix d'une mémoire serveur plus sollicitée.
Si la valeur affectée est inférieure ou égale à 0, la propriété retombe automatiquement à 250 (valeur par défaut).
Force un INSERT même si la clé primaire est renseignée
Par défaut, mth_Enregistrer() détermine automatiquement s'il s'agit d'un INSERT (PK absente) ou d'un UPDATE (PK présente). Lorsque p_bNouvelEnregistrement est à Vrai, le framework force un INSERT même si la clé primaire est renseignée. Utilisé pour les imports avec ID imposé.
Drapeau d'enregistrement supprimé — exploité par les méthodes d'agrégat
Indique que l'instance représente un enregistrement supprimé (logiquement ou physiquement). Le drapeau est posé automatiquement par le framework après une suppression réussie, et exploité par les 6 méthodes d'agrégat qui excluent automatiquement les éléments marqués supprimés des calculs : mth_SommeValeurs, mth_ValeurMoyenne, mth_ValeurMaximale, mth_ValeurMinimale, mth_ValeursDistinctes, mth_Regroupement.
Le code applicatif peut également poser le drapeau manuellement sur certains tuples pour les exclure des calculs sans suppression base — pattern de marquage logique.
Pratique pour appliquer un filtre métier (lignes annulées, soldes négatifs, doublons) sur un calcul d'agrégat sans modifier la requête SQL ni supprimer physiquement les données.
Métadonnées de classe
5 propriétés (lecture seule)Propriétés calculées par le framework à partir de l'analyse WinDev et de la classe en cours d'instance. Lecture seule : pas de setter exposé.
Nombre d'éléments présents dans m_tabResults après une opération de chargement ou de requête
Renvoie le nombre d'occurrences trouvées dans le tableau de résultats m_tabResults après l'exécution d'une méthode de chargement (mth_ChargerSelonClauseWhere, etc.). Pratique pour boucler sur les résultats sans recalculer la taille du tableau à chaque itération.
Nom de la rubrique correspondant à la clé primaire de la table SQL
Renvoie le nom de la rubrique de l'analyse WinDev qui est mappée à la clé primaire de la table SQL associée à la classe métier. Déterminé statiquement à la déclaration de la classe.
Nom physique de la table SQL associée à la classe métier (sans accents)
Renvoie le nom de la table SQL correspondant au fichier de l'analyse WinDev mappé à la classe, dépouillé des accents (compatible identifiants SQL portables MySQL · MariaDB · PostgreSQL).
Référence à l'objet Définition de la classe en cours
Renvoie l'objet Définition WinDev de la classe en cours, depuis le tableau global des définitions. Permet l'introspection avancée (liste des membres, types, etc.).
Préfixe utilisé pour la génération des UUID (issu de la session)
Proxy vers xFrameWork_Session.Singleton().m_sUUIDPrefix. Renvoie le préfixe utilisé pour générer les identifiants uniques universels (UUID) lors de la création d'enregistrements.
Clauses de requête SQL
10 propriétésPropriétés utilisées pour construire dynamiquement les requêtes SQL générées par les méthodes de chargement et d'agrégat. Modifiables avant un appel pour personnaliser la requête. Le drapeau p_bClauseRAZ contrôle leur réinitialisation après usage.
Filtre WHERE à appliquer à la requête SQL
Définit la clause WHERE à injecter dans la requête SQL générée. La chaîne ne contient pas le mot-clé WHERE lui-même. Les noms de colonnes doivent être quotés via ORM_QuoteIdentifiers() pour la portabilité multi-provider.
Tri ORDER BY à appliquer à la requête
Définit la clause ORDER BY. La chaîne ne contient pas le mot-clé. Multi-colonne supportée avec virgules.
Liste personnalisée des colonnes à sélectionner (override du SELECT par défaut)
Override des colonnes du SELECT. Si non renseignée, la liste complète des rubriques mappées de la classe est utilisée. Permet d'optimiser le trafic réseau quand seules quelques colonnes sont nécessaires.
Liste de colonnes à exclure du SELECT
Liste de colonnes à exclure du SELECT (l'inverse de p_sClauseSelect). Pratique pour récupérer toutes les colonnes sauf quelques exceptions (ex. exclure des colonnes BLOB volumineuses).
Clauses JOIN additionnelles dans la requête
Permet d'injecter des clauses INNER JOIN, LEFT JOIN, RIGHT JOIN dans la requête générée. Utile pour les requêtes multi-tables où le mapping ORM standard ne couvre pas le besoin.
Clause WITH (CTE — Common Table Expression)
Permet d'injecter une clause WITH (Common Table Expression) en tête de la requête. Supporté par les 3 providers (MySQL 8+ · MariaDB 10.2+ · PostgreSQL).
Clause LIMIT — nombre maximum de lignes renvoyées
Limite le nombre de lignes renvoyées par la requête. À utiliser conjointement avec p_nClauseOffset pour la pagination.
Clause OFFSET — décalage de départ pour la pagination
Décalage de départ pour la sélection des lignes. Combiné à p_nClauseLimit, permet la pagination des résultats.
Mode de verrouillage SQL pour la requête (FOR UPDATE, LOCK IN SHARE MODE)
Mode de verrouillage pessimiste appliqué à la requête SELECT. Utilisé dans le cadre de transactions pour réserver les lignes lues. Les valeurs possibles sont définies par les constantes ORM_LOCK_*.
Réinitialise toutes les clauses après l'exécution d'une requête
Lorsqu'elle est à Vrai, le framework remet à blanc toutes les clauses (WHERE, ORDER BY, SELECT, JOIN, etc.) après l'exécution d'une méthode de chargement. Évite les fuites de configuration entre deux requêtes successives sur la même instance.
Drapeaux d'état framework
5 propriétésPropriétés gérées automatiquement par le framework pour suivre l'état interne d'une instance. Le code applicatif peut les lire mais ne devrait pas les modifier directement (sauf cas exceptionnel documenté).
Drapeau "instance modifiée depuis le dernier chargement"
Indique si l'instance a été modifiée depuis son dernier chargement ou enregistrement. Le setter implémente un latch : une fois passée à Vrai, la propriété ne peut être remise à Faux qu'en interne par le framework (lors d'un nouveau chargement ou enregistrement réussi).
Drapeau "hydratation partielle de la hiérarchie"
Indique que l'instance courante n'a pas chargé toute sa hiérarchie d'objets liés (lazy loading, chargement partiel pour optimiser la mémoire). Permet aux méthodes consommatrices de savoir si elles doivent recharger des dépendances avant de les utiliser.
Drapeau "classe sérialisée"
Indique que l'instance courante a été sérialisée (transformation en représentation textuelle pour transport ou persistance). Utilisé en mode API pour gérer la traversée des limites de processus.
Nom de la procédure en cours d'exécution (utilisé pour le logging et le diagnostic)
Proxy vers xFrameWork_Session.Singleton().m_sCurrentProcedure. Le getter implémente un fallback : si la session ne contient pas de procédure courante (chaîne vide), elle est initialisée au nom de l'exécutable courant. Utilisé par les mécanismes de logging et de diagnostic pour contextualiser les erreurs.
Liste des rubriques traduites pour la classe en cours
Liste des colonnes faisant l'objet d'une traduction multi-langue (alimentation conditionnelle de COALESCE dans le SELECT). Renseignée par le framework au moment de la résolution du mapping.
La liste est consultée par le générateur de SELECT pour déterminer si une colonne doit recevoir un traitement de fallback de traduction (COALESCE(traduction, valeur_par_défaut)).
Propriétés diverses
2 propriétésPropriétés ne relevant d'aucune des catégories précédentes.
Type d'accès SQL à utiliser pour les requêtes (mode connexion / mode requête)
Spécifie le type d'accès aux données SQL. Modifié par les classes métier dans des cas particuliers de configuration de connexion ou de routage de requêtes vers une connexion alternative.
GUID temporaire associé à l'instance (transactions, identification provisoire)
GUID temporaire affecté à l'instance avant son enregistrement définitif en base. Permet d'identifier de manière unique une instance pendant sa préparation (utilisé notamment dans les contextes transactionnels où plusieurs instances sont préparées avant le commit).