6 praktische Beispiele für die Verwendung von Makros

Mit 4D 18 R5 wurden Formularmakros eingeführt. Sie können unglaublich nützlich sein, zum Beispiel, indem sie eine ideale Möglichkeit bieten, Zeit bei sich wiederholenden Aufgaben zu sparen. In diesem Blog-Beitrag zeigen wir Ihnen einige grundlegende Beispiele, um mehr über die Funktionsweise von Makros und die Möglichkeiten, die sie bieten, zu erfahren. Alle folgenden Beispiele sind auf GitHub verfügbar.

Beispiel 1: Ändern eines Attributs eines Formularobjekts

Dies ist ein Makro, das die Schriftfarbe für alle ausgewählten Formularobjekte auf Rot setzt.

In der Datei FormMacros.json deklariere ich mein Makro:

{
   "macros": {
      "Set Red": {
         "class": "SetRedColor"
      }
}

Ich erstelle eine Klasse und rufe mit der Eigenschaft„currentSelection“ die Sammlung der ausgewählten Formularobjekte ab. Dann ändere ich die Eigenschaft des Formularobjekts. Schließlich gebe ich das Attribut„currentPage“ zurück, das die Änderungen enthält, um 4D zu informieren.

Der 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:="rot"
End for each
Else
ALERT ("Bitte wählen Sie ein Formularobjekt aus.")
End if
// Benachrichtigung an 4D über die Änderung
$0 :=New object("currentPage";$editor.editor.currentPage)

Die Klasse„SetRedColor“ enthält den Code des Makros, sie ist in der Komponente„HDI_FormMacro“ auf GitHub verfügbar.

Beispiel 2: Parameter in der JSON-Makro-Datei verwenden

Einige Texte sollen in Rot, andere in Grün dargestellt werden. Ich könnte zwei Makros mit ihren eigenen zugehörigen Klassen erstellen, oder ich kann zwei Makros mit Parametern wie Farbe erstellen und sie mit derselben Klasse verknüpfen.

In der Datei FormMacros.json deklariere ich zwei Makros, die dieselbe Klasse und den Farbparameter verwenden:

{
   "macros": {
      "Set Font Color to Red": {
         "class": "SetFontColor",
         "color": "red"
      },
      "Set Font Color to Green": { 
         "class": "SetFontColor", 
         "color": "green"
      },
}

Im Klassenkonstruktor rufe ich den Parameter color ab:

Class constructor
var : . := . $1 Object
Thiscolor$1color

In der Funktion onInvoke kann ich denselben Code wie in Beispiel 1 verwenden. Der einzige Unterschied ist, dass wir statt der Zeichenkette „red“ die Variable „This.color„.

Die Klasse„SetFontColor“ enthält den Code des Makros, es ist in der Komponente„HDI_FormMacro“ auf GitHub verfügbar.

Beispiel 3: Formularobjekt mit einer Methode hinzufügen

Mit einem Makro können Sie auch Formularobjekte mit einer Methode zum Formular hinzufügen. Es gibt mehrere Möglichkeiten, eine Methode zuzuordnen oder hinzuzufügen. Ich empfehle Ihnen,diese Seite der Dokumentation zu lesen, auf der alle Möglichkeiten erläutert werden.

In diesem Beispiel wird nur die Codezeile der Methode an 4D übergeben. Bei der Ausführung wird 4D die entsprechende Methodendatei erstellen und benennen.

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

Um das Formularobjekt einfach im Formular zu positionieren und andere Eigenschaften zu ändern (falls erforderlich), wähle ich das Formularobjekt mit einem einfachen clear() und push() auf der„currentSelection“ aus, ohne zu vergessen,„currentSelection“ zurückzugeben, um 4D über die Änderungen zu informieren.

Die Klasse„AddButton“ enthält den Code des Makros, er ist in der Komponente„HDI_FormMacro“ auf GitHub verfügbar.

Beispiel 4: Bildpfade in einem Formular prüfen

Sie können auch Makros schreiben, die das Formular nicht verändern. Stattdessen können Sie mit diesen Makros Informationen, Attribute oder Eigenschaften in Ihrem Formular überprüfen. Ein Beispiel ist die Überprüfung der Bildpfade in einem mehrseitigen Formular.

Die Klasse„CheckImagePath“ enthält den Code des Makros, es ist in der Komponente„HDI_FormMacro“ auf GitHub verfügbar.

Beispiel 5: Modaler Dialog im Makro verwenden

Ein Makro kann auch ein modales Dialogfeld anzeigen. Zum Beispiel, um die Liste der Objekte der aktuellen Seite mit ihrem Typ, Namen und ihrer CSS-Klasse oder jedem anderen gewünschten Parameter anzuzeigen. Wenn der Entwickler im Dialog auf die Schaltfläche Auswählen klickt, werden die ausgewählten Objekte auch im Formulareditor ausgewählt.

blank

Die Klasse„ObjectList“ enthält den Code des Makros, er ist in der Komponente„HDI_FormMacro“ auf GitHub verfügbar.

Beispiel 6: Ausrichtung an einem Objekt

Um Objekte an einem Referenzobjekt in 4D auszurichten, müssen Sie den Ausrichtungsdialog durchlaufen. Warum wählen Sie nicht mehrere Objekte aus und entscheiden, dass das Objekt unter dem Klickkontext das Referenzobjekt ist? Also in Ihrem Code:

  • erhalten Sie die Liste der Objekte, die in der Eigenschaft „currentSelection“ Eigenschaft
  • und den Namen des Objekts unter dem Klickkontext in der Eigenschaft „target„Eigenschaft.

blank

Voilà! Dank dieser Informationen können Sie alle gewünschten Ausrichtungen oder Verteilungen erstellen. In der Klasse„AlignOnTarget“ haben Sie ein Beispiel für die Ausrichtung nach links, rechts, oben und unten relativ zu einem Objekt. In diesem Makro sind Gruppen nicht implementiert. Wenn Sie also diese Option hinzufügen, können Sie sie gerne auf GitHub weitergeben!

Vanessa Talbot
Product Owner - Vanessa Talbot kam im Juni 2014 zum 4D Programmteam. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Seit ihrer Ankunft hat sie an der Definition der wichtigsten Funktionen in 4D gearbeitet. Sie hat an den meisten der neuen Funktionen für präemptives Multi-Threading gearbeitet und auch an einem sehr komplexen Thema: der neuen Architektur für erstellte Anwendungen. Vanessa hat einen Abschluss von der Telecom Saint-Etienne. Sie begann ihre Karriere am Criminal Research Institute als Entwicklerin für die audiovisuelle Abteilung. Sie hat auch in den Bereichen Medien und Medizin als Expertin für technischen Support, Produktion und die Dokumentation neuer Funktionen gearbeitet.