Utiliser des collections et des listes dans des objets de formulaires

Traduit automatiquement de Deepl

Lescollections sont de plus en plus utilisées dans la programmation 4D. À partir de 4D v19, vous pouvez les utiliser pour définir le contenu de certains objets d’interface, notamment par le biais de la fonction Form. Ceci est très utile pour la gestion des interfaces génériques.

Nous avons également apporté des améliorations à l’utilisation des listes. Voyons cela en détail !

Utilisation de collections et de listes dans les objets de formulaires

Améliorations de l’utilisation des listes

L’utilisation des listes a été améliorée :
– Listes hiérarchiques
– Contrôles d’onglet (premier cas d’utilisation)

Les collections peuvent désormais être utilisées comme références avec les objets suivants :
– Listes déroulantes (également appelées « listes contextuelles »)
– Boîtes combo
– Contrôles d’onglet (deuxième cas d’utilisation)

Listes hiérarchiques et contrôles d’onglets

Nous avons amélioré l’utilisation des références de liste pour les contrôles d’onglet et les objets de formulaire de liste hiérarchique. Il était déjà possible d’associer la référence de la liste directement à l’objet de formulaire, mais cette référence peut maintenant être récupérée à partir d’un attribut de l’objet. Vous pouvez donc maintenant écrire ceci :

// create a new object
$o
:=New object
// ajouter une liste à cet objet
$o .listRef:=New list
// then add items, icons, etc. to this list

// (…)
// puis appeler le dialogue en utilisant cet objet (avec la référence de liste incluse)
DIALOG ("myForm" ;$o)
// effacer la liste pour éviter les fuites de mémoire
CLEAR LIST ($o.listRef)

C’est fait !

Listes déroulantes (pop-ups), Combo boxes et contrôles Tab (encore !)

La principale évolution concerne les collections. Les valeurs possibles des objets de formulaire suivants peuvent être basées sur une collection de valeurs scalaires (généralement alphanumériques), plus exactement sur un objet contenant lui-même une collection. Pourquoi ? Parce qu’il est généralement nécessaire de connaître la valeur choisie par l’utilisateur et/ou de sélectionner une valeur par défaut (premier onglet, troisième élément du menu déroulant, etc.).

La variable objet contiendra donc les trois attributs suivants :
values: collection de valeurs possibles
index: indice de l’élément choisi (dans les listes déroulantes et les onglets)
currentValue: valeur courante (utilisée pour les combo-boxes, où l’utilisateur peut soit sélectionner soit entrer une valeur)

Exemple

Imaginez que vous voulez appeler un dialogue comme celui ci-dessous. Mais, avant d’appeler le dialogue, vous voulez définir :

  • Le contenu du contrôle d’onglet avec « Alpha » ; « Bravo » ; « Charlie ».
  • Le titre (et donner la possibilité d’en saisir un)
  • Les choix possibles pour « Statut ».

blank

Chacun de ces objets de formulaire aura le même type de variable ou d’expression associée : Objet

blank

// prepare a global object that will be sent to the dialog command
$o
:=New object

// prepare the tab control object
$o
.oTab:=New object
$o .oTab.values:=New collection("Alpha" ; "Bravo" ; "Charlie")
$o .oTab.index:=0 // sélectionner l'onglet "Alpha"

// prepare the Title object
$o .oCombo:=New object
$o .oCombo.values:=New collection("Mr" ; "Mz" ; "Dr")
$o .oCombo.currentValue:=""

// prepare the Status object
// astuce : lorsque l'index = -1, la currentValue est utilisée comme caractère de remplacement !
$o .oPop:=New object
$o .oPop.values:=New collection("Single" ; "Married" ; "Widdow" ; "Divorced")
$o .oPop.currentValue:= "Select status..."
$o .oPop.index:=-1

$win :=Open form window("BLOG")
DIALOG ("BLOG" ; $o)

Exécutez cette méthode et remplissez le dialogue…

blankblank

Une fois le dialogue validé (clic sur OK), vous serez en mesure de savoir quel titre et quel statut ont été sélectionnés ou saisis.

Voici la valeur JSON de l’objet retourné :

blank

Conclusion

Utiliser un seul objet pour définir immédiatement les valeurs affichées et sélectionnées est génial. Vous pouvez utiliser les collections dans plusieurs objets à la fois et éviter d’utiliser des tableaux de processus ou interprocessus. Bien sûr, l’objectif principal est également atteint : cela rendra la programmation générique plus facile que jamais.

Comme d’habitude, une IDH vous guidera à travers cette fonctionnalité, et la documentation a également été mise à jour.

Profitez-en et amusez-vous à coder !

Roland Lannuzel
- Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.