Procédure publique · ORM_CSHX2 · Configuration / Session

ORM_Setup

Point d'entrée unique d'initialisation du composant ORM_CSHX2. À appeler depuis le projet hôte une seule fois, avant toute utilisation de l'ORM. Configure connexion, session, sécurité et noms de colonnes framework via la structure ST_ORM_Config. Valide les paramètres obligatoires, applique les valeurs par défaut pour les paramètres optionnels.

Configuration MySQL · MariaDB · PostgreSQL Initialisation unique
01

📋 Description

ORM_Setup est l'unique point d'entrée d'initialisation du composant ORM_CSHX2. Il est conçu pour être appelé une seule fois, au démarrage du projet hôte, avant toute utilisation des classes métier qui héritent du composant.

Son rôle :

  • Recevoir une structure ST_ORM_Config entièrement renseignée par le projet hôte
  • Valider les paramètres obligatoires (et lever une erreur de configuration si invalide)
  • Appliquer les valeurs par défaut sur les paramètres optionnels
  • Préparer la session ORM (utilisateur, poste, version, langue, mode MetaData)
  • Activer les fonctionnalités optionnelles configurées (MongoDB, mode API, chiffrement RGPD)
⚠️ Initialisation unique

Cette procédure ne doit être appelée qu'une seule fois par instance d'application, typiquement dans l'événement d'initialisation du projet WinDev. Un second appel reconfigurerait l'ORM en cours d'exécution avec un comportement non garanti.

02

🔑 Signature

PROCÉDURE PUBLIQUE ORM_Setup(stConfig est un ST_ORM_Config) : (booléen, entier, chaîne)
PositionÉlémentTypeDescription
EntréestConfigST_ORM_ConfigStructure de configuration complète. Voir §03 pour le détail.
Sortie 1bProcessingbooléenVrai si l'initialisation a réussi, Faux sinon.
Sortie 2nErrorCodeentierCode d'erreur (0 si succès) — voir page Codes d'erreur.
Sortie 3sErrorMessagechaîneMessage d'erreur localisé (vide si succès).
03

📦 Structure ST_ORM_Config

Structure de configuration unique du composant ORM.

🔌 Connexion

ChampTypeObligatoireDescription
cnxDataConnexionOuiConnexion native WinDev vers la base de données cible (MySQL, MariaDB ou PostgreSQL).

⚙️ Session

ChampTypeObligatoireDéfautDescription
nMetaDataModeentierOuiMode MetaData : METADATA_MODE_STANDARD (1), METADATA_MODE_SQL_ONLY (2) ou METADATA_MODE_JOIN (3). Voir le guide MetaData.
nUserIDentierOuiIdentifiant de l'utilisateur courant. Doit être > 0.
sWorkStationIDchaîneOuiIdentifiant du poste de travail. Tracé dans les colonnes SQL_IP_USER.
sExeNamechaîneOuiNom de l'exécutable hôte. Tracé dans la colonne SQL_EXE.
sCurrentVersionchaîneNon""Version courante du projet hôte. Information libre, écrite telle quelle.
sUUIDPrefixchaîneNon"ORM"Préfixe utilisé pour la génération des UUID. Voir p_sUUIDPrefix.
nDisplayedLanguageIDentierNon1ID de la langue d'affichage par défaut de la session. 0 ou non renseigné → fallback sur 1.
bGDPREncodingbooléenNonFauxActive le chiffrement RGPD des colonnes sensibles. Si Vrai, sCryptKey devient obligatoire.
sCryptKeychaîneNon*""Clé de chiffrement RGPD. Immuable : assignable une seule fois (n'écrase jamais une clé existante). Obligatoire si bGDPREncoding = Vrai.

🐘 Sous-structure PostgreSQLSetUp — type ST_ORM_PostgreSQL

ChampTypeObligatoireDéfautDescription
bBooleanAsIntegerbooléenNonFauxPostgreSQL spécifique : si Vrai, les booléens sont stockés sous forme d'entier (0/1) au lieu du type natif BOOLEAN. Sans effet sur MySQL/MariaDB.

📦 Sous-structure MongoSetUp — type ST_ORM_Mongo

ChampTypeDescription
bMongoArchiveEnabledbooléenActive globalement l'archivage MongoDB après écriture.
bMongoArchiveDeferredbooléenSi Vrai, l'archivage est différé (asynchrone). Sinon, synchrone bloquant.
sMongoServerAddresschaîneAdresse du serveur MongoDB (FQDN ou IP).
nMongoPortentierPort d'écoute MongoDB (par défaut 27017).
sMongoDatabasechaîneNom de la base d'archivage MongoDB.
sMongoUserchaîneIdentifiant de connexion MongoDB.
sMongoPasswordchaîneMot de passe MongoDB.

🌐 Sous-structure APISetUp — type ST_ORM_API

ChampTypeDescription
bAPI_ModebooléenActive le mode API (calcul automatique du drapeau m_bIsAPIServer).
sAPI_UrlchaîneURL de base du serveur API.
API_TokenAuthTokenJeton d'authentification (type WinDev natif AuthToken).

🏷️ Sous-structure MetadataColumns — type ST_ORM_Colonnes (optionnel)

Permet au projet hôte de surcharger les noms par défaut des colonnes framework. Tout membre laissé vide conserve son nom par défaut.

ChampColonne par défautDescription
sUUIDSQL_UUIDIdentifiant unique universel de la ligne.
sID_USER_INSERTSQL_ID_USER_INSERTUtilisateur ayant créé la ligne.
sID_USER_UPDATESQL_ID_USER_UPDATEDernier utilisateur l'ayant modifiée.
sIP_USERSQL_IP_USERIdentifiant du poste de travail.
sLOCKEDSQL_LOCKEDDrapeau de verrouillage applicatif.
sINSERTEDSQL_INSERTEDHorodatage d'insertion.
sUPDATEDSQL_UPDATEDHorodatage de dernière modification.
sEXESQL_EXENom de l'exécutable.
sPROCEDURE_INSERTSQL_PROCEDURE_INSERTProcédure d'origine de l'insertion.
sPROCEDURE_UPDATESQL_PROCEDURE_UPDATEProcédure d'origine de la dernière modification.
sSTATUSSQL_STATUSStatut applicatif de la ligne.
⚠️ Incompatibilité avec le mode JOIN

Le remapping des noms de colonnes framework est incompatible avec METADATA_MODE_JOIN. Si le mode 3 est utilisé, MetadataColumns doit rester intégralement vide. Voir validation #6 ci-dessous.

04

💡 Exemples

Exemple 1 — Initialisation MySQL standard

Initialisation au démarrage d'un projet WinDev avec MySQL, mode MetaData standard, pas de chiffrement RGPD, archivage MongoDB activé en différé :

ℹ️ Connexion aux données

Dans cet exemple, MaConnexionMySQL désigne la connexion aux données définie dans l'analyse du projet hôte (onglet Connexion de l'éditeur d'analyses WinDev). Le composant ORM_CSHX2 utilise cette connexion telle quelle — il ne la crée pas et ne la modifie pas.

stConfig est un ST_ORM_Config // 🔌 Connexion (définie dans l'analyse du projet hôte) stConfig.cnxData = MaConnexionMySQL // ⚙️ Session stConfig.nMetaDataMode = METADATA_MODE_STANDARD stConfig.nUserID = 42 stConfig.sWorkStationID = NomMachine() stConfig.sExeName = "MonAppli.exe" stConfig.sCurrentVersion = "1.10.Ag" stConfig.nDisplayedLanguageID = 1 stConfig.sUUIDPrefix = "APP" // 🔐 RGPD désactivé stConfig.bGDPREncoding = Faux // 📦 MongoDB en archivage différé stConfig.MongoSetUp.bMongoArchiveEnabled = Vrai stConfig.MongoSetUp.bMongoArchiveDeferred = Vrai stConfig.MongoSetUp.sMongoServerAddress = "mongo.cashx2.fr" stConfig.MongoSetUp.nMongoPort = 27017 stConfig.MongoSetUp.sMongoDatabase = "appli_archive" // 🚀 Initialisation (bOK, nCode, sMsg) = ORM_Setup(stConfig) SI bOK = Faux ALORS Erreur("Initialisation ORM impossible : " + sMsg) FinProgramme() FIN // À partir d'ici, l'ORM est prêt à être utilisé

Exemple 2 — PostgreSQL avec booléens stockés en entier

Lorsque le projet utilise PostgreSQL et impose un stockage des booléens sous forme d'entier (0/1) — typiquement pour interopérer avec une base existante ou un framework qui ne supporte pas le type natif BOOLEAN — la sous-structure PostgreSQLSetUp permet d'activer ce comportement.

stConfig est un ST_ORM_Config // 🔌 Connexion (définie dans l'analyse du projet hôte) stConfig.cnxData = MaConnexionPostgreSQL // ⚙️ Session stConfig.nMetaDataMode = METADATA_MODE_STANDARD stConfig.nUserID = 42 stConfig.sWorkStationID = NomMachine() stConfig.sExeName = "MonAppli.exe" // 🐘 PostgreSQL : booléens stockés sous forme d'entier (0/1) stConfig.PostgreSQLSetUp.bBooleanAsInteger = Vrai // 🚀 Initialisation (bOK, nCode, sMsg) = ORM_Setup(stConfig) SI bOK = Faux ALORS Erreur("Initialisation ORM impossible : " + sMsg) FinProgramme() FIN
ℹ️ Sans effet sur MySQL / MariaDB

bBooleanAsInteger n'a d'effet que sur les connexions PostgreSQL. Sur MySQL et MariaDB, les booléens sont déjà stockés en TINYINT(1) nativement — la propriété est ignorée.

Exemple 3 — Personnalisation des noms de colonnes framework

La sous-structure MetadataColumns permet de surcharger les noms par défaut des colonnes framework (SQL_UUID, SQL_INSERTED, etc.) — utile pour interopérer avec une base existante dont les conventions de nommage diffèrent. Tout membre laissé vide conserve son nom par défaut.

stConfig est un ST_ORM_Config // 🔌 Connexion (définie dans l'analyse du projet hôte) stConfig.cnxData = MaConnexionMySQL // ⚙️ Session stConfig.nMetaDataMode = METADATA_MODE_STANDARD stConfig.nUserID = 42 stConfig.sWorkStationID = NomMachine() stConfig.sExeName = "MonAppli.exe" // 🏷️ Personnalisation des noms de colonnes framework stConfig.MetadataColumns.sUUID = "row_uuid" stConfig.MetadataColumns.sID_USER_INSERT = "created_by" stConfig.MetadataColumns.sID_USER_UPDATE = "updated_by" stConfig.MetadataColumns.sINSERTED = "created_at" stConfig.MetadataColumns.sUPDATED = "updated_at" stConfig.MetadataColumns.sLOCKED = "is_locked" // Les autres colonnes (sIP_USER, sEXE, sSTATUS...) gardent leur nom par défaut // 🚀 Initialisation (bOK, nCode, sMsg) = ORM_Setup(stConfig) SI bOK = Faux ALORS Erreur("Initialisation ORM impossible : " + sMsg) FinProgramme() FIN
⚠️ Incompatibilité avec le mode JOIN

Cette personnalisation est incompatible avec METADATA_MODE_JOIN. Le mode 3 repose sur des noms de colonnes framework fixes — toute valeur non vide dans MetadataColumns sera rejetée par les validations.