Listes d'objets (tech)

De Wiki1000
(Différences entre les versions)
(Exemples)
(Méthodes)
 
(13 révisions intermédiaires par un utilisateur sont masquées)
Ligne 34 : Ligne 34 :
  
 
====Utilisation du constructeur de liste d'une classe métier====
 
====Utilisation du constructeur de liste d'une classe métier====
Les [[Classes métiers (code)|classes métiers]] exposent un constructeur de liste permettant de créer une liste d'objet de la classe :
+
Les [[Classes métiers (tech)|classes métiers]] exposent un constructeur de liste permettant de créer une liste d'objet de la classe :
  
 
<source lang='delphi'>class function TObjectClass.CreateList:TObjectClassList;</source>
 
<source lang='delphi'>class function TObjectClass.CreateList:TObjectClassList;</source>
Ligne 53 : Ligne 53 :
 
|-
 
|-
 
!Nom
 
!Nom
!Type
 
 
!Usage
 
!Usage
 
|-
 
|-
|ACLASSNAME
+
|[[aClassName (objectlist)|aClassName]]
|String
+
 
|Nom de la classe des objets contenu dans la liste.
 
|Nom de la classe des objets contenu dans la liste.
 
|-
 
|-
|COUNT
+
|[[Count (objectlist)|Count]]
|Integer
+
 
|Renvoie le nombre d'objets dans la liste.
 
|Renvoie le nombre d'objets dans la liste.
 
|-
 
|-
|ORDERBY
+
|[[OIDs (objectlist)|OIDs [index]]]
|String
+
|Accède aux identifiants des objets de la liste.
|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
+
|[[Refs (objectlist)|Refs [index] (itérateur)]]
|Enum
+
|Accède aux instances des objets de la liste.
|Permet d'indiquer le comportement de la liste sur doublon :
+
|-
*dupIgnore  : L'objet n'est pas inséré, aucune erreur.
+
|[[OrderValues (objectlist)|OrderValues [index]]]
*dupAccept  : L'objet est inséré.
+
|Accède aux valeurs de tri des objets de la liste.
*dupError  : Une exception est déclenchée.
+
|-
Par défaut  Duplicates = dupAccept
+
|[[OrderBy (objectlist)|OrderBy]]
{{info|Le changement de la propriété Duplicates n'a pas d'effet sur les éléments déjà présents dans la liste.}}
+
|Indique l'attribut triant la liste
 +
|-
 +
|[[Duplicates (objectlist)|Duplicates]]
 +
|Indique le comportement de la liste sur doublon.
 +
|-
 +
|[[AnyWhere (objectlist)|AnyWhere]]
 +
|Indique de ne pas filter les objets sur les périmètres de partage.
 
|}
 
|}
  
Ligne 81 : Ligne 83 :
 
{|class="wikitable"
 
{|class="wikitable"
 
|-
 
|-
|OIDS [ INDEX ]
+
|[[IndexOf (objectlist)|IndexOf]]
|<source lang='delphi'>property OIDs[index:Integer]:TOID;</source>
+
|Renvoie la position d'un objet identifié par son identifiant.
|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 ]
+
|[[IndexByOrder (objectlist)|IndexByOrder]]
|<source lang='delphi'>property Refs[index:Integer]:TitObject;</source>
+
|Renvoie la position d'un objet identifié par sa valeur de tri.
|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 ]
+
|[[AddOID (objectlist)|AddOID]]
|<source lang='delphi'>property OrderValues[index:Integer]:variant;</source>
+
|Ajoute un objet dans la liste.
|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.
+
 
|-
 
|-
|INDEXOF
+
|[[AddRef (objectlist)|AddRef]]
|<source lang='delphi'>function IndexOf (const iOID :TOID) :Integer;</source>
+
|Ajoute un objet dans la liste.
|Renvoie la position d'objet ayant l'oid iOID dans la liste.
+
 
|-
 
|-
|INDEXBYORDER
+
|[[Insert (objectlist)|Insert]]
|<source lang='delphi'>function IndexByOrder (const V :Variant):Integer;</source>
+
|Insère un objet dans la liste.
|Recherche l'élément de valeur V ; si la liste n'est pas triée, cette fonction provoque une exception.
+
 
|-
 
|-
|ADDOID
+
|[[RemoveOID (objectlist)|RemoveOID]]
|<source lang='delphi'>function AddOid(const iOID:TOID):Integer;</source>
+
|Supprime un objet de la liste par son identifiant.
|Ajoute dans la liste l'objet ayant l'oid iOID.
+
 
|-
 
|-
|ADDREF
+
|[[RemoveRef (objectlist)|RemoveRef]]
|<source lang='delphi'>function AddRef(iInst:TitObject):Integer;</source>
+
|Supprime un objet de la liste par son instance.
|Ajoute dans la liste l'objet iInst.
+
 
|-
 
|-
|INSERT
+
|[[Delete (objectlist)|Delete]]
|<source lang='delphi'>function Insert(iIndex :Integer; iInst :TitObject):Integer;</source>
+
|Supprime un élément de la liste par son index.
|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
+
|[[Assign (objectlist)|Assign]]
|<source lang='delphi'>procedure RemoveOid(const iOID :TOID);</source>
+
|Affecte la liste avec les objets d'une autre 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
+
|[[Clear (objectlist)|Clear]]
|<source lang='delphi'>procedure RemoveRef (iInst :TitObject);</source>
+
|Vide la liste.
|Supprime l'objet iInst de la liste.
+
 
|-
 
|-
|DELETE
+
|[[ReleaseInstances (objectlist)|ReleaseInstances]]
|<source lang='delphi'>procedure Delete(iIndex :Integer);</source>
+
|Libère les références tenues par la liste.
|Supprime l'objet à une position spécifiée par iIndex de la liste
+
 
|-
 
|-
|ASSIGN
+
|[[AddWhere (objectlist)|AddWhere]]
|<source lang='delphi'>procedure Assign(iList:TObjectList);</source>
+
|Affecte la liste avec les objets d'une autre liste. iList peut être  TObjectList  or TRoleList.
+
|-
+
|CLEAR
+
|<source lang='delphi'>procedure Clear;</source>
+
|Supprime tous les objets de la liste.
+
|-
+
|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
+
|[[RemoveWhere (objectlist)|RemoveWhere]]
|Filtre SQL utilisé pour la sélection des objets
+
|Supprime les objets de la liste pour lesquels la condition iWhere est satisfaite.
 
|-
 
|-
|iWhereObj
+
|[[CountWhere (objectlist)|CountWhere]]
|Filtre Objet utilisé pour la sélection des objets
+
|Renvoie le nombre des objets de la liste pour lesquels la condition iWhere est satisfaite.
 
|-
 
|-
|iOrderBy
+
|[[FindFirst (objectlist)|FindFirst]]
|Ordre de tri de la liste
+
|Recherche le premier objet vérifiant la condition iWhere.
 
|-
 
|-
|iDescendants
+
|[[FindNext (objectlist)|FindNext]]
|Inclure les objets descendants de la classe persistante
+
|Recherche l'objet suivant iIndex vérifiant la condition iWhere.
 
|-
 
|-
|iMaxInstances
+
|[[Intersect (objectlist)|Intersect]]
|Numéro maxime d'instances ajoute dans la liste
+
|Conserve les objets qui sont présents dans les deux listes et dont l'évaluation de la condition donne le même résultat.
 
|-
 
|-
|iArgs
+
|[[Merge (objectlist)|Merge]]
|Paramètres des filtres. 
+
|Ajoute les objets de la liste passé en paramètre qui ne sont pas déjà présent et qui vérifie la condition.
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
+
|[[DeleteObjects (objectlist)|DeleteObjects]]
|<source lang='delphi'>function RemoveWhere(const iExpression: string;
+
|Supprime les objets de la liste.
                    iArgs: Array of variant):Integer;</source>
+
|Supprime les objets de la liste pour lesquels la condition iExpression est satisfaite.
+
{|
+
 
|-
 
|-
|iExpression
+
|[[ToString (objectlist)|ToString]]
|Expression.
+
|Retourne un attribut sérialisé sous forme chaîne.
|-
+
|iArgs
+
|Paramètres des filtres.
+
 
|}
 
|}
|-
 
|COUNTWHERE
 
|<source lang='delphi'>function CountWhere(const iExpression: string;
 
                    iArgs: Array of variant):Integer;</source>
 
|Renvoie le nombre des objets de la liste pour lesquels la condition iExpression est satisfaite.
 
{|
 
|-
 
|iExpression
 
|Expression.
 
|-
 
|iArgs
 
|Paramètres des filtres.
 
|}
 
|-
 
|FINDFIRST
 
|<source lang='delphi'>function FindFirst(const iWhere: string;
 
                    iArgs: Array of Variant):Integer;</source>
 
|Recherche le premier objet vérifiant la condition iWhere.
 
|-
 
|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.
 
|}
 
 
===Exemples===
 
====Chargement d'une liste====
 
 
<source lang='delphi'>
 
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;
 
</source>
 
 
====Utilisation d'une condition objet====
 
 
<source lang='delphi'>
 
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;
 
</source>
 
  
  

Version actuelle en date du 25 février 2020 à 14:43

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 Usage
aClassName Nom de la classe des objets contenu dans la liste.
Count Renvoie le nombre d'objets dans la liste.
OIDs [index] Accède aux identifiants des objets de la liste.
Refs [index] (itérateur) Accède aux instances des objets de la liste.
OrderValues [index] Accède aux valeurs de tri des objets de la liste.
OrderBy Indique l'attribut triant la liste
Duplicates Indique le comportement de la liste sur doublon.
AnyWhere Indique de ne pas filter les objets sur les périmètres de partage.

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 par son identifiant.
RemoveRef Supprime un objet de la liste par son instance.
Delete Supprime un élément de la liste par son index.
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.
DeleteObjects Supprime les objets de la liste.
ToString Retourne un attribut sérialisé sous forme chaîne.


Code métierDéveloppement DSM





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