Insbesondere Formeln / Sichtbarkeiten und Regeln müssen bei der Verwendung innerhalb einer Tabelle anders (dynamisch) funktionieren. Entsprechend benötigt die Anwendung mehr Vorkenntnisse zum Thema.
Die grösse Herauforderung ist, dass sich die Tabelle und deren Inhalte verändert, verändern kann und somit die Elemente (z.B. Name) auf jeder Zeile wieder vorkommen. Daher wird die Tabellenstruktur (Zeilen/Spalten) beim Adressieren (Ansprechen) der Elemente verwendet.
Beispiel der Adressierung. Je nach Herausforderung gilt es die Syntax der Regel / Formel anzupassen.
tableVeranstaltungen | ||||
---|---|---|---|---|
c1 | c2 | c3 | c4 | |
r1 | datum | zeit von | zeit bis | anzahl |
r2 | datum | zeit von | zeit bis | anzahl |
etc. | datum | zeit von | zeit bis | anzahl |
Der Formel-Wizard unterstützt dich bei der Anwendung von Formeln bei Tabellen.
Die Spalten (col) Adressierung wird jedoch nicht vorgeschlagen und muss daher individuell ergänzt / angewendet werden. Siehe Beispiel.
Im Beispiel können bei einer Veranstaltung, mehrere Daten oder Zeitabschnitte erfasst werden. Es muss errechnet werden, wieviele Besucher insgesammt erwartet werden.
Die erwarteten Besucher sollen in einem Textfeld als Summe gezeigt werden. Dafür wird im Element "besucher_summe" eine Regel eingefügt.
Regel > Hauptaktion > setValue(sum(nodes("tableVeranstaltungsdaten//c4"))) - es wird nur die Hauptaktion erfasst, keine Bedingung.
In diesem Fall wird zudem über eine Sichtbarkeit, die Summe erst angezeigt, wenn dieses Element einen Wert hat. Zudem ist die Editierbarkeit auf FALSE gesetzt, damit die ausfüllende Person die Werte nicht verändern kann.
Spezialanforderung im Anwendugnsfall: Bedigung "ist eine der Tageszahlen 500, oder grösser" dann gelten bestimmte Voraussetzungen. Dazu wurde folgende Formel in einer Sichtbarkeitsregel verwendet.
Damit konnte geprüft werden, ob eine der über "nodes" angesprochenen Werte über 499 (also mindestens 500) ist.
Im folgenden Beispiel sollen sich die Elemente "Beträge" je nach Status der Anfrage unterschiedlich, dem Status entsprechend logisch verhalten (Betrag zugesagt, macht keinen Sinn, wenn noch kein Anfrag gestestellt wurde).
Aufgrund der unterschiedlichen Status, müssen mehrere Regeln gesetzt werden:
Die Logik der Regeln ist immer dieselbe. Als Adressierungsziel wird die Spalte verwendet (nicht die Element ID). Das Ziel ist mit "../" > "../c3" jeweils dieselbe Zeile (row) - im Gegensatz zum vorherigen Beispiel (mit // ).
Bedingung | |
---|---|
nodeValue(".") == "keine_Anfrage" | |
Hauptaktion | Inverse Aktion |
setEditable(node("../c3"), false) && setEditable(node("../c4"), false) && setApplicationRequired(false,false, node("../c1")) && setApplicationRequired(false,false, node("../c3")) && setApplicationRequired(false,false, node("../c4")) && setValue(node("../c3"), NULL) && setValue(node("../c4"), NULL) |
Da die Aktion nur 500 Zeichen zulässt, muss manchmal eine zweite Regel mit derselben Bedigung gesetzt werden.
Bedingung | |
---|---|
nodeValue(".") == "keine_Anfrage" | |
Hauptaktion | Inverse Aktion |
setValue(node("../c3"), null) || setValue(node("../c4"), NULL) |
Bedingung | |
---|---|
nodeValue(".") == "Anfrage_offen" | |
Hauptaktion | Inverse Aktion |
setEditable(node("../c3"), true) && setEditable(node("../c4"), false) && setApplicationRequired(true,true, node("../c1")) && setApplicationRequired(true,true, node("../c3")) && setApplicationRequired(false,false, node("../c4")) && setValue(node("../c4"), NULL) |
Bedingung | |
---|---|
nodeValue(".") == "Anfrage_folgt" | |
Hauptaktion | Inverse Aktion |
setEditable(node("../c3"), true) && setEditable(node("../c4"), false) && setApplicationRequired(true,true, node("../c1")) && setApplicationRequired(true,true, node("../c3")) && setApplicationRequired(false,false, node("../c4")) && setValue(node("../c4"), NULL) |
Bedingung | |
---|---|
nodeValue(".") == "Foerderung_zugesagt" | |
Hauptaktion | Inverse Aktion |
setEditable(node("../c3"), true) && setEditable(node("../c4"), true) && setApplicationRequired(true,true, node("../c1")) && setApplicationRequired(true,true, node("../c3")) && setApplicationRequired(true,true, node("../c4")) |
Bedingung | |
---|---|
nodeValue(".") == "Foerderung_abgelehnt" | |
Hauptaktion | Inverse Aktion |
setEditable(node("../c3"), true) && setEditable(node("../c4"), false) && setApplicationRequired(true,true, node("../c1")) && setApplicationRequired(true,true, node("../c3")) && setApplicationRequired(false,false, node("../c4")) |
Das entsprechende PlugIn (com.jaxfront.kaio.visualizer.TableColumnComboboxPlugin) muss auf dem System installiert sein.
Wenn in einer Tabelle/Wiederholung einzelne Werte erfasst werden (wiederholend ein einer Spalte) können diese in einen Folge-Element als Auswahl geführt werden.
Dazu wird im gewünschten Auwahlfeld der Elementtyp "PlugIn" verwendet und wie folgt konfiguriert.
Es müssen zwei Werte konfiguriert werden:
Im Beispiel werden in einen vorangehenden Schritt, 1 zu N Parzellen erfasst. Im gezeigten Schritt, sollen nur die vorgängig erfassten Parzellen zur Auswahl stehen.
Schritt 1 - Erfassen der Parzellen
Schritt 2 - Erfassen der Probebohrungen
Es stehen nur die vorher erfassten Parzellen zur Auswahl.
Lösung mit Position des Elementes in der Tabelle (welche Zeile, Row)
Dazu kann über eine Formel die Position (Zeile) ausgegeben werden. Im folgenden Beispiel wird mit
hochgezählt.
Alternativ, kann dies auch via CSS > counter(line) gelöst werden (https://www.w3schools.com/css/css_counters.asp).
Dies ist jedoch nur bedingt hilfreich, da der Wert nur angezeigt wird. Wird nicht übermittelt.
<h4>Zielsetzung <span class="zielsetzung-number"></span></h4> |
Die folgenden Zeilen CSS schreiben die Zeilennummer ins <span>-Tag. Legen Sie ein neues Formularelement vom Typ Anzeigetext an mit folgenden CSS-Zeilen:
<style> #JAX_FORM.JAX-MARKER .zielsetzung-daten.jax-isTable table.jax-serial-list>tbody{counter-reset:line} #JAX_FORM.JAX-MARKER .zielsetzung-daten.jax-isTable table.jax-serial-list>tbody>tr{counter-increment:line} #JAX_FORM.JAX-MARKER .zielsetzung-daten.jax-isTable table.jax-serial-list>tbody>tr span.zielsetzung-number:before{content:counter(line)} </style> |