4D 18 R5 a introduit les macros de formulaire. Elles peuvent être incroyablement utiles, par exemple en offrant un moyen idéal de gagner du temps sur des tâches répétitives. Dans ce billet de blog, nous allons vous montrer quelques exemples de base pour en savoir plus sur le fonctionnement des macros et les possibilités qu’elles offrent. Tous les exemples suivants sont disponibles sur GitHub.
Exemple 1 : Modification de l’attribut d’un objet de formulaire
Voici une macro permettant de définir la couleur de la police en rouge pour tous les objets de formulaire sélectionnés.
Dans le fichier FormMacros.json, je déclare ma macro :
{ "macros": { "Set Red": { "class": "SetRedColor" } }
Je crée une classe et avec la propriété « currentSelection« , je récupère la collection des objets de formulaire sélectionnés. Ensuite, je change la propriété de l’objet formulaire. Enfin, je retourne l’attribut « currentPage » qui contient les modifications pour informer 4D.
Le code :
Function onInvoke($editor: Object) : Object
var $name : Text
If ($editor.editor.currentSelection.length>0)
// Set stroke to red for each selected objects
For each ($name;$editor.editor.currentSelection)
$editor.editor.currentPage.objects[$name].stroke:="red"
End for each
Else
ALERT ("Veuillez sélectionner un objet du formulaire.")
End if
// Notifier à 4D la modification
$0:=New object("currentPage" ;$editor.editor.currentPage)
La classe « SetRedColor » contient le code de la macro, elle est disponible dans le composant « HDI_FormMacro » sur GitHub.
Exemple 2 : Utiliser les paramètres dans le fichier macro JSON
Certains textes doivent être en rouge, d’autres en vert. Je pourrais créer deux macros avec leurs propres classes associées, ou je peux créer deux macros avec des paramètres tels que la couleur, et les associer à la même classe.
Dans le fichier FormMacros.json, je déclare deux macros qui utilisent la même classe et le paramètre couleur :
{ "macros": { "Set Font Color to Red": { "class": "SetFontColor", "color": "red" }, "Set Font Color to Green": { "class": "SetFontColor", "color": "green" }, }
Dans le constructeur de la classe, je récupère le paramètre couleur :
Class constructor
var $1 : Object
This.color:=$1.color
Dans la fonction onInvoke, je peux utiliser le même code que dans l’exemple 1. La seule différence est qu’au lieu d’utiliser la chaîne « rouge », nous utilisons la variable « This.color« .
La classe « SetFontColor » contient le code de la macro, elle est disponible dans le composant « HDI_FormMacro » sur GitHub.
Exemple 3 : Ajouter un objet de formulaire avec une méthode
Avec une macro, vous pouvez également ajouter des objets de formulaire à l’aide d’une méthode. Il existe plusieurs façons d’associer ou d’ajouter une méthode. Je vous recommande de lire cette page de la documentation qui explique toutes les possibilités.
Dans cet exemple, seule la ligne de code de la méthode est donnée à 4D. Lors de l’exécution, 4D va créer et nommer le fichier méthode correspondant.
Function onInvoke($editor: Object)->$result: Object
var $btnHello : Object
// Create a "Hello" button
$btnHello :=New object("type" ; "button" ;\
"text" ; "Hello World !";\
"method" ;New object("source" ; "ALERT(\"coucou\")") ;\
"events" ;New collection("onClick") ;\
"width";120 ;\
"height";20 ;\
"top";0 ;\
"left";0)
// Add button in the current page
$editor.editor.currentPage.objects.btnHello:=$btnHello
// Select the new button in the form editor
$editor.editor.currentSelection.clear()
$editor.editor.currentSelection.push("btnHello")
// Notify 4D of the modification
$result:=New object
$result.currentSelection:=$editor.editor.currentSelection
$result.currentPage:=$editor.editor.currentPage
Pour positionner facilement l’objet formulaire dans le formulaire et modifier d’autres propriétés (si nécessaire), je sélectionne l’objet formulaire avec un simple clear() et push() sur le « currentSelection« , sans oublier de retourner « currentSelection » pour notifier 4D des modifications.
La classe « AddButton » contient le code de la macro, elle est disponible dans le composant « HDI_FormMacro » sur GitHub.
Exemple 4 : Vérifier les chemins des images dans un formulaire
Vous pouvez également écrire des macros qui ne modifient pas le formulaire. Au lieu de cela, ces macros vous permettent de valider des informations, des attributs ou des propriétés dans votre formulaire. Par exemple, valider les chemins des images de votre formulaire multi-pages.
La classe « CheckImagePath » contient le code de la macro, elle est disponible dans le composant « HDI_FormMacro » sur GitHub.
Exemple 5 : Utiliser un dialogue modal dans la macro
Une macro peut également afficher un dialogue modal. Par exemple, pour afficher la liste des objets de la page courante avec leur type, leur nom et leur classe CSS, ou tout autre paramètre que vous souhaitez. Lorsque le développeur clique sur le bouton » Select » dans la boîte de dialogue, les objets sélectionnés sont également sélectionnés dans l’éditeur de formulaire.
La classe « ObjectList » contient le code de la macro, elle est disponible dans le composant « HDI_FormMacro » sur GitHub.
Exemple 6 : Alignement sur un objet
Pour aligner des objets sur un objet de référence dans 4D, vous devez passer par la boîte de dialogue d’alignement. Pourquoi ne pas sélectionner plusieurs objets et décider que l’objet situé sous le contexte de clic est l’objet de référence ? Ainsi dans votre code :
- vous recevez la liste des objets sélectionnés dans la propriété « currentSelectionet le nom de l’objet dans la propriété » « .
- et le nom de l’objet dans le contexte du clic est dans la propriété « target« .
Voilà ! Grâce à cette information, vous pouvez créer tous les alignements ou distributions que vous voulez. Dans la classe « AlignOnTarget« , vous avez un exemple d’alignement à gauche, à droite, en haut et en bas par rapport à un objet. Dans cette macro, les groupes ne sont pas implémentés, donc si vous ajoutez cette option, n’hésitez pas à la partager sur GitHub !