Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com

Accueil

 
4D v20.6
DIALOGUE

DIALOGUE 


 

DIALOGUE ( {laTable ;} formulaire {; formData}{; *} ) 
Paramètre Type   Description
laTable  Table in Table à laquelle appartient le formulaire Si omis : Table par défaut ou utilisation d'un formulaire projet
formulaire  Chaîne, Objet in Nom du formulaire table ou projet à afficher, ou
Chemin POSIX (chaîne) d'un fichier .json décrivant le formulaire, ou
Objet décrivant le formulaire
formData  Objet in Données à associer au formulaire
Opérateur in Utiliser le même process

La commande DIALOGUE présente le formulaire à l'utilisateur en lui passant des paramètres via formData (optionnel).

Cette commande permet de concevoir des interfaces utilisateur personnalisées et sophistiquées, basées sur des formulaires. Vous pouvez l'utiliser pour afficher des informations provenant de la base ou d'autres sources, ou proposer des fonctions de saisie des données. A la différence de AJOUTER ENREGISTREMENT ou MODIFIER ENREGISTREMENT, DIALOGUE vous permet de contrôler intégralement le formulaire, son contenu et ses boutons de navigation et validation.

DIALOGUE est généralement utilisée avec la commande Creer fenetre formulaire pour afficher des formulaires complexes, comme par exemple :

La commande DIALOGUE peut également être utilisée au lieu de ALERTE, CONFIRMER ou Demander lorsque les informations à afficher ou à recueillir sont plus complexes que celles que peuvent gérer ces trois commandes.

Note : Dans les bases de données converties, il est possible d'interdire la saisie dans les champs dans les boîtes de dialogue (et donc de limiter la saisie aux seules variables) via une option des Propriétés de la base (page Compatibilité). Cette restriction correspond au fonctionnement des anciennes versions de 4D.

Dans le paramètre formulaire, vous pouvez passer soit :

  • le nom du formulaire (formulaire projet ou formulaire table) à utiliser,
  • le chemin (en syntaxe POSIX) d'un fichier .json valide contenant la description du formulaire à utiliser (voir Chemin d'accès du formulaire),
  • un objet contenant la description du formulaire à utiliser.

Optionnellement, vous pouvez passer un ou plusieurs paramètre(s) au formulaire à l'aide de l'objet formData. Chaque propriété de l'objet formData sera disponible depuis le contexte du formulaire par l'intermédiaire de la commande Form. Par exemple, si vous passez un objet contenant {"version","12"} dans formData, vous pouvez lire la valeur de la propriété "version" dans le formulaire en exécutant :

 $v:=Form.version //"12"

Lorsque vous utilisez une variable locale pour formData, cette fonctionnalité vous permet de passer en toute sécurité des paramètres à vos formulaires, quel que soit le contexte d'appel. En particulier, si le même formulaire est appelé depuis différents endroits dans le même process, vous pourrez à tout moment accéder à ses valeurs spécifiques en appelant simplement Form.monAttribut. De plus, comme les objets sont passés par référence, si l'utilisateur modifie une valeur de propriété dans le formulaire, elle sera automatiquement mise à jour dans l'objet lui-même.
En combinant l'objet formData et la commande Form, vous pouvez à tout moment passer des paramètres aux formulaires et récupérer des valeurs depuis le formulaire en utilisant du code propre et sûr. 

Note : Si vous ne passez pas le paramètre formData ou si vous passez un objet indéfini, DIALOGUE crée automatiquement un nouvel objet vide associé au formulaire, accessible via la commande Form.

Le dialogue est refermé par l'utilisateur soit via une action "accepter" (déclenchée par l'action standard ak accept, la touche Entrée ou la commande VALIDER), soit via une action "annuler" (déclenchée par l'action standard ak cancel, la touche Echap ou la commande NE PAS VALIDER). L'action "accepter" mettra la variable système OK à 1, alors que l'action "annuler" la mettra à 0.

A noter que la validation n'entraîne pas la sauvegarde : si le dialogue comporte des champs, vous devez appeler explicitement la commande STOCKER ENREGISTREMENT pour stocker les données éventuellement modifiées.

validé si l'utilisateur clique sur le bouton de validation ou appuie sur la touche Entrée, ou si la commande VALIDER est exécutée.

Si vous passez le paramètre facultatif * , le formulaire est chargé et affiché dans la dernière fenêtre ouverte du process courant et la commande termine son exécution en laissant le formulaire actif à l’écran.
Ce formulaire réagit alors “normalement” aux actions de l’utilisateur et est fermé via une action standard ou lorsque du code 4D lié au formulaire (méthode objet ou méthode formulaire) appelle la commande NE PAS VALIDER ou VALIDER. Si le process courant se termine, les formulaires créés de cette façon sont automatiquement fermés en simulant un NE PAS VALIDER. Ce mode d’ouverture est particulièrement utile pour afficher une palette flottante en rapport avec un document, sans pour autant nécessiter un autre process.

Notes :

  • Vous pouvez combiner l'utilisation de la syntaxe DIALOGUE(form;*) avec la commande APPELER FORMULAIRE afin d'établir une communication entre les formulaires.
  • Vous devez créer une fenêtre avant d'appeler l'instruction DIALOGUE(form;*), il n'est pas possible d'utiliser la fenêtre du dialogue en cours dans le process ni la fenêtre créée par défaut pour chaque process. Dans le cas contraire, l'erreur -9909 est générée.
  • Lorsque le paramètre * est utilisé, la fenêtre est refermée automatiquement à la suite d'une action standard ou de l'appel de la commande NE PAS VALIDER ou VALIDER. Vous ne devez pas gérer vous-même la fermeture de la fenêtre.

L'exemple suivant permet de créer une palette d'outils :

  `Affichage palette d’outils
 $window_palette:=Creer fenetre formulaire("tools";Form fenêtre palette)
 DIALOGUE("tools";*) `Rend la main immédiatement
  `Affichage fenêtre document principal
 $window_document:=Creer fenetre formulaire("doc";Form fenêtre standard)
 DIALOGUE("doc")

Dans un formulaire affichant l'enregistrement d'une personne, un bouton ouvre un dialogue permettant de vérifier ou de modifier les noms et âges de ses enfants :

Note : Le champ objet "enfants" est représenté uniquement dans cet exemple afin de faire apparaître sa structure.

Dans le formulaire de vérification, vous avez assigné des propriétés d'objet Form aux variables :

Voici le code du bouton "Check Children" :

 C_ENTIER LONG($win;$n;$i)
 C_BOOLEEN($save)
 TABLEAU OBJET($children;0)
 OB LIRE TABLEAU([Person]Children;"children";$children//récupérer les enfants
 $save:=Faux //initialisation du marqueur de sauvegarde
 
 $n:=Taille tableau($children)
 Si($n>0)
    $win:=Creer fenetre formulaire("Edit_Children";Form dialogue modal déplaçable)
    CHANGER TITRE FENETRE("Vérification des enfants pour "+[Person]Name)
    Boucle($i;1;$n//pour chaque enfant
       DIALOGUE("Edit_Children";$children{$i}) //afficher le dialogue prérempli
       Si(OK=1) //l'utilisateur a cliqué sur OK
          $save:=Vrai
       Fin de si
    Fin de boucle
    Si($save=Vrai)
       [Person]Children:=[Person]Children //Forcer la mise à jour du champ
    Fin de si
    FERMER FENETRE($win)
 Sinon
    ALERTE("Pas d'enfant à vérifier.")
 Fin de si

Note : Cet exemple nécessite l'activation de la notation objet dans la base (voir Page Compatibilité).

Le formulaire affiche les informations pour chaque enfant :

Si des valeurs sont modifiées et que l'utilisateur clique sur le bouton OK, le champ est mis à jour (bien entendu, l'enregistrement parent devra être sauvegardé par la suite).

L'exemple suivant utilise le chemin d'un fichier .json décrivant un formulaire permettant d'afficher les enregistrements d'une liste d'employés :

 Creer fenetre formulaire("/RESOURCES/OutputPersonnel.json";Form fenêtre standard)
 TOUT SELECTIONNER([Personnel])
 DIALOGUE("/RESOURCES/OutputPersonnel.json";*)

Résultat :

L'exemple suivant crée un objet à partir d'un fichier .json décrivant un formulaire et en modifie certaines propriétés :

 C_OBJET($form)
 $form:=JSON Parse(Document vers texte(Dossier 4D(Dossier Resources courant)+"OutputPersonnel.json"))
 $form.windowTitle:="The Avengers"
 $form.pages[1].objects.logo.picture:="/RESOURCES/Images/Avengers.png"
 $form.pages[1].objects.myListBox.borderStyle:="double"
 Creer fenetre formulaire($form;Form fenêtre standard)
 DIALOGUE($form;*)

Le formulaire est affiché avec la bordure, le logo et le titre modifiés :

Si l'utilisateur valide le dialogue, la variable système OK prend la valeur 1, si le dialogue est annulé OK prend la valeur 0.



Voir aussi  

AJOUTER ENREGISTREMENT
APPELER FORMULAIRE
Creer fenetre
Form
NE PAS VALIDER
VALIDER

 
PROPRIÉTÉS 

Produit : 4D
Thème : Saisie
Numéro : 40
Nom intl. : DIALOG

Cette commande modifie la variable système OKCette commande modifie la variable système Error

 
PAGE CONTENTS 
 
HISTORIQUE 

Modifié : 4D v11 SQL
Modifié : 4D v16 R5
Modifié : 4D v16 R6

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v20)
4D - Langage ( 4D v20.1)
4D - Langage ( 4D v20.2)
4D - Langage ( 4D v20.3)
4D - Langage ( 4D v20.4)
4D - Langage ( 4D v20.5)
4D - Langage ( 4D v20.6)