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

mth_RenvoyerIDSelonAttribut

Recherche dans le tableau interne m_tabResults tous les objets dont un membre nommé est égal à une valeur cherchée, et retourne un tableau de leurs clés primaires. Recherche en mémoire — aucune requête SQL n'est émise.

PUBLIQUE RECHERCHE MySQL · MariaDB · PostgreSQL
01

📋 Description

mth_RenvoyerIDSelonAttribut permet de retrouver, parmi les objets présents dans m_tabResults, tous ceux dont un membre désigné par son nom contient la valeur cherchée, et de récupérer leurs clés primaires sous forme de tableau d'entiers.

Contrairement à mth_RenvoyerAttributSelonID et mth_RenvoyerAttributSelonGUID qui retournent une seule valeur (premier match), mth_RenvoyerIDSelonAttribut est une recherche multi-match : si plusieurs objets correspondent au critère, tous les IDs sont collectés.

🎯 Quand utiliser cette méthode

1. Recherche par valeur fonctionnelle (code, libellé, statut, catégorie). Typiquement, on a une valeur métier en main et on veut retrouver les enregistrements correspondants — par exemple, retrouver tous les clients dont le code postal vaut "75001", ou toutes les commandes au statut "En attente".

2. Récupération multi-match. La méthode retourne tous les IDs qui matchent, pas seulement le premier. Utile pour lister tous les enregistrements partageant un même statut, une même catégorie, ou tout autre attribut non unique.

3. Pré-sélection en mémoire avant action. Récupérer une liste d'IDs pour ensuite itérer dessus (chargement détaillé, suppression sélective, mise à jour en lot) sans repasser par SQL.

ℹ️ 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_RenvoyerIDSelonAttribut(
  LOCAL sMembreClasse est une chaîne,
  LOCAL vValeurCherchée est un Variant
) : tableau d'entiers
ÉlémentValeur
VisibilitéPUBLIQUE

Paramètres

ParamètreTypeRôle
sMembreClassechaîneNom du membre WLangage à comparer, sous la forme du nom du membre dans la classe (ex : "m_sCodeArticle", "m_VILLE", "m_nSTATUT").
vValeurCherchéeVariantValeur recherchée dans le membre désigné. Le type accepté est volontairement polymorphe (Variant) pour s'adapter à tout type d'attribut : chaîne, entier, booléen, date, etc.
03

🧭 Comportement multi-match

La méthode parcourt m_tabResults dans son intégralité et collecte la clé primaire de chaque élément satisfaisant le critère sMembreClasse = vValeurCherchée. C'est une différence notable avec ses méthodes sœurs :

MéthodeStratégieRetour
mth_RenvoyerAttributSelonIDPremier match (ID unique)Variant
mth_RenvoyerAttributSelonGUIDPremier match (GUID unique)Variant
mth_RenvoyerIDSelonAttributMulti-match (tous les éléments satisfaisant le critère)Tableau d'entiers

Comparaison stricte sur la valeur

La comparaison est une égalité stricte entre la valeur du membre et vValeurCherchée. Pas de LIKE, pas d'expression régulière, pas de comparaison insensible à la casse — le critère est binaire (égal / pas égal).

ℹ️ Tester la taille du tableau retourné

Le tableau peut contenir 0, 1 ou plusieurs IDs selon le nombre d'objets matchant le critère. Tester SI Dimension(tabIDs) > 0 ALORS avant d'itérer est la pratique courante.

04

📤 Valeur de retour

La méthode retourne un tableau d'entiers. Selon les cas :

CasRetour
Un ou plusieurs objets satisfont le critèreTableau contenant les clés primaires de tous les éléments matchant
sMembreClasse est vide ou ne contient que des espacesTableau vide
vValeurCherchée vaut NullTableau vide
m_tabResults est videTableau vide
Aucun élément du tableau ne correspondTableau vide

Le retour est toujours un tableau valide — jamais Null. Les cas d'absence (paramètres invalides, tableau source vide, aucun match) se distinguent uniquement par leur taille zéro.

05

💡 Exemples

Mode 1 — recherche par valeur fonctionnelle (multi-match)

// ── Charger une liste de clients en mémoire ───────────────────── clClient:mth_ChargerSelonClauseWhere() // ── Retrouver tous les clients du code postal 75001 ───────────── tabIDs est un tableau d'entiers tabIDs = clClient:mth_RenvoyerIDSelonAttribut("m_CODE_POSTAL", "75001") SI Dimension(tabIDs) > 0 ALORS Info(Dimension(tabIDs) + " client(s) trouvé(s) à Paris 1er") SINON Info("Aucun client à Paris 1er") FIN

Mode 2 — itération sur les IDs trouvés pour traitement

Cas d'usage : récupérer tous les enregistrements partageant un statut, puis les traiter un par un.

// ── Toutes les commandes au statut "En attente" ───────────────── tabIDs est un tableau d'entiers tabIDs = clCommande:mth_RenvoyerIDSelonAttribut("m_STATUT", STATUT_EN_ATTENTE) // ── Itérer dessus pour exécuter une action ────────────────────── POUR CHAQUE nID DE tabIDs Trace("Commande à traiter : ID=" + nID) // ... traitement spécifique pour chaque ID ... FIN

Mode 3 — recherche avec une valeur typée (entier, booléen, date)

Le 2e paramètre étant un Variant, n'importe quel type de valeur peut être utilisé pour la recherche.

// ── Recherche par entier ──────────────────────────────────────── tabIDs = clClient:mth_RenvoyerIDSelonAttribut("m_NIVEAU_FIDELITE", 3) // ── Recherche par booléen ─────────────────────────────────────── tabIDs = clClient:mth_RenvoyerIDSelonAttribut("m_bACTIF", Vrai) // ── Recherche par date ────────────────────────────────────────── tabIDs = clCommande:mth_RenvoyerIDSelonAttribut("m_DATE_LIVRAISON", DateSys())

Mode 4 — combinaison avec mth_RenvoyerAttributSelonID

Cas d'usage typique : trouver les IDs par critère, puis lire un attribut précis sur chacun, le tout en mémoire.

// ── Étape 1 : trouver les IDs des clients premium ─────────────── tabIDs est un tableau d'entiers tabIDs = clClient:mth_RenvoyerIDSelonAttribut("m_CATEGORIE", "Premium") // ── Étape 2 : pour chacun, lire le nom et l'afficher ──────────── POUR CHAQUE nID DE tabIDs vNom est un Variant vNom = clClient:mth_RenvoyerAttributSelonID(nID, "m_DENOMINATION") SI vNom <> Null ALORS Trace("Client premium : " + vNom) FIN FIN // ✅ Tout en mémoire — aucune requête SQL pour cette phase