Comment créer un formulaire dynamique à partir d’un tableau en 3 étapes !

Traduit automatiquement de Deepl

4D v17 inclut les formulaires dynamiques, initialement introduits dans 4D v16 R6, un moyen puissant et flexible de construire dynamiquement des formulaires entièrement adaptés aux besoins de vos utilisateurs finaux. Les possibilités des formulaires dynamiques sont immenses. Dans ce billet, nous allons voir un exemple concret de ce que vous pouvez faire avec ces nouveaux formulaires.

Commençons par le début. Dans votre base de données, vous avez besoin d’un formulaire d’entrée/sortie pour toutes vos tables. Mieux encore, pourquoi ne pas créer ces formulaires dynamiquement à partir d’un modèle ? Avec la notation objet, il est très facile de manipuler des objets. Il suffit de définir un modèle d’entrée, un modèle de sortie et un modèle d’objet. Ensuite, au moment de l’exécution, vous pouvez générer vos formulaires en fonction de la table et des champs sélectionnés.

Dans l’exemple ci-dessous, nous vous fournissons deux modèles de formulaires de sortie et deux modèles de formulaires d’entrée, ainsi qu’un exemple de code pour ajouter une table et des champs.

Conseils : Utiliser les formulaires dynamiques

Exemple de formulaire de sortie

Première étape

Créez un modèle de formulaire de sortie contenant uniquement des boutons et une zone de liste vide. Dans cet exemple, le modèle est enregistré dans le dossier« template » du dossier« resources » de la base de données :

$pathname:=Get 4D folder(Current resources folder)+"template "+Folder separator+ "outputTemplate.json"
$oFormTemplate :=JSON Parse(Document to text($pathname))

Etape 2

Puis par code, ajouter le titre du formulaire, le nom, et la table source de la boîte de liste.

$oFormTemp:=OB Copy($oFormTemplate)
$oFormTemp .windowTitle:=arrTableName{arrTableName}
$oFormTemp .name:= "ListForm : "+arrTableName{arrTableName}
$oFormTemp .pages[1].objects.myListBox.table:=arrTableName{arrTableName}

Output Form Template

Étape 3

Ensuite, insérez une colonne de boîte de liste pour chaque champ sélectionné. Définissez ensuite le nom de l’objet colonne, la source de la colonne et le nom de l’en-tête de la colonne.

$oFormTemp.pages$oColumn[1].objects.myListBox.columns:=New collection()

C_LONGINT ($numItem)
$numItem :=0

For ($i;1 ;Size of array(arrFieldName))
If (arrFieldDisplay{$i}=True)
C_OBJECT($oColumn)

// Create a list box column
$oColumn:=OB Copy($oObjectTemplate.colListbox)
xml-ph-0035@deepl.interobjectName:="col "+arrFieldName{$i}
$oColumn .dataSource:="["+arrTableName{arrTableName}+"]"+arrFieldName{$i}
$oColumn .header:=New object("texte" ;arrFieldLabel{$i})

// Insert the column in form
$oFormTemp.pages[1].objects.myListBox.columns[$numItem]:=$oColumn
$numItem :=$numItem+1
End if
End for

Output Form With Column

Forme de saisie

Le même principe peut être appliqué au formulaire de saisie. Il suffit d’ajouter du texte statique et un objet de saisie pour chaque champ sélectionné.

Un exemple de code est disponible dans la base de données d’exemples.

Bon codage !

Vanessa Talbot
- Product Owner -Vanessa Talbot a rejoint l'équipe du programme 4D en juin 2014. En tant que Product Owner, elle est chargée de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation des fonctionnalités livrées répond aux besoins des clients.Depuis son arrivée, elle a travaillé à la définition des fonctionnalités clés de 4D. Elle a travaillé sur la plupart des nouvelles fonctionnalités de multithreading préemptif et aussi sur un sujet très complexe : la nouvelle architecture pour les applications enginées. Vanessa est diplômée de Telecom Saint-Etienne. Elle a commencé sa carrière à l'Institut de Recherche Criminelle en tant que développeur pour le département audiovisuel. Elle a également travaillé dans les domaines des médias et du médical en tant qu'experte en support technique, en production ainsi qu'en documentation de nouvelles fonctionnalités.