4D 18 R5 zavedlo formulářová makra. Mohou být neuvěřitelně užitečná, například tím, že poskytují ideální způsob, jak ušetřit čas při opakovaných úkonech. V tomto příspěvku na blogu si ukážeme několik základních příkladů, na kterých se dozvíte více o tom, jak makra fungují a jaké možnosti nabízejí. Všechny následující příklady jsou k dispozici na serveru GitHub.
Příklad 1: Změna atributu objektu formuláře
Toto je makro, které nastaví barvu písma na červenou pro všechny vybrané objekty formuláře.
V souboru FormMacros.json deklaruju své makro:
{ "macros": { "Set Red": { "class": "SetRedColor" } }
Vytvořím třídu a pomocí vlastnosti„currentSelection“ získám kolekci vybraných objektů formuláře. Poté změním vlastnost objektu formuláře. Nakonec vrátím atribut„currentPage„, který obsahuje změny, o kterých mám informovat 4D.
Kód:
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 ("Prosím, vyberte objekt formuláře.")
End if
// Oznámení 4D o změně
$0 :=New object("currentPage";$editor.editor.currentPage).
Třída„SetRedColor“ obsahuje kód makra, je k dispozici v komponentě„HDI_FormMacro“ na GitHubu.
Příklad 2: Použití parametrů v souboru JSON makra
Některé texty by měly být červené, jiné zelené. Mohl bych vytvořit dvě makra s vlastními přidruženými třídami, nebo mohu vytvořit dvě makra s parametry, jako je barva, a přiřadit je ke stejné třídě.
V souboru FormMacros.json deklaruji dvě makra, která používají stejnou třídu a parametr barva:
{ "macros": { "Set Font Color to Red": { "class": "SetFontColor", "color": "red" }, "Set Font Color to Green": { "class": "SetFontColor", "color": "green" }, }
V konstruktoru třídy načtu parametr color:
Class constructor
var : . := . $1 Object
Thiscolor$1color
Ve funkci onInvoke mohu použít stejný kód jako v příkladu 1. Jediný rozdíl je v tom, že místo řetězce „červená“ použijeme proměnnou „This.color„.
Třída„SetFontColor“ obsahuje kód makra, je k dispozici v komponentě„HDI_FormMacro“ na GitHubu.
Příklad 3: Přidání objektu formuláře s metodou
Pomocí makra můžete také přidávat objekty formuláře pomocí metody. Existuje několik způsobů, jak přidružit nebo přidat metodu. Doporučuji přečíst situto stránku dokumentace, která vysvětluje všechny možnosti.
V tomto příkladu je do 4D předán pouze řádek kódu metody. Při spuštění 4D vytvoří a pojmenuje příslušný soubor s metodou.
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
Pro snadné umístění objektu formuláře ve formuláři a případnou úpravu dalších vlastností vybírám objekt formuláře pomocí jednoduchého clear() a push() na„currentSelection„, přičemž nezapomenu vrátit„currentSelection„, abych 4D o úpravách informoval.
Třída„AddButton“ obsahuje kód makra, je k dispozici v komponentě„HDI_FormMacro“ na GitHubu.
Příklad 4: Kontrola cest k obrázkům ve formuláři
Můžete také napsat makra, která nemění formulář. Místo toho tato makra umožňují ověřovat informace, atributy nebo vlastnosti ve formuláři. Například ověřování cest k obrázkům ve vícestránkovém formuláři.
Třída„CheckImagePath“ obsahuje kód makra, je k dispozici v komponentě„HDI_FormMacro“ na GitHubu.
Příklad 5: Použití modálního dialogu v makru
Makro může také zobrazit modální dialog. Například pro zobrazení seznamu objektů aktuální stránky s jejich typem, názvem a třídou CSS nebo jakýmkoli jiným požadovaným parametrem. Když vývojář klikne na tlačítko Vybrat v dialogu, vybrané objekty se vyberou i v editoru formuláře.
Třída„ObjectList“ obsahuje kód makra, je k dispozici v komponentě„HDI_FormMacro“ na GitHubu.
Příklad 6: Zarovnání k objektu
Chcete-li zarovnat objekty k referenčnímu objektu v 4D, musíte projít dialogovým oknem zarovnání. Proč nevybrat několik objektů a nerozhodnout, že objekt pod kontextem kliknutí je referenční objekt? Tedy ve svém kódu:
- obdržíte seznam objektů vybraných v „currentSelection„
- a název objektu v kontextu kliknutí je ve vlastnosti „target„.
Voilà! Díky této informaci můžete vytvořit všechna zarovnání nebo rozdělení, která chcete. Ve třídě„AlignOnTarget“ máte příklad zarovnání vlevo, vpravo, nahoře a dole vzhledem k objektu. V tomto makru nejsou implementovány skupiny, takže pokud tuto možnost přidáte, neváhejte se o ni podělit zpět na GitHub!