Méthode publique · ORM_CSHX2 · Recherche en mémoire

mth_RenvoyerAttributSelonID

Recherche dans le tableau interne m_tabResults l'objet dont la clé primaire correspond à l'ID passé en paramètre, et retourne la valeur d'un attribut nommé. Recherche en mémoire — aucune requête SQL n'est émise.

PUBLIQUE RECHERCHE MySQL · MariaDB · PostgreSQL
01

📋 Description

mth_RenvoyerAttributSelonID permet de retrouver, parmi les objets présents dans m_tabResults, celui dont la clé primaire correspond à l'ID passé en paramètre, puis d'en extraire la valeur d'un attribut désigné par son nom.

La méthode est polymorphe : elle retourne un Variant, ce qui permet de récupérer indifféremment une chaîne, un entier, un booléen, une date ou tout autre type d'attribut sans typage à la déclaration.

🎯 Quand utiliser cette méthode

1. Lookup ad-hoc sur un attribut quand l'ID est déjà connu. Cas le plus courant : on a en main l'ID d'un enregistrement (issu d'un sélecteur, d'un autre traitement, d'un paramètre…) et on veut récupérer une valeur précise sans reparcourir manuellement le tableau.

2. Évite de reparcourir m_tabResults manuellement. Plutôt qu'une boucle POUR avec test conditionnel sur la clé primaire, un appel direct résout le besoin en une ligne.

3. Alternative à mth_ChargerSelonID quand l'objet est déjà en mémoire. Si m_tabResults contient déjà l'enregistrement souhaité (typiquement après un mth_ChargerSelonClauseWhere ramenant une liste), inutile de redemander à la base — la lecture en mémoire est instantanée.

ℹ️ Recherche en mémoire — pas de SQL

La méthode opère uniquement sur le tableau m_tabResults déjà chargé en mémoire. Aucune requête SQL n'est émise, aucun aller-retour réseau, pas d'impact sur la base. C'est une opération en O(n) sur la taille du tableau.

02

🔑 Signature

Déclaration
PROCÉDURE mth_RenvoyerAttributSelonID(
  LOCAL nIDTuple est un entier,
  LOCAL sNomAttribut est une chaîne
) : Variant
ÉlémentValeur
VisibilitéPUBLIQUE

Paramètres

ParamètreTypeRôle
nIDTupleentierValeur de la clé primaire de l'enregistrement recherché. Doit être strictement positif (> 0) ; toute autre valeur retourne Null immédiatement.
sNomAttributchaîneNom de l'attribut à récupérer, sous la forme du nom du membre WLangage (ex : "m_DENOMINATION", "m_VILLE", "m_ID_CLIENT").
03

🧭 La clé primaire de la classe métier

La méthode recherche dans m_tabResults l'objet dont le membre désigné comme clé primaire de la classe vaut nIDTuple. La résolution du nom du membre clé primaire est faite dynamiquement par le framework, ce qui rend la méthode tolérante à toutes les conventions de nommage utilisées dans les classes métier.

Tolérance aux conventions de nommage

Que la clé primaire soit déclarée m_ID_CLIENT, m_IDClient, m_nID_CLIENT ou tout autre nom, la méthode fonctionne sans paramétrage supplémentaire. Le framework identifie le membre concerné via le mapping de la classe.

⚠️ Méthode utilisable uniquement sur des objets enregistrés

Cette méthode ne fonctionne que pour des objets dont la clé primaire est strictement positive (> 0) — c'est-à-dire des objets déjà enregistrés en base. Pour identifier un objet avant son enregistrement (PK = 0), utiliser plutôt mth_RenvoyerAttributSelonGUID qui s'appuie sur p_sGUIDTemp, attribué dès la construction de l'instance.

04

📤 Valeur de retour

La méthode retourne un Variant. Selon les cas :

CasRetour
Objet trouvé, attribut renseignéValeur de l'attribut (type variable selon l'attribut)
nIDTuple ≤ 0 (ID invalide)Null
m_tabResults est videNull
Aucun objet du tableau ne correspond à l'IDNull
ℹ️ Tester avec <> Null

Le retour Null couvre indifféremment les trois cas d'absence (ID invalide, tableau vide, ID non trouvé). Tester SI vRetour <> Null ALORS avant utilisation est la pratique courante.

05

💡 Exemples

Mode 1 — lookup nominal après chargement

// ── Charger une liste de clients en mémoire ───────────────────── clClient:p_sClauseWhere = "clients.VILLE = 'Paris'" clClient:mth_ChargerSelonClauseWhere() // ── Retrouver la dénomination du client d'ID 42 ───────────────── vNom est un Variant = clClient:mth_RenvoyerAttributSelonID(42, "m_DENOMINATION") SI vNom <> Null ALORS Info("Client 42 : " + vNom) SINON Info("Client 42 introuvable dans le tableau") FIN

Mode 2 — éviter une requête SQL redondante

Cas d'usage : on a déjà chargé une liste, et on veut consulter un attribut d'un élément précis sans relancer de requête.

// ── Liste de commandes déjà en mémoire ────────────────────────── clCommande:mth_ChargerSelonClauseWhere() // 200 commandes chargées // ── Pour chaque sélection IHM, lookup direct sans requête ─────── nIDSelectionne est un entier = TABLE_Commandes.COL_ID vMontant est un Variant = clCommande:mth_RenvoyerAttributSelonID(nIDSelectionne, "m_MONTANT_TTC") SI vMontant <> Null ALORS LIB_Detail = "Montant : " + vMontant + " €" FIN // ✅ Aucune requête SQL émise — lecture instantanée en mémoire

Mode 3 — lookup défensif avec gestion du Null

vAttribut est un Variant = clClient:mth_RenvoyerAttributSelonID(nID, "m_VILLE") SI vAttribut = Null ALORS // ID invalide, tableau vide, ou ID non présent dans le tableau Trace("Client introuvable : ID=" + nID) SINON sVille est une chaîne = vAttribut // conversion implicite Info("Ville : " + sVille) FIN