6 exemples pratiques sur l’utilisation des macros

Traduit automatiquement de Deepl

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
Thiscolor$1color

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 lirecette 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.

blank

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« .

blank

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 !

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.