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


c1c2c3c4
r1datumzeit vonzeit bisanzahl
r2datumzeit vonzeit bisanzahl
etc.datumzeit vonzeit bisanzahl

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.

Summe von zeilenweise erfassten Werten bilden

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.

  • mit sum() wird die Summe gebildet < es müssen Zahlenwerte sein.
  • mit NODES werden alle zutreffenden Node's (elemente) zusammengefasst die darin Adressiert werden
    • tableVeranstaltungen < muss die ID des Tabellenelementes sein
    • c4 bedeutete, die vierte Spalte (col 4). Achtung, wird die Struktur der Spalten verändert muss die Formel angepasst werden.

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.

max Abfrage

Spezialanforderung im Anwendugnsfall: Bedigung "ist eine der Tageszahlen 500, oder grösser" dann gelten bestimmte Voraussetzungen. Dazu wurde folgende Formel in einer Sichtbarkeitsregel verwendet.

  • max(nodeValues(nodes("tableVeranstaltungsdaten//c4"))) > 499

Damit konnte geprüft werden, ob eine der über "nodes" angesprochenen Werte über 499 (also mindestens 500) ist.

Regeln in der Tabelle

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 // ).

Regel 1

Bedingung
nodeValue(".") == "keine_Anfrage"
HauptaktionInverse 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)
  • solange der Status "keine_Anfrage" gesetzt ist, sind die Beträge nicht editierbar (keine Eingabe möglich)
  • solange der Status "keine_Anfrage" gesetzt ist, ist die Angabe "Förderstelle" nicht Pflicht
  • solange der Status "keine_Anfrage" gesetzt ist, sind die Beträge nicht Pflichtfeld
  • wenn der Status auf "keine_Anfrage" gesetzt wird, werden die Beträge gelöscht / (auf NULL) gesetzt.

Regel 2

Da die Aktion nur 500 Zeichen zulässt, muss manchmal eine zweite Regel mit derselben Bedigung gesetzt werden.

Bedingung
nodeValue(".") == "keine_Anfrage"
HauptaktionInverse Aktion
setValue(node("../c3"), null) || setValue(node("../c4"), NULL)

Regel 3

Bedingung
nodeValue(".") == "Anfrage_offen"
HauptaktionInverse 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)

Regel 4

Bedingung
nodeValue(".") == "Anfrage_folgt"
HauptaktionInverse 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)

Regel 5

Bedingung
nodeValue(".") == "Foerderung_zugesagt"
HauptaktionInverse Aktion
setEditable(node("../c3"), true) && setEditable(node("../c4"), true) && setApplicationRequired(true,true, node("../c1"))  && setApplicationRequired(true,true, node("../c3")) && setApplicationRequired(true,true, node("../c4"))

Regel 6

Bedingung
nodeValue(".") == "Foerderung_abgelehnt"
HauptaktionInverse Aktion
setEditable(node("../c3"), true) && setEditable(node("../c4"), false) && setApplicationRequired(true,true, node("../c1"))  && setApplicationRequired(true,true, node("../c3")) && setApplicationRequired(false,false, node("../c4"))

In Tabelle erfasste Werte in einem Auswahlfeld verwenden

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:

  1. Die Tabelle (tableName) in welcher die erfassten Daten sind
  2. Die Spalte, in welcher sich das Feld mit den Daten befindet (colName).

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.


Die Position in der Tabellenzeile anzeigen (Zeilennummer)

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

  • position(node("../.")) + ". Situationsplan Zelt"

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.

 

  1. Der Tabelle eine CSS-Klasse geben, hier im Beispiel zielsetzung-daten.
  2. In der Tabelle eine Zeile vom Typ Anzeigetext anlegen & ein leeres <span>-Tag hinzufügen:
<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>
  • Keine Stichwörter