Startseite Rules Engine – Bedingte Sichtbarkeit
👁️‍🗨️

Rules Engine – Bedingte Sichtbarkeit

Sebastian Herd
Von Sebastian Herd
3 Artikel

Radio-Auswahlfeld

Bedingte Sichtbarkeit in Abhängigkeit eines Radio-Auswahlfelds Eine festgelegte Option ist ausgewählt Beispiel: 💡 Das Texteingabe-Feld Bemerkung soll nur angezeigt werden, wenn Rot ausgewählt wurde. Beispiel-Code: blocks.color.options.red.selected Erklärung: Über blocks erhält man Zugriff auf alle Blöcke im vorliegenden Dokument bzw. Formular. Innerhalb von blocks sind die Blöcke unter ihrem jeweiligen slug im Schema blocks.slug — also beispielsweise blocks.color — erreichbar. Bei einem Radio/Button/Select-Auswahlfeld bietet der Block dann eine Reihe von Eigenschaften und Methoden, unter anderem auch die Liste an auswählbaren Optionen — erreichbar unter blocks.color.options. Jede Option — erreichbar unter ihrem jeweiligen Slug — hat wiederum die Eigenschaft selected, welche zurückgibt, ob die Option gerade ausgewählt ist (true) oder nicht (false). Der Code blocks.color.options.red.selected liefert als genau dann true zurück (und schaltet damit den mit der Sichtbarkeitsregel belegten Block auf sichtbar), wenn die Option red aus der Auswahl color gerade ausgewählt ist. Hier Regel kopieren: blocks.[Slug Radio Block].options.[Slug Radio Option].selected Eine von mehreren festgelegten Optionen ist ausgewählt Beispiel: 💡 Das Texteingabe-Feld Bemerkung soll nur angezeigt werden, wenn Rot oder Grün ausgewählt wurde. Beispiel-Code: blocks.color.options.red.selected || blocks.color.options.green.selected Erklärung: Über blocks erhält man Zugriff auf alle Blöcke im vorliegenden Dokument bzw. Formular. Innerhalb von blocks sind die Blöcke unter ihrem jeweiligen slug im Schema blocks.slug — also beispielsweise blocks.colors — erreichbar. Bei einem Radio/Button/Select-Auswahlfeld bietet der Block dann eine Reihe von Eigenschaften und Methoden, unter anderem auch die Liste an auswählbaren Optionen — erreichbar unter blocks.color.options. Jede Option — erreichbar unter ihrem jeweiligen Slug — hat wiederum die Eigenschaft selected, welche zurückgibt, ob die Option gerade ausgewählt ist (true) oder nicht (false). Der Code blocks.color.options.red.selected liefert als genau dann true zurück (und schaltet damit den mit der Sichtbarkeitsregel belegten Block auf sichtbar), wenn die Option red aus der Auswahl color gerade ausgewählt ist. Der oder-Operator || verknüpft zwei Aussagen miteinander, sodass genau dann true zurückgegeben wird, wenn eine der beiden Aussagen true zurückgeben. Hier also, wenn entweder Rot ausgewählt wurde (blocks.color.options.red.selected) oder (||) Grün ausgewählt wurde (blocks.color.options.green.selected). Hier Regel kopieren: blocks.[Slug Radio Block].options.[Slug Radio Option 1].selected || blocks.[Slug Radio Block].options.[Slug Radio Option 2].selected Variante: Eine Option aus einer Liste von festgelegten Optionen ist ausgewählt Es ist sehr müßig, eine größere Menge bzw. Liste von festgelegten Optionen über den ||-Operator aufzuzählen. Hierfür gibt es übersichtlichere Alternativen: [ blocks.colors.options.red.slug, blocks.colors.options.green.slug, blocks.colors.options.purple.slug, blocks.colors.options.orange.slug ].includes(blocks.colors.selectedOption.slug) ["red", "green", "purple", "orange"].includes(blocks.colors.selectedOption.slug) Die zentrale Idee hierbei besteht darin eine festgelegte Liste von Optionen (genauer: deren slugs) aufzuzählen und dann nachzuschauen, ob die ausgewählte Option in dieser Liste vorkommt. Der slug jeder Option kann über die Eigenschaft slug abgerufen werden. Bei einem Radio/Button/Select-Auswahlfeld bietet der Block die Eigenschaft selectedOption , welche diejenige Option zurückgibt, welche gerade ausgewählt ist. Im ersten Beispiel wird die bekannte Punktnotation verwendet, um über den Auswahlblock und dessen Optionen jeweils an die Option-slugs zu gelangen. Im zweiten Beispiel wird direkt mit einer Liste von slugs (welche explizit aufgezählt werden) gearbeitet. Während das erste Beispiel nicht vorhandene Optionen (slug unbekannt) direkt als Fehler kennzeichnet, würden fehlende/fehlerhafte slugs im zweiten Beispiel nicht erkannt werden.

Zuletzt am 19. August aktualisiert

Checkbox-Auswahl

Bedingte Sichtbarkeit in Abhängigkeit einer Checkbox-Auswahl Eine festgelegte Option ist ausgewählt Beispiel: 💡 Das Texteingabe-Feld Bemerkung soll nur angezeigt werden, wenn Grün ausgewählt wurde. Beispiel-Code: blocks.colors.options.green.selected Erklärung: Über blocks erhält man Zugriff auf alle Blöcke im vorliegenden Dokument bzw. Formular. Innerhalb von blocks sind die Blöcke unter ihrem jeweiligen slug im Schema blocks.slug — also beispielsweise blocks.colors — erreichbar. Bei einem Checkbox-Auswahlfeld bietet der Block dann eine Reihe von Eigenschaften und Methoden, unter anderem auch die Liste an auswählbaren Optionen — erreichbar unter blocks.colors.options. Jede verfügbare Option — erreichbar unter ihrem jeweiligen Slug — hat wiederum die Eigenschaft selected, welche zurückgibt, ob die Option gerade ausgewählt ist (true) oder nicht (false). Der Code blocks.colors.options.green.selected liefert als genau dann true zurück (und schaltet damit den mit der Sichtbarkeitsregel belegten Block auf sichtbar), wenn die Option green aus der Checkbox-Auswahl colors gerade ausgewählt ist. Hier Regel kopieren: blocks.[Slug Checkbox Block].options.[Slug Checkbox Option].selected Eine von mehreren festgelegten Optionen ist ausgewählt Beispiel: Das Texteingabe-Feld Bemerkung soll nur angezeigt werden, wenn Grün oder Orange ausgewählt wurde. Beispiel-Code: blocks.colors.options.green.selected || blocks.colors.options.orange.selected Erklärung: Über blocks erhält man Zugriff auf alle Blöcke im vorliegenden Dokument bzw. Formular. Innerhalb von blocks sind die Blöcke unter ihrem jeweiligen slug im Schema blocks.slug — also beispielsweise blocks.colors — erreichbar. Bei einem Checkbox-Auswahlfeld bietet der Block dann eine Reihe von Eigenschaften und Methoden, unter anderem auch die Liste an auswählbaren Optionen — erreichbar unter blocks.colors.options. Jede verfügbare Option — erreichbar unter ihrem jeweiligen Slug — hat wiederum die Eigenschaft selected, welche zurückgibt, ob die Option gerade ausgewählt ist (true) oder nicht (false). Der Code blocks.colors.options.green.selected liefert als genau dann true zurück (und schaltet damit den mit der Sichtbarkeitsregel belegten Block auf sichtbar), wenn die Option green aus der Checkbox-Auswahl colors gerade ausgewählt ist. Der oder-Operator || verknüpft zwei Aussagen miteinander, sodass genau dann true zurückgegeben wird, wenn eine der beiden Aussagen true zurückgeben. Hier Regel kopieren: blocks.[Slug Checkbox Block].options.[Slug Checkbox Option 1].selected || blocks.[Slug Checkbox Block].options.[Slug Checkbox Option 2].selected Variante: Eine Option aus einer Liste von festgelegten Optionen ist ausgewählt Es ist sehr müßig, eine größere Menge bzw. Liste von festgelegten Optionen über den ||-Operator aufzuzählen. Hierfür gibt es übersichtlichere Alternativen: blocks.colors.anyOptionSelected([ blocks.colors.options.green.slug, blocks.colors.options.orange.slug, blocks.colors.options.yellow.slug ]) blocks.colors.anyOptionSelected(["yellow", "green", "orange"]) Die Methode anyOptionSelected für Checkbox-Blöcke bietet die komfortable Möglichkeit, auf einmal prüfen, ob eine oder mehrere Optionen aus einer ganzen Liste von Optionen (genauer: deren slugs) ausgewählt sind. Im ersten Beispiel wird die bekannte Punktnotation verwendet, um über den Auswahlblock und dessen Optionen jeweils an die Option-slugs zu gelangen. Im zweiten Beispiel wird direkt mit einer Liste von slugs (welche explizit aufgezählt werden) gearbeitet. Die anyOptionSelected-Methode prüft direkt bei der Eingabe, ob alle slugs aus der Liste der zu prüfenden Slugs auch vorhanden sind. Sollte keine Option mit dem angegebenen slug vorhanden sein, wird der Fehler Error: Option 'apple' not found in checkbox 'colors' zurückgegeben.

Zuletzt am 19. August aktualisiert

Datensätze

Regeln innerhalb von Datensätzen Lokale Adressierung von Blöcken (self.siblings) Üblicherweise können alle Blöcke mittels Punktnotation über blocks.slug adressiert werden. Innerhalb von Datensätzen funktioniert die Adressierung von Blöcken konzeptionell anders. Hintergrund ist die logische Dopplung eines jeden Blocks pro Datensatz. Im folgenden Beispiel ist für *jede “*Vorherige Versicherung” der Block “Name der Versicherung” vorhanden. Der bekannte Weg über blocks.insurance_name würde also die Frage aufwerfen, der Name welcher vorherigen Versicherung denn nun zurückgegeben werden würde. Um dieses Problemfeld zu umgehen, sind Blöcke innerhalb von Datensätzen nicht über blocks.slug erreichbar. Um von außen auf diese Blöcke zuzugreifen, wird mit blocks.datensatz.rows gearbeitet (Gegenstand eines anderen Artikels). An dieser Stelle soll es Sichtbarkeitsregeln innerhalb von Datensätzen gehen — d.h. die Eingaben innerhalb eines Datensatzes wirken sich auf die Sichtbarkeit von Blöcken innerhalb des gleichen Datensatz-Eintrags aus. Um lokal begrenzt — innerhalb eines Datensatz-Eintrags — auf die “Geschwister” eines Blocks zuzugreifen, muss die self.siblings-Notation verwendet werden. Hierüber sind alle Blöcke innerhalb eines Datensatz-Eintrags genau so erreichbar wie normalerweise alle Blöcke über blocks.slug. Beispiel: 💡 Das Feld Unterlagen soll nur angezeigt werden, wenn Nein ausgewählt wurde. Beispiel-Code: self.siblings.documents_present.options.documents_present_true.selected Erklärung: Über self erhält man Zugriff auf den aktuellen (lokalen) Eintrag des Datensatzes. Innerhalb von self.siblings sind die Blöcke unter ihrem jeweiligen slug im Schema self.siblings.slug — also beispielsweise self.siblings.documents_present — erreichbar. Der Code self.siblings.documents_present.options.documents_present_true.selected liefert also genau dann true zurück (und schaltet damit den mit der Sichtbarkeitsregel belegten Block auf sichtbar), wenn die Option documents_present_true aus der Auswahl documents_present im jeweiligen Datensatz-Eintrag gerade ausgewählt ist. Hier Regel kopieren: self.siblings.[Slug Radio Block].options.[Slug Radio Option].selected

Zuletzt am 19. August aktualisiert