Mithilfe von Ausdrücken können Sie in einem Survey das Standardverhalten von Antworten steuern. Mithilfe von Ausdrücken in der Spalte relevant können Sie festlegen, dass eine Frage oder eine Gruppe von Fragen basierend auf vorherigen Antworten ausgeblendet oder angezeigt wird. Wenn eine Frage durch einen Ausdruck in der Spalte relevant ausgeblendet wird, werden keine Daten für diese Frage gesendet.
Hinweis:
Wenn in Survey123 Mobile und der mobilen App eine Antwort für eine Frage eingegeben wird, die später aufgrund eines "relevant"-Ausdrucks ausgeblendet wird, wird die Antwort gelöscht. Wenn die Frage wieder relevant wird, muss eine neue Antwort eingegeben werden. In der Web-App wird die Antwort nicht gelöscht. Wenn die Frage also wieder relevant wird, wird die zuvor eingegebene Antwort verwendet.
Sie können Ausdrücke auch für die Spalte readonly übernehmen. Die Eingabe für eine Frage oder Gruppe kann dann je nach Ergebnis des Ausdrucks deaktiviert werden. Die Spalte required unterstützt ebenfalls Ausdrücke, die bewirken, dass der Benutzer eine Frage im Survey nur unter bestimmten Bedingungen beantworten muss.
Hinweis:
Ausdrücke des Typs "readonly" werden in der Web-App nicht unterstützt.
Auf vorherige Fragen muss in Ausdrücken immer mit dem Format ${field_name} Bezug genommen werden.
Sichtbarkeit von Fragen
Sie können eine Frage mit einem Ausdruck unter Verwendung der Spalte body::esri:visible aus der Ansicht ausblenden. Diese Spalte blendet die Frage aus, wenn der enthaltene Ausdruck nicht mit "true" ausgewertet wird, und behält gleichzeitig den Inhalt der Frage bei. Der Ausdruck ${edit_location}='yes' führt beispielsweise dazu, dass die Frage nur angezeigt wird, wenn die Frage edit_location auf yes festgelegt ist.
Dieses Verhalten ist vergleichbar mit dem der Spalte relevant. Beide Spalten blenden eine Frage aus, bis der Ausdruck in der Spalte mit "true" ausgewertet wird. Der Hauptunterschied besteht darin, dass body::esri:visible den Wert einer durch den Ausdruck ausgeblendeten Frage nicht löscht und die vorhandenen Werte an den Feature-Layer übermittelt. Verwenden Sie die Spalte relevant anstelle von body::esri:visible, wenn Sie sicherstellen möchten, dass für die Frage nur dann Werte berechnet oder gespeichert werden, wenn die Frage relevant ist.
Wenn die Spalte body::esri:visible oder die Spalte relevant zum Steuern der Sichtbarkeit von Fragen verwendet wird, werden Erforderlichkeiten, Standardwerte, Beschränkungen und Eingabemasken nur dann angewendet, wenn die Frage sichtbar ist.
Sie können die Sichtbarkeit von Fragen auch mithilfe des Fragetyps "hidden" und des Aussehens "hidden" steuern. Diese können jedoch nicht mit einem Ausdruck gesteuert werden.
Hinweis:
Bild-, Audio- und Dateifragen können nicht mit der Spalte body::esri:visible ausgeblendet werden.
Einfache Ausdrücke
Die beste Verwendung solcher Ausdrücke besteht darin, das Verhalten oder die Sichtbarkeit der Frage zu ändern, wenn nicht zuvor eine bestimmte Antwort gegeben wurde. Mit dem folgenden Ausdruck wird beispielsweise überprüft, ob die Antwort auf die vorherige Frage "true" lautet:
${previous_question} = 'true'
Mit dem folgenden Beispiel wird überprüft, ob die Antwort auf die vorherige Frage größer oder gleich 100 war:
${previous_question} < 100
Die Werte in Fragen vom Typ select_multiple werden anders gespeichert als in anderen Fragetypen: Jede ausgewählte Antwort wird in der Reihenfolge der Auswahl (getrennt durch Kommas) aufgeführt. Wenn beispielsweise die Antworten A und B in dieser Reihenfolge ausgewählt werden, wird die Antwort als "A,B" dargestellt. Um in einem Ausdruck eine Frage vom Typ "select_multiple" zu verwenden, müssen Sie die Funktion selected verwenden. Im folgenden Beispiel wird überprüft, ob der Benutzer die vorherige Frage mit A beantwortet hat, und es funktioniert unabhängig von anderen ausgewählten Antworten:
selected(${previous_question}, 'A')
Mit der Funktion count-selected wird die Anzahl an Optionen ermittelt, die in einer Frage vom Typ "select_multiple" ausgewählt wurden, und eine Zahl bereitgestellt, die als Operator verwendet wird. Mit dem folgenden Beispiel wird überprüft, ob für die vorherige Frage mehr als zwei Antwortmöglichkeiten ausgewählt wurden:
count-selected(${previous_question}) > 2
Sie können die Funktion count-selected als Beschränkung für Bild- oder Dateifragen mit dem Aussehen multiline verwenden, um die Anzahl der gesendeten Dateien zu steuern.
Mathematischer Ausdruck
Im folgenden Beispiel werden mehrere Operatoren und Fragen kombiniert:
${previous_question} + ${other_previous_question} <= 100
Bei Verwendung mathematischer Operatoren darauf müssen Sie möglicherweise Werte in Zahlen umwandeln. Im vorherigen Beispiel wurde davon ausgegangen, dass es sich bei previous_question und other_previous_question um ganze Zahlen oder Dezimalzahlen handelt. Wenn es sich bei den Fragetypen jedoch um Zeichenfolgen handelt, können Sie sie wie folgt umwandeln:
int(${previous_question}) + int(${other_previous_question}) <= 100
Mathematische Ausdrücke können auch auf Fragen vom Typ "date" angewendet werden, die als Unixzeit gespeichert werden, der seit dem 1. Januar 1970 verstrichene Zeitraum in Millisekunden. Mit dem folgenden Ausdruck wird eine Frage nur dann angezeigt, wenn die Antwort auf die vorherige Frage mehr als zwei Wochen vor dem heutigen Tag gegeben wurde:
if( ${previous_question}='',false,today() - ${previous_question} > 1000*60*60*24*15)
Reguläre Ausdrücke
Bei einem regulären Ausdruck handelt es sich um eine Folge von Zeichen, die verwendet wird, um in Zeichenfolgen Muster abzugleichen. Wenn das Muster in Survey123 übereinstimmt, gibt der Ausdruck "true" zurück, andernfalls, wenn das Muster nicht übereinstimmt, gibt der Ausdruck "false" zurück.
Reguläre Ausdrücke können anhand der Unterausdrücke in der folgenden Tabelle erstellt werden:
| Unterausdruck | Abgleichen |
|---|---|
| ^ | Entspricht dem Zeilenanfang. |
| $ | Entspricht dem Zeilenende. |
| . | Entspricht jedem beliebigem Einzelzeichen außer einem Zeilenumbruch. |
| [...] | Entspricht jedem beliebigem Einzelzeichen in Klammern. |
| [^...] | Entspricht jedem beliebigem nicht in Klammern eingeschlossenen Einzelzeichen. |
| (re) | Gruppiert reguläre Ausdrücke und speichert übereinstimmenden Text. |
| (?: re) | Gruppiert reguläre Ausdrücke, ohne übereinstimmenden Text zu speichern. |
| a| b | Entspricht entweder a oder b. |
| \A | Anfang der gesamten Zeichenfolge. |
| \b | Entspricht außerhalb von Klammern Wortgrenzen, innerhalb von Klammern der Rücktaste (0x08). |
| \B | Entspricht Nicht-Wortgrenzen. |
| \d | Entspricht Ziffern. Ist gleichwertig mit [0 bis 9]. |
| \D | Entspricht Nicht-Zahlen. |
| \G | Entspricht dem Punkt, an dem die letzte Entsprechung aufgehört hat. |
| \n, \t, \e usw. | Entspricht neuer Zeile, Tabstopp, Escape usw. |
| \N | Rückbezug zur Erfassung von Gruppennummer N. |
| re* | Entspricht 0 oder mehr Vorkommnissen des vorherigen Ausdrucks. |
| re+ | Entspricht 1 oder mehr Vorkommnissen des vorherigen Ausdrucks. |
| re? | Entspricht 0 oder 1 Vorkommnis des vorherigen Ausdrucks. |
| re{ n} | Entspricht der genauen Anzahl von Vorkommnissen des vorherigen Ausdrucks, der anstelle von n definiert wurde. |
| re{ n,} | Entspricht n oder mehr Vorkommnissen des vorherigen Ausdrucks. |
| re{ n, m} | Entspricht mindestens der Anzahl von Vorkommnissen, die von n definiert sind, und höchstens der von m definierten Anzahl im vorherigen Ausdruck. |
| \s | Entspricht einem Leerraumzeichen: Tabulator, Zeilenvorschub, Seitenvorschub, Wagenrücklauf oder Leerzeichen. |
| \S | Entspricht einem Nicht-Leerzeichen |
| \w | Entspricht einem Wortzeichen. |
| \W | Entspricht einem Nicht-Wortzeichen. |
| \z | Ende der gesamten Zeichenfolge. |
| \Z | Ende der gesamten Zeichenfolge außer dem zulässigen finalen Zeilenabschluss. |
Sie können reguläre Ausdrücke in Spalten verwenden, die es zulassen, dass Ausdrücke das Verhalten einer Frage ändern, es sei denn, die von einer anderen Frage bereitgestellte Zeichenfolge weist ein bestimmtes Format auf. Wenn das folgende Beispiel in die Spalte vom Typ relevant eingefügt wird, wird eine Frage nur dann angezeigt, wenn die Antwort auf eine andere Frage aus einem Buchstaben bestand:
regex(${question},'[A-Za-z]')
Wenn das folgende Beispiel in die Spalte choice_filter einer Frage vom Typ "select_one" für Straßennamen eingefügt wird, wird nur eine Auswahl von Straßen angezeigt, die in der Liste citystreets enthalten ist, die dem Ortsnamen entspricht, der in einer früheren Frage mit dem Namen city ausgewählt wurde:
regex(citystreets,${city})
Weitere Beispiele zur Verwendung eines regulären Ausdrucks zum Hinzufügen einer Beschränkung zu einer Survey-Frage finden Sie unter Formeln.
Bedingungsausdrücke
Ein Bedingungsausdruck wird verwendet, um festzustellen, ob eine Anweisung (Bedingung) den Wert "true" oder "false" zurückgibt, und für jeden Fall einen festgelegten Wert zurückzugeben, wie im Folgenden beschrieben:
if(condition, value if true, value if false)
Wenn im untenstehenden Beispiel die Antwort auf question_one "Ja" lautet, lautet die Antwort auf die aktuelle Frage ebenfalls "Ja". Wenn die Antwort auf question_one nicht "Ja" lautet, lautet die Antwort auf die aktuelle Frage "Nein":
if(selected(${question_one}, 'yes'), 'yes', 'no')
In einer Bedingung können zwei Fragen verwendet werden. Wenn im folgenden Beispiel die Antwort sowohl auf question_one als auch auf question_two "Ja" lautet, lautet die Antwort auf die aktuelle Frage ebenfalls "Ja":
if(selected(${question_one}, 'yes') and selected(${question_two}, 'yes'), 'yes', 'no')
Wenn im folgenden Beispiel die Antwort auf question_one oder question_two "Ja" lautet, lautet die Antwort auf die aktuelle Frage ebenfalls "Ja":
if(selected(${question_one}, 'yes') or selected(${question_two}, 'yes'), 'yes', 'no')
Bedingungsausdrücke können auch geschachtelt werden. Es ist jedoch wichtig, immer sowohl einen Wert für "true" als auch für "false" anzugeben. Wenn im folgenden Beispiel die Antwort auf question_one nicht "Ja" lautet, wird question_two ausgewertet. Lautet die Antwort auf question_two ebenfalls nicht "Ja", wird question_three ausgewertet. Wenn die Antworten auf question_one, question_two und question_three nicht "Ja" lauten, lautet die Antwort auf die Frage mit dieser Anweisung "Nein".
if(selected(${question_one}, 'yes'), 'yes', if(selected(${question_two}, 'yes'), 'yes', if(selected(${question_three}, 'yes'), 'yes', 'no')))