4D 18 R5 ha introdotto le macro dei moduli. Esse possono essere incredibilmente utili, ad esempio, fornendo un modo ideale per risparmiare tempo nelle attività ripetitive. In questo post del blog, vi mostreremo alcuni esempi di base per conoscere meglio il funzionamento delle macro e le possibilità che offrono. Tutti gli esempi seguenti sono disponibili su GitHub.
Esempio 1: Modifica dell’attributo di un oggetto modulo
Questa è una macro per impostare il colore del carattere in rosso per tutti gli oggetti del modulo selezionati.
Nel file FormMacros.json, dichiaro la mia macro:
{ "macros": { "Set Red": { "class": "SetRedColor" } }
Creo una classe e con la proprietà“currentSelection” recupero l’insieme degli oggetti modulo selezionati. Poi modifico la proprietà dell’oggetto form. Infine, restituisco l’attributo“currentPage” che contiene le modifiche per informare 4D.
Il codice:
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:="rosso"
End for each
Else
ALERT ("Per favore, selezionare un oggetto modulo.")
End if
// Notifica a 4D la modifica
$0 :=New object("currentPage";$editor.editor.currentPage)
La classe“SetRedColor” contiene il codice della macro, disponibile nel componente“HDI_FormMacro” su GitHub.
Esempio 2: Utilizzare i parametri nel file JSON della macro
Alcuni testi devono essere in rosso, altri in verde. Potrei creare due macro con le loro classi associate, oppure creare due macro con parametri come il colore e associarle alla stessa classe.
Nel file FormMacros.json, dichiaro due macro che utilizzano la stessa classe e il parametro colore:
{ "macros": { "Set Font Color to Red": { "class": "SetFontColor", "color": "red" }, "Set Font Color to Green": { "class": "SetFontColor", "color": "green" }, }
Nel costruttore della classe, recupero il parametro colore:
Class constructor
var : . := . $1 Object
Thiscolor$1color
Nella funzione onInvoke, posso utilizzare lo stesso codice dell’Esempio 1. L’unica differenza è che invece di utilizzare il parametro colore, lo utilizzo come parametro di classe. L’unica differenza è che invece di usare la stringa “rosso”, si usa la variabile “This.color“.
La classe“SetFontColor” contiene il codice della macro, disponibile nel componente“HDI_FormMacro” su GitHub.
Esempio 3: Aggiunta di un oggetto form con un metodo
Con una macro, è anche possibile aggiungere oggetti al modulo con un metodo. Esistono diversi modi per associare o aggiungere un metodo. Si consiglia di leggerequesta pagina della documentazione che illustra tutte le possibilità.
In questo esempio, a 4D viene fornita solo la riga di codice del metodo. Al momento dell’esecuzione, 4D creerà e nominerà il file del metodo corrispondente.
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
Per posizionare facilmente l’oggetto form nel form e modificare altre proprietà (se necessario), seleziono l’oggetto form con un semplice clear() e push() su“currentSelection“, senza dimenticare di restituire“currentSelection” per notificare a 4D le modifiche.
La classe“AddButton” contiene il codice della macro, disponibile nel componente“HDI_FormMacro” su GitHub.
Esempio 4: Controllo dei percorsi delle immagini in un modulo
È anche possibile scrivere macro che non modificano il modulo. Queste macro consentono invece di convalidare informazioni, attributi o proprietà del modulo. Ad esempio, la convalida dei percorsi delle immagini di un modulo a più pagine.
La classe“CheckImagePath” contiene il codice della macro, disponibile nel componente“HDI_FormMacro” su GitHub.
Esempio 5: Utilizzare una finestra di dialogo modale nella macro
Una macro può anche visualizzare una finestra di dialogo modale. Ad esempio, per visualizzare l’elenco degli oggetti della pagina corrente con il loro tipo, il nome e la classe CSS, o qualsiasi altro parametro desiderato. Quando lo sviluppatore fa clic sul pulsante Seleziona della finestra di dialogo, gli oggetti selezionati vengono selezionati anche nell’editor del modulo.
La classe“ObjectList” contiene il codice della macro, disponibile nel componente“HDI_FormMacro” su GitHub.
Esempio 6: Allineamento a un oggetto
Per allineare gli oggetti a un oggetto di riferimento in 4D, è necessario passare attraverso la finestra di dialogo di allineamento. Perché non selezionare diversi oggetti e decidere che l’oggetto sotto il contesto del clic è l’oggetto di riferimento? Quindi nel codice:
- si riceve l’elenco degli oggetti selezionati nella proprietà “currentSelection” e il nome dell’oggetto sotto la proprietà
- e il nome dell’oggetto nel contesto del clic nella proprietà “target“.
Voilà! Grazie a queste informazioni, è possibile creare tutti gli allineamenti o le distribuzioni desiderate. Nella classe“AlignOnTarget” si ha un esempio di allineamento a sinistra, a destra, in alto e in basso rispetto a un oggetto. In questa macro, i gruppi non sono implementati, quindi se si aggiunge questa opzione, non esitate a condividerla su GitHub!