Den Ablauf mit Bedingungen steuern

Bedingungen können verwendet werden, um den Ablauf durch ein IEG-Script zu steuern. Das Durchlaufen eines IEG-Scripts erfolgt linear von Seite zu Seite innerhalb des Scripts, es sei denn, Sie als Scriptautor haben den Ablauf geändert. Der wichtigste Grund, warum ein Ablauf geändert wird, ist der, dass Benutzer keine unnötigen oder unwichtigen Fragen beantworten müssen. Die Antworten des Benutzers sollen verwendet werden, um zu bestimmen, welche Fragen sich auf diesen Benutzer beziehen. Sie haben zum Beispiel eine Seite, auf der detaillierte Informationen zum tertiären Bildungsabschluss einer Person erfasst werden. Diese Seite soll keinem Benutzer angezeigt werden, der bereits angegeben hat, dass er nie eine Schule im tertiären Bildungsbereich besucht hat. Um dies zu erreichen, können Sie eine oder mehrere Seiten in ein Bedingungselement einschließen, um anzugeben, unter welchen Bedingungen diese Seite angezeigt werden soll. Beispiel:

Abbildung 1. Bedingungselement
<condition expression="attendedThirdLevel==true">
  <question-page id="ThirdLevelDetailsPage">  
    ...
  </question-page>
</condition>

Wenn der Benutzer auf der Seite vor dieser Bedingung auf die Schaltfläche "Weiter" klickt, wird der Ausdruck "attendedThirdLevel==true" ausgewertet. Wenn die Auswertung "true" ergibt, wird die Seite in der Bedingung angezeigt. Wenn die Auswertung jedoch "false" ergibt, wird die Seite übersprungen und die Seite nach dem Bedingungselement angezeigt.

In diesem Beispiel ist "attendedThirdLevel" die ID der Kontrollfrage, die in diesem Script zuvor gestellt wurde. Die Antwort auf diese Frage wird in der Auswertung des Ausdrucks verwendet. Wenn Sie stattdessen den Wert eines Attributs im Datenspeicher verwenden möchten, müssen Sie nur ein Präfix mit dem Namen der Entität voranstellen, in der es enthalten ist (z. B. "Person.attendedThirdLevel").

Bei der Verwendung von Ausdrücken oder Bedingungen (im Prinzip an jeder Stelle) müssen Sie sicherstellen, dass alle im Ausdruck verwendeten Attribute einen echten Wert haben, sobald sie ausgewertet werden. Attribute im Datenspeicher haben standardmäßig den Wert Null, bis ein Wert für sie festgelegt wird. Der Wert Null wird so lange beibehalten, bis der Benutzer einen Wert für die entsprechende Antwort eingibt oder auswählt.

Es gibt in der Regel zwei Möglichkeiten sicherzustellen, dass Attribute einen Wert haben, bevor sie in Ausdrücken verwendet werden: Legen Sie Fragen, die ausgefüllt werden sollen, als obligatorisch fest, oder legen Sie Standardwerte in Ihrem Datenspeicherschema für Fragen fest. (In manchen Fällen können Sie auch das Element "set-attribute" verwenden, siehe set-attribute.)

Bedingungen können eine beliebige Kombination aus Seiten (einschließlich Zusammenfassungsseiten), Schleifen und anderen Bedingungen enthalten. Zum Beispiel:

Abbildung 2. Verschachtelte Bedingung
<condition expression="attendedThirdLevel==true">
  <question-page id="ThirdLevelDetailsPage">
    ...        
  </question-page>
  <condition expression="hasMasters==true">
    <question-page id="MastersDetailsPage">
      ...        
    </question-page>
  </condition>
</condition>

"ThirdLevelDetailsPage" wird nur angezeigt, wenn die Antwort "attendedThirdLevel" den Wert "true" hat, und "MastersDetailsPage" wird nur angezeigt, wenn "attendedThirdLevel" den Wert "true" und "hasMasters" auch den Wert "true" hat.

Es ist auch möglich, eine angepasste Funktion einer Bedingung oder eines anderen Ausdrucks aufzurufen. Die Funktion erhält automatisch Informationen, um auf den Datenspeicher zuzugreifen, d. h. die Stammentitäts-ID, die Scriptausführungs-ID und die aktuelle Entitäts-ID (wenn sich die Bedingung in einer Schleife befindet). Beachten Sie, dass angepasste Funktionen mit einem Nebeneffekt (z. B. Auffüllen von Antworten im Datenspeicher) nicht in solchen Ausdrücken verwendet werden sollten, da sie möglicherweise nicht ausgewertet werden, bevor der Seiteninhalt geladen wurde.

Die angepasste Funktion isNotNull kann in IEG direkt verwendet werden, damit Ausdrücke Null-Werte als Parameter behandeln. Um beispielsweise das Geburtsdatum einer Person zu prüfen, muss ggf. zunächst sichergestellt werden, dass ein Wert vorhanden ist:

Abbildung 3. Angepasste Funktion "isNotNull" verwenden
<validation expression="
      isNotNull(Person.dateOfBirth)
      and isNotNull(Person.today)
      and (subDates(Person.dateOfBirth, Person.today) < 0)">
    <message id="DateOfBirthValidation">
      Your date of birth must be before today
    </message>
</validation>