Zum Hauptinhalt springen

Arbeiten mit Blockly-Skripten

Skripte im iCL Designer bieten eine Vielzahl von Möglichkeiten, Antworten dynamisch zu ändern, die Sichtbarkeit einzuschränken, Berechnungen durchzuführen und vieles mehr. Gleichzeitig sind Skripte sehr zugänglich, da Sie keine Programmierkenntnisse haben müssen, um sie zu verwenden, obwohl es nicht schadet, welche zu haben. Dies wird durch die Verwendung von Blockly erreicht, einem leistungsstarken Skript-Tool, mit dem Sie Skripte definieren können, ähnlich wie beim Zusammensetzen eines Puzzles.

In diesem Leitfaden werden wir die Möglichkeiten erkunden, die Blockly-Skripte bieten.

für den Einstieg

Wir verwenden die Arbeitsmappe, die wir im vorherigen Tutorial erstellt haben - mit ein paar Änderungen.

Bevor wir mit diesem Tutorial beginnen, müssen wir unsere Arbeitsmappe ein wenig umgestalten. Wir erstellen ein neues Kapitel mit dem Namen "Allgemeine Informationen", in das wir die Überschrift "Gebäude" verschieben. Von nun an erstellen wir für jedes Stockwerk ein neues Kapitel (nicht nur eine Überschrift), sodass die Überschrift 'Check' nicht mehr wiederholt werden kann. Sie werden bald sehen, warum diese Änderungen notwendig waren.

💾 Laden Sie die Arbeitsmappe von hier herunter:

Einführung in Blockly-Skripte

Im iCL Designer zeigt ein kleines Puzzlesymbol neben einer Eigenschaft an, dass diese Eigenschaft mit einem Skript versehen werden kann. Titel sind z.B. immer skriptfähig, ebenso wie die Eigenschaften 'Exists' und 'Hidden'. Bei Fragen können wir viele weitere Eigenschaften mit einem Skript versehen, z. B. 'Mandatory', 'Readonly' oder vor allem 'Skripted answer'. Die vollständige Liste der skriptfähigen Eigenschaften finden Sie hier.

Überschriften

Wenn Sie die ganze Serie dieses Leitfadens verfolgt haben, haben Sie bereits einen Einblick in die Welt der Blockly-Skripte bekommen. Im Leitfaden Hinzufügen von wiederholbaren Bereichen haben wir ein Skript erstellt, um den Titel einer Überschrift dynamisch zu ändern. Als Erstes verschieben wir dieses Skript auf den Titel des Kapitels, da das Kapitel nun für jedes Stockwerk wiederholt wird, nicht die Überschrift.

Tipp

Sie können Überschriften kopieren und einfügen, indem Sie sie mit der rechten Maustaste anklicken. Klicken Sie zunächst mit der rechten Maustaste auf das vorhandene Skript und wählen Sie "Kopieren". Wählen Sie dann den Kapitelknoten aus und klicken Sie mit der rechten Maustaste auf das Puzzlesymbol neben dem Titel, um das Skript einzufügen. Nun müssen Sie nur noch die Überschrift erneut auswählen, erneut mit der rechten Maustaste auf das Skript klicken und "Löschen" wählen.

Lassen Sie uns dieses Titel-Skript noch ein wenig verbessern. Anstelle des Namens der Etage könnten wir das Wort 'Etage:' und den Namen der Etage aneinanderhängen.

Sie können den Blockly-Editor durch einen Doppelklick auf das bereits vorhandene Skript öffnen.

Information

Die Blöcke sind in Tabs gruppiert, damit sie leichter zu finden sind. Jede Gruppe hat ihre eigene Farbe, um sie noch besser unterscheiden zu können.

Zum Beispiel sind textbezogene Blöcke grün.

Um Texte zu verknüpfen, können wir den Block 'create text with' verwenden, den Sie auf dem Tab 'Text' finden.

Der erste leere Block in dem Tab "Text" ist ein Block, in den Sie beliebigen (übersetzbaren und nicht übersetzbaren) Text einfügen können. Kombiniert man dies mit den Blöcken 'create list with' und 'answer of floor', so können wir unser Ziel erreichen.


Hinweis

Das Kontrollkästchen 'Übersetzbar' spielt nur in mehrsprachigen Arbeitsmappen eine Rolle, ansonsten ist es egal, ob es aktiviert ist oder nicht. Mehr über mehrsprachige Arbeitsmappen erfahren Sie hier.

Tipp

Einige Blöcke (wie 'create text with') können durch Anklicken der blauen Einstellungsschaltfläche angepasst werden. Im Falle des Blocks 'create text with' können Sie beispielsweise die Anzahl der Eingänge des Blocks angeben, wodurch Sie festlegen können, wie viele Texte Sie miteinander verknüpfen möchten.

The fallback content to display on prerendering

In ähnlicher Weise können wir auch den Titel der Checkliste mit der Adresse des Gebäudes skripten:

Diese kleinen Titelskripte scheinen keine große Sache zu sein, aber sie können in wiederholenden Bereichen sehr hilfreich sein, da man leicht den Überblick verliert, was dieser Bereich enthält, da sie denselben Namen haben. Sie können diese Verwirrung vermeiden, indem Sie ein einfaches Skript erstellen, das die Antwort auf eine Frage innerhalb dieses Kapitels oder dieser Überschrift anzeigt.

Das Ergebnis in iCL Filler sieht wiefolgt aus:

Zustände eines Fragefeldes

Jedes Fragefeld hat 4 skriptfähige Eigenschaften mit booleschen (ja/nein) Antworten: 'Mandatory', 'Exists', 'Hidden', 'Readonly'. Diese Eigenschaften können auch dynamisch mit Blockly-Skripten geändert werden.

Bevor wir uns ein Beispiel dafür ansehen, müssen wir unsere Arbeitsmappe noch ein wenig umstrukturieren. Im Falle eines Sicherheitsverstoßes in einem Stockwerk wäre es viel nützlicher, mehr Informationen über das Problem zu sammeln. Zu diesem Zweck erstellen wir eine neue Überschrift mit dem Namen "Mangel", in die wir neben der bereits vorhandenen "Beschreibung" einige weitere Fragen zum Mangel einfügen können.

Bisher war das Feld "Beschreibung" ein Folgefeld der Antwort "Nein" auf die Frage "Ist das Stockwerk sicher?". Damit wurde das Problem gelöst, dass die Frage nur dann gestellt werden darf, wenn in dieser Etage etwas nicht in Ordnung ist. Dieses Konzept gilt auch für die neu erstellte Überschrift, allerdings können Überschriften nicht als Folgefragen hinzugefügt werden.

Wir können dies mit dem Skript "Exists" der neuen Überschrift lösen.

Die Überschrift "Mangel" sollte nur existieren, wenn:

  • die Frage 'Ist das Stockwerk sicher?' eine Antwort hat,
  • und die Antwort 'Nein' lautet.

Das gesamte Skript lautet wie folgt:

Lassen Sie uns Schritt für Schritt vorgehen.

Öffnen Sie den Blockly-Editor für die Eigenschaft "Exists" der neuen Überschrift. Zunächst verwenden wir den Block "test - if true - if false" aus der Gruppe "Logik", denn wenn das oben beschriebene Kriterium erfüllt ist, wollen wir true zurückgeben, ansonsten false.

Wir wollen 2 Bedingungen prüfen und nur dann wahr zurückgeben, wenn beide wahr sind - dies kann durch den 'and'-Block aus der 'Logic'-Gruppe erreicht werden.

Jetzt verwenden wir 2 Blöcke aus der Gruppe 'Checklist Fields': der erste heißt 'has value'.

best practice

Wenn Sie in einem Skript ein anderes Feld verwenden, ist es immer eine gute Idee, zuerst zu prüfen, ob das Feld einen Wert hat, da alle Skripte (mit Ausnahme der Skripte für Title und RepeatFor) unabhängig davon ausgewertet werden, ob alle abhängigen Felder bereits einen Wert gesetzt haben oder nicht. Wenn Sie also nicht prüfen, ob ein erforderliches Feld einen Wert hat, kann es bei der auswertung des Skriptes zu Fehlern kommen, die auch andere Skripte zerstören können! Wenn Sie den Wert eines Feldes in einem Skript verwenden, ist es immer eine gute Idee, zuerst zu prüfen, ob das Feld einen Wert hat.

Zuerst prüfen wir also, ob die Frage "Ist das Stockwerk sicher?" einen Wert hat. Wenn ja, ist die zweite zu prüfende Bedingung die Antwort auf diese Frage. Um dies zu überprüfen, verwenden Sie den Block 'ist einer von' aus der Gruppe 'Checklistenfelder'.

Hinweis

Der Block 'is one of' prüft, ob eine der in der rechten Eingabe angegebenen Antworten für die in der linken Eingabe angegebene Frage ausgewählt ist.

Sie können Antworten auch einfach per Drag&Drop verschieben, es funktioniert genauso wie bei den Fragefeldern.

The fallback content to display on prerendering

Fügen wir der Überschrift "Mangel" zwei weitere Fragen hinzu.

Wir haben ein Ja/Nein-Feld und ein Bildfeld (im iCL Designer 'Take a picture' genannt) hinzugefügt, damit der Inspektor ein Bild des Problems machen kann.

Neben dem Namen des Feldes "Foto" ist kein Sternchen zu sehen. Das bedeutet, dass es sich nicht um ein Pflichtfeld handelt. Wenn der Mangel jedoch sehr gefährlich ist, sollte ein Foto obligatorisch sein! Haben Sie eine Idee, wie man das machen könnte?

Zeig mir die Lösung!

Das Skript in der Eigenschaft 'Mandatory' des Bildfeldes sollte lauten:

Schauen wir uns das in iCL Filler an.

The fallback content to display on prerendering

Als erstes fällt auf, dass die Überschrift "Mangel" erscheint, wenn das Stockwerk auf "nicht sicher" eingestellt ist. Wenn der Mangel als sehr gefährlich eingestuft wird, erscheint links neben dem Feld "Foto" ein roter Indikator, der anzeigt, dass das Feld obligatorisch ist. Beachten Sie auch, dass sich die Werte der Indikatoren, die die Anzahl der obligatorischen Fragen anzeigen, entsprechend erhöhen, wenn die Frage nach dem Foto obligatorisch wird.

Werte

Mit Blockly-Skripten können Sie Fragen auch dynamisch beantworten. Sie können Antworten mit einem oder mehreren anderen Feldern erstellen, Berechnungen durchführen, komplexe Texte erstellen und vieles mehr. Sehen wir uns ein paar Beispiele an!

Lassen Sie uns zunächst die Antwort des Datumsfeldes im Kapitel 'Conclusion' skripten. Dieses Datum soll immer das aktuelle Datum enthalten. Der 'now'-Block ist genau für diesen Fall gedacht.

Fügen Sie eine neue Überschrift zum Kapitel "Allgemeine Informationen" hinzu, nennen Sie sie "Inspektor". Fügen Sie innerhalb dieser Überschrift ein neues Textfeld 'Name' hinzu

Sie können einige Informationen über den aktuellen Inspektor mit Hilfe von Blockly-Blöcken aus der Gruppe "Benutzereigenschaften" abfragen. Wir können zum Beispiel ein Skript erstellen, um den Namen des Inspektors automatisch zu setzen. Dazu werden der Vorname, ein Leerzeichen und der Nachname miteinander verknüpft. Daher müssen wir den Block 'create text with' so ändern, dass er 3 Eingaben hat.

The fallback content to display on prerendering

Sehen wir uns ein letztes Beispiel an. Fügen Sie ein schreibgeschütztes Textfeld in den Teil "Konklusion" ein.

Das Ziel dieses Textfeldes ist es, eine kurze Zusammenfassung wie diese anzuzeigen: "Diese Inspektion wurde von Antoine Gadget am 20/05/2023 durchgeführt."

Wenn Sie Ihr Wissen auf die Probe stellen wollen, versuchen Sie es selbst! Tipp: Sie benötigen einen Block aus dem Tab 'Formatierung'.

Zeig mir die Lösung!

Wir beginnen wieder mit dem Block 'create text with'.

Im ersten Eingang fügen wir einen statischen Textblock mit dem Text hinzu: "Diese Inspektion wurde durchgeführt von ".

Der nächste Eingang enthält das Namensfeld aus dem ersten Kapitel.

Dann fügen wir einen weiteren statischen Text hinzu: " am ". Vergessen Sie nicht, auf beiden Seiten Leerzeichen einzufügen.

In der nächsten Eingabe verwenden Sie den Block "Datum formatieren als" aus der Gruppe "Formatierung". Die Standardformatierung ist dd/MM/yyyy, was genau das ist, was wir wollen. Natürlich können Sie auch jede andere Formatierung wählen, die Ihnen gefällt.

Fügen Sie dann eine letzte Eingabe hinzu, bei der Sie wieder einen statischen Text mit einem "." zum Abschluss des Satzes einfügen.


Hinweis

Sie können die verbesserte icl-Datei von hier herunterladen.

Wert-Skripte vs. transiente Skripte

Die Auswertung von Skripten in iCL Filler unterscheidet sich je nach Art des Skripts.

Wir unterscheiden zwischen zwei Gruppen:

  • Werteskripte (Skripte, die eine Auswirkung auf den Wert eines Feldes haben)
  • transiente Skripte (Skripte, die jedes Mal neu ausgewertet werden)

Wertbezogene Skripte sind Skripte für 'Scripted answer', 'Exists' und 'Repeat for'. Alles andere sind transiente Skripte.

Werteskripte werden nur einmal ausgewertet, wenn sie zum ersten Mal geladen werden. Zum Beispiel, wenn die Checkliste erstellt wird, eine Überschrift oder ein Kapitel manuell hinzugefügt wird oder ein Folgefeld mit einem Script "ScriptedAnswer" hinzugefügt wird, weil die übergeordnete Frage beantwortet wird. Danach werden sie nur dann neu ausgewertet, wenn sich eine ihrer Abhängigkeiten geändert hat. Beispiel: Das letzte Textfeld "Konklusion" hat ein Skript 'Scripted answer', das ein Werteskript ist. Dieses Skript hängt von 2 Feldern ab: "Name" und "Datum". Wenn sich eines dieser Felder ändert, wird das Skript neu ausgewertet.

Die Werte von transienten Skripten werden nicht gespeichert, sondern jedes Mal neu ausgewertet, wenn sie benötigt werden. Das Skript 'Mandatory' für das Feld "Photo" ist zum Beispiel transient. Wenn wir zu einem anderen Kapitel navigieren und dann zu diesem zurückkehren, wird das Skript neu ausgewertet.

Mehr über die Auswertung von Skripten erfahren Sie hier.

Zusammenfassung

Dieses Tutorial führt Sie in die Welt der Blockly-Skripte ein. Die Verwendung von Skripten kann Ihre Arbeitsmappen effizienter und mächtiger machen.

Es gibt noch viele weitere Anwendungsfälle für Blockly-Skripte, die in diesem Tutorial nicht behandelt wurden, z.B. gibt es eine 'Math'-Gruppe, die Blöcke für mathematische Berechnungen enthält, in dem 'List'-Tab finden Sie viele Blöcke, die es Ihnen ermöglichen, Listen zu erstellen, zu filtern, zu modifizieren, usw. Mit Skripten können Sie (fast) alles machen, der Himmel ist die Grenze.

Eine vollständige Liste aller Blockly-Blöcke finden Sie hier.