4D v16.3

AJOUTER A LISTE

Accueil

 
4D v16.3
AJOUTER A LISTE

AJOUTER A LISTE 


 

AJOUTER A LISTE ( liste ; libelléElément ; réfElément {; sous_Liste ; déployée} ) 
Paramètre Type   Description
liste  RefListe in Numéro de référence de liste
libelléElément  Chaîne in Libellé du nouvel élément
réfElément  Entier long in Numéro de référence unique du nouvel élément
sous_Liste  RefListe in Sous-liste optionnelle à rattacher au nouvel élément
déployée  Booléen in Indique si la sous-liste doit être déployée ou non

La commande AJOUTER A LISTE ajoute un nouvel élément à la liste hiérarchique dont vous avez passé le numéro de référence dans le paramètre liste.

Vous passez le libellé de l'élément dans le paramètre libelléElément. Vous pouvez passer une expression de type Alpha ou Texte, pouvant contenir jusqu'à 2 milliards de caractères.

Vous passez le numéro de référence unique de l'élément (de type Entier long) dans le paramètre réfElément. Même si nous qualifions ce numéro de référence d'élément comme unique, vous pouvez en réalité passer la valeur que vous voulez. Reportez-vous à la section Gestion des listes hiérarchiques pour plus d'informations sur le paramètre réfElément.

Si vous souhaitez également que l'élément comporte des sous-éléments, passez un numéro de référence de liste valide dans le paramètre sous_Liste. Dans ce cas, vous devez également passer le paramètre déployée. Passez Vrai ou Faux dans ce paramètre pour que cette sous-liste s'affiche respectivement déployée ou contractée.

La référence de la liste que vous passez dans sous_Liste doit être une liste existante. Elle peut comporter un seul niveau ou contenir elle-même des sous-listes. Si vous ne voulez pas rattacher de sous-liste au nouvel élément, omettez le paramètre ou passez 0. Si vous passez le paramètre sous_Liste et ne passez pas le paramètre déployée, la sous-liste apparaît par défaut contractée.

Conseils :

  • Pour insérer un nouvel élément dans une liste, utilisez INSERER DANS LISTE. Pour modifier le libellé d'un élément existant ou sa sous-liste, ainsi que son état déployé/contracté, utilisez CHANGER ELEMENT.
  • Pour changer l'apparence de l'élément ajouté, utilisez CHANGER PROPRIETES ELEMENT.

Exemple  

Voici une vue partielle de la structure d'une base :

Les tables [Départements] et [Employés] contiennent les enregistrements suivants :

Vous voulez utiliser une liste hiérarchique, appelée hlList, qui affiche les départements, et pour chaque département, une sous-liste contenant les employés travaillant dans ce département. La méthode objet de hlList est la suivante:

  ` Méthode objet Liste hiérarchique hlList
 
 Au cas ou
 
    :(Evenement formulaire=Sur chargement)
       C_ENTIER LONG(hlList;$hSousListe;$vlDépartement;$vlEmployé;$vlDépartementID)
  ` Créer une nouvelle liste hiérarchique vide
       hlList:=Nouvelle liste
  ` Sélectionner tous les enregistrements de la table [Départements]
       TOUT SELECTIONNER([Départements])
  ` Pour chaque Département
       Boucle($vlDepartement;1;Enregistrements trouves([Départements]))
  ` Sélectionner les employés de ce département
          LIEN RETOUR([Départements]Nom)
  ` Combien sont-ils?
          $vlNbEmployés:=Enregistrements trouves([Employés])
  ` Y a-t-il au moins un employé dans ce département?
          Si($vlNbEmployés>0)
  ` Créer une sous-liste pour l'élément Département
             $hSousListe:=Nouvelle liste
  ` Pour chaque Employé
             Boucle($vlEmployé;1;Enregistrements trouves([Employés]))
  ` Ajouter l'élément Employé à la sous-liste
  ` Noter que le champ ID de l'enregistrement [Employés] est passé comme numéro de référence de l'élément
                AJOUTER A LISTE($hSousListe;[Employés]Nom+", "+[Employés]Prénom;[Employés]ID)
  ` Aller à l'enregistrement [Employés] suivant
                ENREGISTREMENT SUIVANT([Employés])
             Fin de boucle
          Sinon
  ` Pas d'Employé, pas de sous-liste pour l'élément Département
             $hSousListe:=0
          Fin de si
 
  ` Ajouter l'élément Département à la liste principale
  ` Notez que le champ ID de l'enregistrement [Départements] est passé comme numéro de référence de l'élément. Le bit #31 de cet ID est forcé à 1.
  ` Ainsi nous pourrons faire la distinction entre les éléments Département et Employés (cf. note ci-dessous)
          AJOUTER A LISTE(hlList;[Départements]Nom;[Départements]ID?+31;$hSousListe;$hSousListe#0)
  ` Passer l'élément Département en gras pour renforcer la hiérarchie de la liste
          CHANGER PROPRIETES ELEMENT(hlList;0;Faux;Gras;0)
  ` Aller au département suivant
          ENREGISTREMENT SUIVANT([Départements])
       Fin de boucle
  ` Trier toute la liste en ordre croissant
       TRIER LISTE(hlList;>)
  ` Afficher la liste en style Windows et forcer la hauteur de ligne minimale à 14 Pts
       CHANGER PROPRIETES LISTE(hlList;A la Windows;Réf icône Windows;14)
 
    :(Evenement formulaire=Sur libération)
  ` La liste n'est plus utile. N'oubliez pas de l'effacer !
       SUPPRIMER LISTE(hlList;*)
 
    :(Evenement formulaire=Sur double clic)
  ` Il y a eu un double-clic
  ` Obtenir la position de l'élément sélectionné
       $vlÉlémentPos:=Elements selectionnes(hlList)
  ` A toutes fins utiles, vérifier la position
       Si($vlÉlémentPos # 0)
  ` Obtenir l'information de l'élément de la liste
          INFORMATION ELEMENT(hlList;$vlÉlémentPos;$vlÉlémentRef;$vsÉlémentText;$vlÉlémentSousListe;$vbÉlémentDéployé)
  ` Cet élément est-il l'élément d'un Département?
          Si($vlÉlémentRef ?? 31)
  ` Si oui, c'est un double-clic sur un élément Département
             ALERTE("Vous avez double-cliqué sur l'élément Département "+Caractere(34)+$vsÉlémentText+Caractere(34)+".")
          Sinon
  ` Sinon, c'est un double-clic sur un élément Employé. Avec l'ID de l'élément parent, trouver l'enregistrement [Départements]
             $vlDépartementID:=Element parent(hlList;$vlÉlémentRef)?-31
             CHERCHER([Départements];[Départements]ID=$vlDépartementID)
  ` Indiquer où l'Employé travaille et de qui il dépend
             ALERTE("Vous avez double-cliqué sur l'élément Employé "+Caractere(34)+$vsÉlémentText+Caractere(34)+" qui travaille dans le Département "+Caractere(34)+[Départements]Nom+Caractere(34)+" dont le responsable est "+Caractere(34)+[Départements]Responsable+Caractere(34)+".")
          Fin de si
       Fin de si
 
 Fin de cas
 
  ` Note : 4D peut stocker jusqu'à 1 milliard d'enregistrements par table. Dans notre exemple, nous utilisons le bit #31 de l'octet supérieur inutilisé
  ` pour différencier les éléments des Employés des Départements.

Dans cet exemple, il y a une seule raison d'établir une distinction entre les éléments Départements et les éléments Employés :

1. Nous stockons des ID d'enregistrements dans les numéros de référence des éléments. En conséquence, nous avons toutes les chances de rencontrer des éléments Départements dont les numéros de référence sont les mêmes que ceux des éléments Employés.

2. Nous utilisons la commande Element parent pour récupérer le parent de l'élément sélectionné. Si nous cliquons sur un élément Employés dont le numéro d'ID associé est 10, et s'il existe aussi un élément Départements qui a le numéro 10, l'élément Départements sera trouvé en premier par Element parent quand cette fonction passera la liste en revue pour repérer l'élément avec le numéro de référence que nous passons. La commande retournera le parent de l'élément Départements et non celui de l'élément Employés.

C'est pourquoi nous avons choisi des numéros de référence d'éléments uniques, non pas pour des questions de principe, mais parce que nous devions différencier les éléments de Départements et d'Employés.

Dans le formulaire en exécution, la liste apparaîtra ainsi :

Note : Cet exemple est utile dans le cadre de la gestion de l'interface utilisateur, si vous manipulez un nombre limité d'enregistrements. Souvenez-vous que les listes sont conservées en mémoire ; donc, ne construisez pas d'interfaces utilisateur exploitant des listes hiérarchiques comportant des millions d'éléments.



Voir aussi  

CHANGER ELEMENT
CHANGER PROPRIETES ELEMENT
INSERER DANS LISTE

 
PROPRIÉTÉS 

Produit : 4D
Thème : Listes hiérarchiques
Numéro : 376
Nom intl. : APPEND TO LIST

 
HISTORIQUE 

Modifié : 4D v11 SQL

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)