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}
É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.inter
objectName:="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
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 !