Listes d'objets (tech)

De Wiki1000
(Différences entre les versions)
(Méthodes)
Ligne 99 : Ligne 99 :
 
|-
 
|-
 
|[[IndexOf (objectlist)|IndexOf]]
 
|[[IndexOf (objectlist)|IndexOf]]
|<source lang='delphi'>function IndexOf (const iOID :TOID) :Integer;</source>
+
|Renvoie la position d'un objet identifié par son identifiant.
|Renvoie la position d'objet ayant l'oid iOID dans la liste.
+
 
|-
 
|-
 
|[[IndexByOrder (objectlist)|IndexByOrder]]
 
|[[IndexByOrder (objectlist)|IndexByOrder]]
|<source lang='delphi'>function IndexByOrder (const V :Variant):Integer;</source>
+
|Renvoie la position d'un objet identifié par sa valeur de tri.
|Recherche l'élément de valeur V ; si la liste n'est pas triée, cette fonction provoque une exception.
+
 
|-
 
|-
 
|[[AddOID (objectlist)|AddOID]]
 
|[[AddOID (objectlist)|AddOID]]
|<source lang='delphi'>function AddOid(const iOID:TOID):Integer;</source>
+
|Ajoute un objet dans la liste.
|Ajoute dans la liste l'objet ayant l'oid iOID.
+
 
|-
 
|-
 
|[[AddRef (objectlist)|AddRef]]
 
|[[AddRef (objectlist)|AddRef]]
|<source lang='delphi'>function AddRef(iInst:TitObject):Integer;</source>
+
|Ajoute un objet dans la liste.
|Ajoute dans la liste l'objet iInst.
+
 
|-
 
|-
 
|[[Insert (objectlist)|Insert]]
 
|[[Insert (objectlist)|Insert]]
|<source lang='delphi'>function Insert(iIndex :Integer; iInst :TitObject):Integer;</source>
+
|Insère un objet dans la liste.
|Insère l'objet iInst dans la liste à la position spécifiée par iIndex.
+
Insert insère l'élément à la position indiquée et décale vers le bas l'élément occupant préalablement l'emplacement ainsi que tous ceux le suivant.
+
 
|-
 
|-
 
|[[RemoveOID (objectlist)|RemoveOID]]
 
|[[RemoveOID (objectlist)|RemoveOID]]
|<source lang='delphi'>procedure RemoveOid(const iOID :TOID);</source>
+
|Supprime un objet de la liste.
|Supprime l'objet ayant l'oid iOID de la liste. Une fois l'objet supprimé, tous les objets suivants remontent dans la liste.
+
 
|-
 
|-
 
|[[RemoveRef (objectlist)|RemoveRef]]
 
|[[RemoveRef (objectlist)|RemoveRef]]
|<source lang='delphi'>procedure RemoveRef (iInst :TitObject);</source>
+
|Supprime un objet de la liste.
|Supprime l'objet iInst de la liste.
+
 
|-
 
|-
 
|[[Delete (objectlist)|Delete]]
 
|[[Delete (objectlist)|Delete]]
|<source lang='delphi'>procedure Delete(iIndex :Integer);</source>
+
|Supprime un élément de la liste.
|Supprime l'objet à une position spécifiée par iIndex de la liste
+
 
|-
 
|-
 
|[[Assign (objectlist)|Assign]]
 
|[[Assign (objectlist)|Assign]]
|<source lang='delphi'>procedure Assign(iList:TObjectList);</source>
+
|Affecte la liste avec les objets d'une autre liste.
|Affecte la liste avec les objets d'une autre liste. iList peut être  TObjectList  or TRoleList.
+
 
|-
 
|-
 
|[[Clear (objectlist)|Clear]]
 
|[[Clear (objectlist)|Clear]]
|<source lang='delphi'>procedure Clear;</source>
 
 
|Vide la liste.
 
|Vide la liste.
 
|-
 
|-
 
|[[ReleaseInstances (objectlist)|ReleaseInstances]]
 
|[[ReleaseInstances (objectlist)|ReleaseInstances]]
|<source lang='delphi'>procedure ReleaseInstances;</source>
+
|Libère les références tenues par la liste.
|Libère les références tenues par la liste, la liste n'est pas vidée.
+
 
|-
 
|-
 
|[[AddWhere (objectlist)|AddWhere]]
 
|[[AddWhere (objectlist)|AddWhere]]
|<source lang='delphi'>function AddWhere(const iWhereSQL: string; 
 
                  const iWhereObject: string; 
 
                  const iOrderBy : string; 
 
                  iDescendants: Boolean;
 
                  iMaxInstances: Integer; 
 
                  iArgs :Variant):Integer;</source>
 
 
|Ajoute dans la liste les objets vérifiant la condition iWhere.  
 
|Ajoute dans la liste les objets vérifiant la condition iWhere.  
 
Vous pouvez spécifier la clause iWhere en deux expressions, la première étant SQL et la seconde étant objet. La seconde est évaluée sur les objets retournés par la requête.
 
 
Vous avez aussi la possibilité de spécifier le nombre maximum d'instances à ajouter dans la liste.
 
 
{|
 
|-
 
|iWhereSQL
 
|Filtre SQL utilisé pour la sélection des objets
 
|-
 
|iWhereObj
 
|Filtre Objet utilisé pour la sélection des objets
 
|-
 
|iOrderBy
 
|Ordre de tri de la liste
 
|-
 
|iDescendants
 
|Inclure les objets descendants de la classe persistante
 
|-
 
|iMaxInstances
 
|Numéro maxime d'instances ajoute dans la liste
 
|-
 
|iArgs
 
|Paramètres des filtres. 
 
Les paramètres sont indiqués dans iWhereSQL et iWhereObject par %n (n = 1..x) et leurs valeurs sont écrites dans iArgs en respectant l'ordre.
 
|}
 
 
{{tip|Dans iWhereObj on peut utiliser des conditions sur les attributs dérivés de la classe.}}
 
 
|-
 
|-
 
|[[RemoveWhere (objectlist)|RemoveWhere]]
 
|[[RemoveWhere (objectlist)|RemoveWhere]]
|<source lang='delphi'>function RemoveWhere(const iWhere: string;
 
                    iArgs: Array of variant):Integer;</source>
 
 
|Supprime les objets de la liste pour lesquels la condition iWhere est satisfaite.
 
|Supprime les objets de la liste pour lesquels la condition iWhere est satisfaite.
{|
 
|-
 
|iWhere
 
|Condition.
 
|-
 
|iArgs
 
|Paramètres du filtre.
 
|}
 
 
|-
 
|-
 
|[[CountWhere (objectlist)|CountWhere]]
 
|[[CountWhere (objectlist)|CountWhere]]
|<source lang='delphi'>function CountWhere(const iWhere: string;
 
                    iArgs: Array of variant):Integer;</source>
 
 
|Renvoie le nombre des objets de la liste pour lesquels la condition iWhere est satisfaite.
 
|Renvoie le nombre des objets de la liste pour lesquels la condition iWhere est satisfaite.
{|
 
|-
 
|iWhere
 
|Condition.
 
|-
 
|iArgs
 
|Paramètres du filtre.
 
|}
 
 
|-
 
|-
 
|[[FindFirst (objectlist)|FindFirst]]
 
|[[FindFirst (objectlist)|FindFirst]]
|<source lang='delphi'>function FindFirst(const iWhere: string;
 
                    iArgs: Array of Variant):Integer;</source>
 
 
|Recherche le premier objet vérifiant la condition iWhere.
 
|Recherche le premier objet vérifiant la condition iWhere.
{|
 
|-
 
|iWhere
 
|Condition.
 
|-
 
|iArgs
 
|Paramètres du filtre.
 
|}
 
 
|-
 
|-
 
|[[FindNext (objectlist)|FindNext]]
 
|[[FindNext (objectlist)|FindNext]]
|<source lang='delphi'>function FindNext(const iWhere: string;
 
                    iArgs: Array of Variant;
 
                    iIndex: Integer):Integer;</source>
 
 
|Recherche l'objet suivant iIndex vérifiant la condition iWhere.
 
|Recherche l'objet suivant iIndex vérifiant la condition iWhere.
{|
 
|-
 
|iWhere
 
|Condition.
 
|-
 
|iArgs
 
|Paramètres du filtre.
 
|-
 
|Index
 
|Depuis cette position
 
|}
 
 
|-
 
|-
 
|[[Intersect (objectlist)|Intersect]]
 
|[[Intersect (objectlist)|Intersect]]
|<source lang='delphi'>procedure InterSect(ls:TObjectList;
 
                    const iWhere:string;
 
                    const iArgs:Array of variant);</source>
 
 
|Conserve les objets qui sont présents dans les deux listes et dont l'évaluation de la condition donne le même résultat.
 
|Conserve les objets qui sont présents dans les deux listes et dont l'évaluation de la condition donne le même résultat.
Si la condition est vide les objets communs sont conservés.
 
{|
 
|-
 
|ls
 
|Liste à intersecter
 
|-
 
|iWhere
 
|Condition.
 
|-
 
|iArgs
 
|Paramètres du filtre.
 
|}
 
 
|-
 
|-
 
|[[Merge (objectlist)|Merge]]
 
|[[Merge (objectlist)|Merge]]
|<source lang='delphi'>procedure Merge(ls:TObjectList;
 
                    const iWhere:string;
 
                    const iArgs:Array of variant);</source>
 
 
|Ajoute les objets de la liste passé en paramètre qui ne sont pas déjà présent et qui vérifie la condition.
 
|Ajoute les objets de la liste passé en paramètre qui ne sont pas déjà présent et qui vérifie la condition.
{|
 
|-
 
|ls
 
|Liste à fusionner
 
|-
 
|iWhere
 
|Condition.
 
|-
 
|iArgs
 
|Paramètres du filtre.
 
|}
 
 
|}
 
|}
  

Version du 18 août 2009 à 17:08

Sommaire

Introduction

Utilisez un TObjectList pour manipuler une liste d'objets. TObjectList fournit des propriétés et méthodes pour ajouter, supprimer, réorganiser, trouver, trier et accéder aux objets contenus dans la liste.

Info-20px.png Note : Les listes d'objets peuvent être utilisé comme attribut non persistant

Une liste d'objet charge ses objets en une seule requête et les conservent en mémoire. Ce fonctionnement à des avantages et des incovénients :

  • Une fois l'ordre de chargement exécuté il ni a plus d'interactions base de données.
  • Les objets sont maintenus en mémoire se qui interdit le traitement de grande quantité d'objet.
Info-20px.png Note : Grande est une notion relative, vous pouvez charger des milliers d'objet dans une liste sans problèmes mais vous aurez certainement des problèmes si vous essayer de charger des centaines de milliers ou des millions d'objets dans une liste.

Déclaration d'une variable liste d'objet

Les listes d'objets doivent être déclarée avant d'être utilisées, lorsque la classe de la liste est connue au moment de la déclaration la forme préfixé du nom de la classe métier peut être utilisée :

var ls:NomDeClassList;

Cette forme de déclaration permet au compilateur de connaitre la classe des objets de la liste.

Création d'une liste d'objet

Utilisation du ClassManager

Le ClassManager expose une fonction pour créer des listes d'objets d'une classe donnée :

function CreateObjectList(const iClassName :string) :TObjectList;

iClassName représente le nom de la classe des objets contenus dans la liste.

Exemple

var ls:TEcritureList;
begin
  ls := ClassManager.CreateObjectList('TEcriture');
end;

Utilisation du constructeur de liste d'une classe métier

Les classes métiers exposent un constructeur de liste permettant de créer une liste d'objet de la classe :

class function TObjectClass.CreateList:TObjectClassList;

Exemple

var ls:TEcritureList;
begin
  ls := TEcriture.CreateList;
end;
Info-20px.png Note : Les deux formes de code sont équivalentes, la seconde est plus claire et évite les erreurs de frappe du nom des classes

Propriétés

Nom Type Usage
aClassName String Nom de la classe des objets contenu dans la liste.
Count Integer Renvoie le nombre d'objets dans la liste.
OIDs [index]
property OIDs[index:Integer]:TOID;
Renvoie le oid de l'objet situé à la position indiquée par index dans la liste. Index spécifie la position de l'objet, 0 indique le premier objet, 1 le second, etc.
Refs [index] (itérateur)
property Refs[index:Integer]:TitObject;
Renvoie la référence de l'objet située à la position indiquée par index dans la liste. Index spécifie la position de l'objet, 0 indique le premier objet, 1 le second, etc.
OrderValues [index]
property OrderValues[index:Integer]:variant;
Renvoie la value de l'attribut triant la liste (ORDERBY) de l'objet situé à la position indiquée par Index dans la liste. Si la propriété ORDERBY est non spécifiée, ORDERVALUES renvoie OID. Index spécifie la position des attributs, 0 indique le premier attribut, 1 le second, etc.
OrderBy String Indique l'attribut triant la liste ; positionner OrderBy déclenche le tri des objets présents dans la liste et l’insertion triée des nouveaux objets.
Duplicates Enum Permet d'indiquer le comportement de la liste sur doublon :
  • dupIgnore  : L'objet n'est pas inséré, aucune erreur.
  • dupAccept  : L'objet est inséré.
  • dupError  : Une exception est déclenchée.

Par défaut Duplicates = dupAccept

Info-20px.png Note : Le changement de la propriété Duplicates n'a pas d'effet sur les éléments déjà présents dans la liste.
AnyWhere Boolean Ne pas filter les objets sur les périmètres de partage.
Exclam-20px.png Attention : Cette option n'est à utiliser que pour les dossiers multi-société dans les traitements de type inter-sociétés.

Méthodes

IndexOf Renvoie la position d'un objet identifié par son identifiant.
IndexByOrder Renvoie la position d'un objet identifié par sa valeur de tri.
AddOID Ajoute un objet dans la liste.
AddRef Ajoute un objet dans la liste.
Insert Insère un objet dans la liste.
RemoveOID Supprime un objet de la liste.
RemoveRef Supprime un objet de la liste.
Delete Supprime un élément de la liste.
Assign Affecte la liste avec les objets d'une autre liste.
Clear Vide la liste.
ReleaseInstances Libère les références tenues par la liste.
AddWhere Ajoute dans la liste les objets vérifiant la condition iWhere.
RemoveWhere Supprime les objets de la liste pour lesquels la condition iWhere est satisfaite.
CountWhere Renvoie le nombre des objets de la liste pour lesquels la condition iWhere est satisfaite.
FindFirst Recherche le premier objet vérifiant la condition iWhere.
FindNext Recherche l'objet suivant iIndex vérifiant la condition iWhere.
Intersect Conserve les objets qui sont présents dans les deux listes et dont l'évaluation de la condition donne le même résultat.
Merge Ajoute les objets de la liste passé en paramètre qui ne sont pas déjà présent et qui vérifie la condition.

Exemples

Chargement d'une liste

procedure TExercice.doPeriodes;
var vListePeriode :TPeriodeList;
begin
  // Liste des périodes d'un exercice ordonnée par date de début de période.
  vlistePeriode := TPeriodeList.CreateList;
  vlistePeriode.AddWhere('oidExercice=%1','','dateDebut',FALSE,1000,[instanceOid]);
  ...
end;

Utilisation d'une condition objet

procedure TMyProcessus.doEcritures;
var EcritureList:TEcritureList; idx:Integer;
begin
  // Liste des 1000 premières écritures au débit d'une tranche de compte trié par libellé.
  //
  // Utilise un filtre objet pour estDebit qui est un attribut dérivé de la classe TEcriture
  //
  EcritureList := ClassManager.CreateObjectList('TEcriture');
  EcritureList.AddWhere('(CompteGeneral.Code >= %1) and (CompteGeneral.Code <= %2)','(estDebit = %3)', 'Caption',TRUE,1000,
[borne_inferieure,borne_superieure,True]);
  for idx :=0 to EcritureList.Count-1 do
   ProgressMessage(EcritureList.Refs[idx].Caption)
  end;
end;


Code métierDéveloppement DSM





Whos here now:   Members 0   Guests 0   Bots & Crawlers 1
 
Outils personnels