Komplexe Validierungsfälle

Sollen Eingaben in einem Assistenten geprüft werden, bei denen sich die Prüflogik nicht über einfache Konfiguration von Komponenten bewerkstelligen lässt, kommen Validierungsregeln ins Spiel. Sie ermöglichen es u.a. mehrere Eingabefelder in Bezug zu setzen, komplexere Muster zu prüfen, Prüfziffern zu berechnen oder auch Datumseingaben genauer zu überprüfen.

Über die Schaltfläche „Experten-Modus für lokale Regeln“ kann eine solche Validierungsregel hinterlegt werden.

Ansicht der Schaltfläche für Validierungsregeln

Dort verbirgt sich zum einen ein schlichter Eingabebereich zum Hinterlegen von einzelnen oder mehreren Validierungsregeln, zum anderen ein Abschnitt zur Definition auftretender Fehlermeldungen.

Ansicht der Eingabemaske für Validierungsregeln

Fehlermeldungen

Die Definition der Fehlermeldungen erfolgt über die Angabe eines Textschlüssels, um bei zukünftigen Softwareversionen eine sprachneutrale Validierung mit sprachspezifischen Fehlermeldungen versehen zu können.

Ansicht der Eingabe von Fehlermeldungen

Validierungsregeln

Die Validierungsregeln gleichen stark den Panel-Aktivierungsregeln. D. h. sie bestehen auch aus einer Package-Deklaration, ggf. Import-Angaben und den eigentlichen Regeln in der Form:

rule "Regelname"
when
 <Bedingungen>
then
 <Konsequenz>
end

Die Bedingungen können dabei wie bei den Aktivierungsregeln verstanden werden: Es wird z. B. direkt definiert, dass die Regel nur zutrifft, wenn ein mehrzeiliges Textfeld zu viele Zeilen enthält:

rule "Zeilenanzahlbeschränkung"
when
  Panel(identifier == "PANELNNAME",
  $VARIABLENNAME:getInputComponent("Textfeld2"), $VARIABLENNAME != null, $VARIABLENNAME.getStringValue() !=null,
  org.apache.commons.lang3.StringUtils.countMatches($VARIABLENNAME.getStringValue(), '\n') > 9)
then
  RuleValidationError error = new RuleValidationError("Begrenzt auf 10 Zeilen");
  insert(error);
end

Der Konsequenzteil enthält dann nur das Erstellen und Registrieren der Fehlermeldung:

RuleValidationError error = new RuleValidationError("<Textschlüssel>");
insert(error);

Alternativ kann der Bedingungsteil dazu genutzt werden, lediglich die zu prüfenden Felder zugreifbar zu machen und im Konsequenzteil die eigentliche Prüfung durchzuführen:

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
import function de.formsolutions.metaform.rules.util.DateUtil.isAfter
import java.util.Date
import java.util.Calendar

rule "Altersprüfung 18 Jahre"
when
  Panel(identifier == "PANELNAME", $VARIABLENNAME:getInputComponent("KOMPONENTENNAME"), $VARIABLENNAME != null)
then
  Calendar calendar = Calendar.getInstance();
  calendar.set(Calendar.YEAR, 1999);
  calendar.set(Calendar.MONTH, 1);
  calendar.set(Calendar.DAY_OF_MONTH, 1);
 Date date = calendar.getTime();

 if(isAfter($VARIABLENNAME, date)) {
    RuleValidationError rve = new RuleValidationError("FEHLERMELDUNG");
    insert(rve);
  }
end

  Hinweis: Bitte beachten Sie, eine Besonderheit der Validierungsregeln ist, dass nur auf das aktuelle Panel zugegriffen werden kann!

Auswertung der Validierungsregeln

Die Validierungsregeln werden immer dann ausgewertet, wenn man auf dem betroffenen Panel "weiter" klickt. Sollte ein Validierungsfehler auftreten, so verbleibt man auf demselben Panel und der Fehlertext wird oben auf der Seite angezeigt. Ein Fortsetzen des Ausfüllvorgangs ist nur nach Beseitigung der Fehlerursache möglich.

Ansicht der Fehlermeldung im Assistenten


Regelvorlagen

Jeder Expertenmodus (Validierungsregelbereich, Panelregelbereich, Komponentenregelbereich) enthält eine Sidebar die sogenannte "Regelvorlagen" für den Assistentenersteller bereithält. Über die Schaltfläche mit dem Pfeil öffnet sich die Sidebar. In den jeweiligen Rubriken sind thematisch Regelvorlagen eingepflegt.

Folgende Rubriken beinhalten die Regelvorlage:

  • Datum
    Hier sind Regelvorlagen rund um das Thema Datumsberechnung und Datumsvalidierung enthalten. Der Inhalt ändert sich je nach Expertenmodusbereich. Wird angezeigt bei Validierungsregelexpertenmodus, Panelregelexpertenmodus und Komponentenregelexpertenmodus.

  • Vorbefüllung
    Hier sind Regelvorlagen rund um das Thema Vorbefüllung enthalten. Der Inhalt ändert sich je nach Expertenmodusbereich. Wird angezeigt bei Panelregelexpertenmodus und Komponentenregelexpertenmodus.

  • Verwendungszweck
    Hier sind Regelvorlagen rund um das Thema Verwendungszweck enthalten. Der Inhalt ändert sich je nach Expertenmodusbereich. Wird angezeigt bei Panelregelexpertenmodus und Komponentenregelexpertenmodus.

  • Berechnung
    Hier sind Regelvorlagen rund um das Thema Berechnungen enthalten. Der Inhalt ändert sich je nach Expertenmodusbereich.  Wird angezeigt bei Panelregelexpertenmodus und Komponentenregelexpertenmodus.

  • Sonstiges
    Hier sind Regelvorlagen rund um das Thema sonstiges enthalten. Der Inhalt ändert sich je nach Expertenmodusbereich. Wird angezeigt bei Validierungsregelexpertenmodus, Panelregelexpertenmodus und Komponentenregelexpertenmodus.

  • Multipanel
    Hier sind Regelvorlagen rund um das Thema Multipanel enthalten. Der Inhalt ändert sich je nach Expertenmodusbereich. Wird angezeigt bei Panelregelexpertenmodus und Komponentenregelexpertenmodus.

  • Dateiformat
    Hier sind Regelvorlagen rund um das Thema Dateiformatseinschränkungen enthalten. Wird angezeigt bei Validierungsregelexpertenmodus.

  • Regelvorschläge
    Dieser Bereich enthält eine Verknüpfung zu dem Form-Solutions Support-Assistenten. Über diesen können Verbesserungsvorschläge sowie Regelvorlagenvorschläge an Form-Solutions versendet werden. Wird angezeigt bei Validierungsregelexpertenmodus, Panelregelexpertenmodus und Komponentenregelexpertenmodus.

Ansicht der Sidebar der Regelvorlagen im Expertenmodus

Über einen "Linksklick" auf eine Regelvorlage kann diese in den Expertenmodus eingefügt werden. Hierbei ordnet sich die Regelvorlage bei bereits bestehenden Code an die entsprechende Stelle an. Imports werden beispspielsweise an den Anfang des bestehenden Codes hinzugefügt.

Ansicht einer Regelvorlage einfügen in den Expertenmodus

Über einen "Rechtsklick" auf eine Regelvorlage erscheint jeweils ein Kontextmenü, mit dem eine Beschreibung der Regelvorlage sowie eine Vorschau des Codes angezeigt werden kann.

Ansicht der Regelbeschreibung und Regelvorschau der Regelvorlagen


Inhaltsassistenzsystem

Der Expertemodusbereich der Validierungsregeln ist mit einem sogenannten Inhaltsassistenzsystem ausgestattet. Dieser dient zur Erleichterung der manuellen Eingabe eines erzeugten bzw. neu erstellten Codes mit Hilfe integrierten Bausteine in einer Vorschlagsliste mittels eines Klicks einzufügen. Weiterhin werden alle vom Benutzer definierten Bezeichnungen im Assistenten über die Vorschlagsliste angezeigt.

Hinweis:
Bitte beachten Sie, das Inhaltsassistenzsystem führt nur neue/geänderte Panel- und Komponentenbezeichnungen auf, wenn der Assistent zuvor gespeichert wurden.

Die Vorschlagsliste des Inhaltsassistenzsystems beinhaltet Bausteine mit folgenden Kategorien:

  • snippets
    Snippets sind kleine einfügbare Code-Schnipsel die für den Grundaufbau einer Regel benötigt werden.

  • Datentyp
    Die verschiedenen Datentypen die dem Anwender zur Verfügung stehen.

  • Funktion
    Eine Java-Methode die zum Beispiel zum Verarbeiten von Feldinputs benötigt werden.

  • Regelbau
    Schlagwörter und Ausdrücke die in fast allen Regeln verwendet werden und zum Grundstock von Drools gehören.

  • Drools
    Spezielle Drools-Syntax

  • Komponente im Assistent
    Zeigt alle Komponenten die Assistenten verbaut sind.

  • Komponente aktuelles Panel
    Zeigt auf, dass die Komponenten im aktuellen Panel sich befindet.

  • Panel im Assistenten
    Zeigt alle Panels auf die im Assistenten verbaut sind.

  • dieses Panel
    Zeigt auf, dass das Panel im aktuellen Panel sich befindet.

  • Casting
    Umwandlung eines Datentyps in einen anderen.

Expertenmodus mit der Vorschlagsliste des Inhaltsassistenzsystems

Suche und Ersetzen

Mittels der Tastenkombination Strg + F wird im Expertenmodus die sogenannte „Suche und Ersetzen-Funktion“ eingeblendet.  Über die Felder „Search for“ können nach bestimmten Wörtern im Code gesucht und mittels des Felds „Replace with“ ersetzt werden.

Expertenmodus mit Suchen und Ersetzenfunktion

Tags: