Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021

Die Seite wird erstellt Heinz Weise
 
WEITER LESEN
Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Expertenmodus
zuletzt bearbeitet von Form-Solutions GmbH

am 19.10.2021
Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

Inhaltsverzeichnis
Basis-Paket/Importierungen & Regelnamen ..................................................................................................................... 4
  Basis-Paket ........................................................................................................................................................................ 4
  Importierungen ................................................................................................................................................................... 4
  Regelname .......................................................................................................................................................................... 5
When-Teil .............................................................................................................................................................................. 6
  Paneldefinition .................................................................................................................................................................... 6
  Verknüpfungen und Definitionen ...................................................................................................................................... 7
  Komponentendefinition ...................................................................................................................................................... 8
  Ermittlung eines Feldwertes ............................................................................................................................................. 8
Then-Teil ............................................................................................................................................................................... 9
  Panelfeld mit einem Wert vor befüllen ............................................................................................................................ 9
  Komponenten mit einem neuen Wert laden ................................................................................................................... 9
Zusätzliche Features ......................................................................................................................................................... 10
  no-loop .............................................................................................................................................................................. 10
Regelvorlagen ..................................................................................................................................................................... 10
Inhaltsassistenzsystem ...................................................................................................................................................... 12
  Suche und Ersetzen ........................................................................................................................................................ 13
Berechnungsregel .............................................................................................................................................................. 14
  Panelübergreifende Berechnung ................................................................................................................................... 14
  Komponenten Berechnung in einem Panel .................................................................................................................. 15
  Rundungen der Dezimalzahlen ..................................................................................................................................... 15
Multipanelberechnung ....................................................................................................................................................... 16

                         Page 2 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

Der „Expertenmodus“ ist für Anwender mit Java(grund)kenntnissen gedacht um außerhalb der „grafischen
Editoren“ weitere Regeln/Fachlogik zu definieren. Jeder grafische Regeleditor beinhaltet einen Expertenmodus.
Dieser kann über die Schaltfläche „Expertenmodus“ geöffnet werden. Bei jeder Regel, die über den grafischen
Regeleditor definiert wird, wird automatisch im Expertenmodus einen Code erzeugt. Dieser Code kann nach Bedarf
im Expertenmodus angepasst/erweitert/neu erstellt werden.

  Jede Expertenregel (Aktivierungsregeln und Berechnungsregeln) verfügt über eine „Standardstruktur“, welche
aus folgendem Pseudocode abgeleitet werden kann:

rule ""
when
 
then
 
end

          Hinweis:

         1. Alle durch Größer-/Kleinerzeichen kenntlich gemachte Bereiche müssen ersetzen werden.
         2. Die Einrückungen sowie Leerzeichen spielen keinerlei Rolle im Code und sind nur zur besseren
            Übersicht so dargestellt.

  Nachfolgend wird die Standardstruktur, sowie zusätzliche Features, im Einzelnen erläutert:

   •   Basis-Paket/Importierungen & Regelnamen
   •   When-Teil
   •   Then-Teil
   •   Zusätzliche Features

                Page 3 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

Basis-Paket/Importierungen & Regelnamen
Basis-Paket
In jedem Bereich der Expertenregeln (Panel-/Komponentenregel) müssen bei einer Definition jeweils folgende
Einträge einmalig vorgenommen werden.

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*

  Werden beispielsweise mehrere Panelregeln auf demselben Panel definiert, muss die obige Definition nur
einmalig vorgenommen werden. Jedoch werden eine Panel- und Komponentenregel definiert, müssen beide dieser
Bereiche über das Paket und Importierungen verfügen.

Importierungen
Folgende Importierungen können beispielsweise bei Bedarf hinzugefügt werden:

  Diese Importierungen müssen in folgender Form dargestellt werden.

import function de.formsolutions.metaform.rules.util.Util.

  Die in der nachfolgenden Tabelle genannten Bezeichnungen wie beispielsweise „$Anzahl“ sind Variablen, die im
Vorfeld benannt werden müssen.

MathUtil
Funktionsname                        Beschreibung                                Beispiel
apply                                Dem im ersten Parameter angegeben           apply( $ Gesamt, add( $ Preis1, $ Preis2))
                                     Objekt wird der im zweiten Parameter
                                     angegebene Wert zugewiesen.
add                                  Alle gültigen Parameter werden              apply( $ Gesamtanzahl, add( $ Anzahl, 1,
                                     aufsummiert                                 3))
subtract                             Der zweite Parameter wird vom ersten        apply( $ GesamtGebuehr,
                                     subtrahiert.                                subtract( $ Gebuehr, $ Rabatt))
multiply                             Alle gültigen Parameter werden              apply( $ Gesamtpreis, multiply( $ Anzahl,
                                     multipliziert.                              $ Einzelpreis))
divide                               Der erste Parameter wird durch den          apply( $ Gesamtpreis,
                                     zweiten dividiert.                          divide( $ Gesamtpreis, $ Anzahl))
min                                  Die kleinste Zahl wird zurückgeliefert.     apply( $ Gesamtpegel, min( $ Pegel1,
                                                                                 $ Pegel2))
max                                  Die größte Zahl wird zurückgeliefert.       apply( $ Gesamtpegel, max( $ Pegel1,
                                                                                 $ Pegel2))
fallback                             Sollte der erste Wert leer sein, wird der   apply( $ Gesamtsteuer, fallback( $ MWSt,
                                     zweite zurückgeliefert.                     0.19))
round                                Runde den ersten Wert auf so viele          apply( $ Gesamt, round( $ Gesamtpreis,
                                     Stellen, wie im zweiten Parameter           2))
                                     angegeben.

DateUtil

Diese Importierung muss vorangestellt werden:

import function de.formsolutions.metaform.rules.util.DateUtil.
import org.joda.time.LocalDate
Funktionsname                        Beschreibung                                Beispiel
isAfter                              Wert wird geprüft, ob dieser nach einem     isAfter(new Date(),
                                     anderen Wert liegt.                          $ VARIABLENNAME0)
isBefore                             Wert wird geprüft, ob dieser vor einem      isBefore(new Date(),
                                     anderen Wert liegt.                          $ VARIABLENNAME0)

                Page 4 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

isEqual                                Wert wird geprüft, ob dieser gleich ist mit isEqual( $ VARIABLENNAME0,
                                       einem anderen Wert.                          $ VARIABLENNAME1)
isBetween                              Wert muss zwischen zwei anderen              isBetween( $ VARIABLENNAME, new
                                       Werten liegen.                               LocalDate().minusYears(64), new
                                                                                    LocalDate().minusYears(18))
computeDaysBetween                     Prüft die Länge zwischen zwei                computeDaysBetween( $ VARIABLENNAME0,
                                       angegebenen Werten in Tagen.                 new Date())
computeWeeksBetween                    Prüft die Länge zwischen zwei                computeWeeksBetween( $ VARIABLENNAME0,
                                       angegebenen Werten in Wochen.                new Date())
computeMonthsBetween                   Prüft die Länge zwischen zwei                computeMonthsBetween( $ VARIABLENNAME0,
                                       angegebenen Werten in Monaten.               new Date())
computeYearsBetween                    Prüft die Länge zwischen zwei                computeYearsBetween( $ VARIABLENNAME0,
                                       angegebenen Werten in Jahren.                new Date())
isPersonOlderThan                      Wert wird geprüft, ob er höher ist als ein   isPersonOlderThan( $ VARIABLENNAME0,
                                       anderer Wert                                 ALTERSVARIABLE)
isMonday                               Prüft, ob der Wert ein Montag ist.           if(isMonday($VARIABLENNAME0))
isTuesday                              Prüft, ob der Wert ein Dienstag ist.         if(isTuesday($VARIABLENNAME0))
isWednesday                            Prüft, ob der Wert ein Mittwoch ist.         if(isWednesday($VARIABLENNAME0))
isThursday                             Prüft, ob der Wert ein Donnerstag ist.       if(isThursday($VARIABLENNAME0))
isFriday                               Prüft, ob der Wert ein Freitag ist.          if(isFriday($VARIABLENNAME0))
isSaturday                             Prüft, ob der Wert ein Samstag ist.          if(isSaturday($VARIABLENNAME0))
isSunday                               Prüft, ob der Wert ein Sonntag ist.          if(isSunday($VARIABLENNAME0))
isTimeBefore                           Wert wird geprüft, ob dieser vor einem       isTimeBefore(new Date(),
                                       anderen Wert liegt.                           $ VARIABLENNAME0)
isTimeAfter                            Wert wird geprüft, ob dieser nach einem      isTimeAfter(new Date(),
                                       anderen Wert liegt.                           $ VARIABLENNAME0)

Sonstige Imports

Diese Importierung muss vorangestellt werden:

import java.util.LinkedList;
import java.util.List;
import de.formsolutions.metaform.enums.
Funktionsname                          Beschreibung                                 Beispiel
setPdfRenderOption                     Wert wird geprüft, ob dieser nach einem      textoutput.setPdfRenderOption(PdfRenderOption.RENDERED)
                                       anderen Wert liegt.

           Hinweis:

           1. Die Performance kann durch die Importierungen beeinflusst werden. Daher wird dazu geraten
              immer nur die Importierungen einzufügen, die auch wirklich benötigt werden.
           2. Die Funktion "DateUtil" funktioniert nur mit Datumsfeldern.

Regelname
Nun findet die eigentliche Definition der Regel statt. Hierzu ist es relevant, einen Regelnamen zu definieren. Dieser
wird im Kontext der Expertenregel mit dem Stichwort rule eingeleitet. Der Regelname selbst muss von doppelten
Anführungszeichen umgeben sein.

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
rule "Form-Solutions Beispiel-Regel"
when
 
then
 
end

                  Page 5 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

         Hinweis:

        1. Alle durch Größer-/Kleinerzeichen kenntlich gemachte Bereiche müssen ersetzt werden.
        2. Weiterhin darf ein Regelname nur einmalig vergeben werden.

When-Teil
Der nächste relevante Schritt einer Expertenregel bezieht sich auf den sogenannten When-Teil, welcher gleichzeitig
einer Bedingung entspricht. Erst wenn die definierte Bedingung zutreffend ist, wird eine weitere Ausführung der
Regel vorgenommen. Dieser Teil wird durch das Stichwort when in der Expertenregel eingeleitet.

Paneldefinition
Eine Paneldefinition ist dann relevant, wenn eine Referenz zu einem entfernten Panel aufgebaut werden soll.
Beispiel: Es wird eine Panelregel auf „Panel B“ erstellt und es wird auf eine Komponente von „Panel A“ zugegriffen.
Hierfür ist es relevant „Panel A“ eindeutig zu referenzieren.

  Die Definition besteht aus zwei Funktionsweisen.

  1. Es wird eine Variable definiert, auf welche im weiteren Verlauf der Regel zugegriffen wird. Diese impliziert die
     hinterlegte Komponente.
  2. Beschreibt dieser Bereich eine Bedingung. Erst wenn diese als erfüllt gilt, wird der Then-Teil ausgelöst.
     Panel(identifier == "", $:getInputComponent (""), $ =null)
  Auch in diesem Fall müssen jeweils alle Bereiche, die durch Größer-/Kleinerzeichen gekennzeichnet sind, ersetzt
werden.

   • < PANELNAME > bezieht sich auf das zu referenzierende Panel. Die Bezeichnung muss identisch wie der
     hinterlegte Panelname sein.
   • < VARIABLENNAME > ist ein beliebig wählbarer Wert, welcher im weiteren Verlauf als Bezeichnung für
     die gewünschte Komponente hinterlegt wird (Keine Umlaute zulässig!). Somit muss im weiteren Verlauf
     bei beispielsweise einer Berechnung nicht wieder die volle „Bezeichnung technisch“ einer Komponente
     angegeben werden.
   • < BEZEICHNUNG TECHNISCH > beschreibt die „Bezeichnung technisch“ einer Komponente. (Komponente
     bearbeiten -> „Bezeichnung technisch“)
   • < VARIABLENNAME > entspricht der zuvor definierten Variable. Beide Werte sind in diesem Szenario
     identisch!

                Page 6 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

          Hinweis:

          1. Bei der Benennung spielen Leerzeichen sowie Objektgruppen auch eine Rolle. So muss
             beispielsweise der Objektgruppenname vor den Komponentennamen mittels eines Punkts
             getrennt werden.
          2. Weiterhin ist drauf zu achten, dass die im Expertenmodus definierten Regeln nicht automatisch
             bei einer Änderung der Panel-/Komponentenbenennung geändert werden.
          3. Auch werden die im Expertenmodus definierten Regeln nicht im grafischen Editor abgebildet.

  Beispiel:

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
rule "Form-Solutions Beispiel-Regel"
when
  Panel(identifier == "Panel A", $formsolutions:getInputComponent ("Komponente xy"), $formsolutions =null)
then
 
end

Verknüpfungen und Definitionen
Komponenten- und Paneldefinitionen sind beliebig verknüpfbar. Folgende Möglichkeiten sind gegeben:

  1.   Panel(...) and Panel(...) and ...
  2.   Panel(...) or Panel(...) and ...
  3.   (Panel(...) and Panel(...)) or ...
  4.   ...

          Hinweis:*
       Der Aufruf der Paneldefinition (s. o. Panel (. . . )) lässt sich auch durch die Komponentendefinition
       ersetzen.

                   Page 7 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

Komponentendefinition
Anders als bei Panelregeln, bei welchen die hinterlegten Regeln bei Aufruf eines Panels einmalig angestoßen
werden, werden bei Komponentenregeln bei Änderungen der entsprechenden Panels/Komponenten jederzeit die
Daten neu aufgerufen. Somit werden die Daten jederzeit „live“ aufgerufen.

  Die Definition besteht aus zwei Funktionsweisen.

  1. Es wird eine Variable definiert, auf welche im weiteren Verlauf der Regel zugegriffen wird. Diese impliziert die
     hinterlegte Komponente.
  2. Beschreibt dieser Bereich eine Bedingung. Erst wenn diese als erfüllt gilt, wird der Dann-Teil ausgelöst.
     Component ($:searchInputComponent(""),
     $ =null)
     Bei einer Paneldefinition ändert sich der Bereich searchInputComponent in getInputComponent.
   • < VARIABLENNAME > ist ein beliebig wählbarer Wert, welcher im weiteren Verlauf als Bezeichnung für die
     gewünschte Komponente hinterlegt wird. (Keine Umlaute zulässig!)
   • < KOMPONENTENNAME > beschreibt die „Bezeichnung technisch“ einer Komponente. (Komponente
     bearbeiten -> „Bezeichnung technisch“)
   • < VARIABLENNAME > entspricht der zuvor definierten Variable. Beide Werte sind in diesem Szenario
     identisch!

  Eine Hinterlegung des Panels ist nicht mehr relevant! Ist es wünschenswert Panelübergreifend tätig zu werden ist
dies mittels „and/or“ einer Paneldefinition möglich.

         Hinweis:
      Bei der Benennung spielen Leerzeichen sowie Objektgruppen auch eine Rolle. So muss beispielsweise
      der Objektgruppenname vor den Komponentennamen und einem Punkt getrennt werden.

  Beispiel:

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
rule "Form-Solutions Beispiel-Regel"
when
  Component($form:searchInputComponent ("Komponente xy"), $form =null) and Panel(identifier == "Panel A",
  $solutions:getInputComponent("Komponente z"), $solutions =null)
then
 
end

Ermittlung eines Feldwertes
Um im When-Teil zu überprüfen, ob der Benutzer eine Eingabe getätigt hat, kann folgendes Schema verwendet
werden:

$.getStringValue() == "formsolutions"

  == entspricht ist gleich
Der Variablenname bezieht sich in diesem Fall auf die vorab definierte Komponente. Der vom Benutzer hier
eingetragene Wert wird extrahiert und mit "formsolutions" verglichen. Sofern der Abgleich zutreffend ist, gilt die
Bedingung als erfüllt.

  Beispiel:

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
rule "Form-Solutions Beispiel-Regel"
when
  Component($form:searchInputComponent ("Komponente xy"), $form =null), $form.getStringValue() ==
"formsolutions" and
  Panel(identifier == "Panel A", $solutions:getInputComponent("Komponente z"), $solutions =null)
then
 
                 Page 8 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

end

  = entspricht ungleich
$.getStringValue() = "formsolutions"

  Obiges trifft nur dann zu, wenn der Nutzer ein anderes Wort wie „formsolutions“ einträgt.

Then-Teil
Der Then-Teil entspricht der Konsequenz, also das, was ausgeführt wird, sofern alle zuvor definierten Bedingungen
zutreffend sind. Eingeleitet wird dieser durch das Stichwort then. Abgeschlossen durch das Stichwort end.

Panelfeld mit einem Wert vor befüllen
Um ein Feld eines Panels zu befüllen kommt folgende Methode zum Einsatz:

$.setStringValue("beliebiger Text");

  Der Variablenname entspricht der im When-Teil definierten Variable. Der Bereich, welcher mit „beliebiger Text“
gekennzeichnet ist, kann beliebig ausgetauscht werden. Dies entspricht dem Wert, mit welchem das Feld vor befüllt
werden soll.

  Beispiel:

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
rule "Form-Solutions Beispiel-Regel"
when
  Panel(identifier == "Panel A", $solutions:getInputComponent ("Komponente xy"), $solutions =null)
then
  $solutions.setStringValue("beliebiger Text");
end

          Hinweis:
      Eine Panelregel wird nur zum Aufruf der Seite ausgeführt. Das heißt, es ist in diesem Szenario nur
      möglich, ein Feld zum Start eines Panels zu befüllen. Um einen sofortigen Austausch zu ermöglichen,
      ist eine Komponentenregel relevant!

Komponenten mit einem neuen Wert laden
Um ein Feld eines Panels in Abhängigkeiten des Benutzers zu befüllen, ist folgende Definition relevant, die an der
Komponente hinterlegt wird, bei welcher sich der Wert verändert:

String oldValue=$.getStringValue();

if($.getStringValue().equals(oldValue)){
$.setNeededValueHasChanged(true);
}
  Die Variablennamen beziehen sich auf die Komponente, bei welcher der Inhalt neu gesetzt werden soll. Die wird
mit der Tätigkeit ersetzt, welche ausgeführt werden soll. Also beispielsweise das Befüllen des Feldes mit einem
spezifischen Wert.

  Beispiel:

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
rule "Form-Solutions Beispiel-Regel"
when
 Component($solutions:searchInputcomponent("Komponente xy"), $solutions = null), $solutions.getStringValue()
== "test")
 and Component($form:searchInputcomponent("Komponente zz"), $form = null)

                Page 9 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Expertenmodus zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

then
 String oldValue=$form.getStringValue();
  $form.setStringValue("formsolutions");
 if($form.getStringValue().equals(oldValue)){
  $form.setNeededValueHasChanged(true);
  }
end

  In obigem Beispiel wird überprüft, ob der Benutzer in der Komponente „Komponente xy“ den Wert „test“
eingetragen hat. Wenn ja, dann wird der Wert der Komponente „Komponente z“ auf "formsolutions" gesetzt.

Zusätzliche Features
no-loop
Beim Definieren von Regel kann durch falsch definierte Regeln „Regel-Schleifen“ erzeugt werden. Eine solche
Regel-Schleife verursacht, dass die Regel immer und immer wieder ausgeführt wird. Mit der Hilfe des Ausdrucks
no-loop kann einer solchen Regel-Schleife vorgebeugt werden. Eine solche Regel-Schleife erkennt man dran, wenn
ein Fehler erscheint, mit dem Hinweis „zu viele Regelausführungen“ oder der Assistent nach dem Einbau der Regel
der Ausfüllprozess extrem langsam wird.

  Beispiel:

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
rule "Form-Solutions Beispiel-Regel"
no-loop
when
 
then
 
end

Salience Wert

Über den Salience Wert kann die Ausführung der Regel „Prioritätsstufe“ definiert werden. Eine Erteilung/Änderung
der Prioritätsstufe wäre beispielsweise nötig, wenn das Resultat von „Regel A“ für die „Regel B“ weiter benötigt
wird. „Regel A“ muss also „bevorzugt ausgeführt“ werden und muss daher einen höheren Salience Wert erhalten.
Beispielsweise sollte dann „Regel A“ einen Salience Wert von -1 und „Regel B“ einen Salience Wert von -2
erhalten.

  Beispiel:
package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
rule "Form-Solutions Beispiel-Regel"
salience -2
when
 
then
 
end

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:

                Page 10 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

   • 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.

  Ü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.

               Page 11 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - 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.

Inhaltsassistenzsystem
Der Expertemodusbereich 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:
      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:

                Page 12 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

   • 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.

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 dem
Feld „Replace with“ ersetzt werden.

               Page 13 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

Berechnungsregel
Bei den Berechnungsregeln wird die Struktur der Aktivierungsregel um weitere Importierungen erweitert bzw. der
then-Teil wird abgeändert.

Panelübergreifende Berechnung
Um eine Summe auf einem anderen Panel zu berechnen, ist folgende Definition relevant:

apply($,($, $));

  Nehmen wir beispielsweise eine einfache Berechnung bei der auf „Panel A“ die Komponenten „Komponente
A“ und „Komponente B“ addiert werden sollen. Das Ergebnis soll auf einem separaten Panel „Panel B“ in die
„Komponente C“ geschrieben werden.

  Beispiel:

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
import function de.formsolutions.metaform.rules.util.MathUtil.add
import function de.formsolutions.metaform.rules.util.MathUtil.apply
rule "Form-Solutions Beispiel-Regel"
when
  Panel(identifier == "Panel A", $Betrag1:getInputComponent("Komponente A"), $Betrag1 =null) and
  Panel(identifier == "Panel A", $Betrag2:getInputComponent("Komponente B"), $Betrag2 =null) and
  Panel(identifier == "Panel B", $Summe:getInputComponent("Komponente C"), $Summe =null)
then
  apply($Summe,add($Betrag1, $Betrag2));
end

               Page 14 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

Komponenten Berechnung in einem Panel
Um eine Summe auf einem Panel zu berechnen, ist folgende Definition relevant:

String oldValue=$.getStringValue();
apply($,($,$));
if($.getStringValue().equals(oldValue)) {
$.setNeededValueHasChanged(true); }

  Nehmen wir beispielsweise eine einfache Berechnung, bei der auf „Panel A“ die Komponenten „Komponente A“
und „Komponente B“ addiert werden sollen. Das Ergebnis soll auf „Panel A“ in der „Komponente C“ geschrieben
werden.

  Beispiel:

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
import function de.formsolutions.metaform.rules.util.MathUtil.add
import function de.formsolutions.metaform.rules.util.MathUtil.apply
rule "Form-Solutions Beispiel-Regel"
when
  Component($Betrag1:searchInputComponent("Komponente A"), $Betrag1 =null) and
  Component($Betrag2:searchInputComponent("Komponente B"), $Betrag2 =null) and
  Component($Summe:searchInputComponent("Komponente C"), $Summe =null)
then
 String oldValue=$Summe.getStringValue();
  apply($Summe,add($Betrag2, $Betrag2));
 if($Summe.getStringValue().equals(oldValue)) {
  $Summe.setNeededValueHasChanged(true);
  }
end

Rundungen der Dezimalzahlen
Weiterhin können Regeln so definiert werden, dass ab einer bestimmten Nachkommastelle das Ergebnis auf-/
abgerundet wird.

  Um eine Rundung zu definieren, ist folgende Definition relevant:

               Page 15 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

apply($,round(($,$),
Regelbau - Expertenmodus

 apply($summe, divide(sum, 2));
 update($ergebnis);
end

  Ein Multipanel „Panel A“ enthält die Komponente „Betrag A“. Der Betrag soll nun je, nachdem wie oft das
Multipanel ausgefüllt worden ist, addiert werden. Das Ergebnis wird in das Panel „Panel B“ in der Komponente
„Betrag C“ eingetragen.

  Beispiel:

package de.formsolutions.metaform
import de.formsolutions.metaform.model.*
import java.math.BigDecimal
import function de.formsolutions.metaform.rules.util.MathUtil.divide
import function de.formsolutions.metaform.rules.util.MathUtil.apply
import function de.formsolutions.metaform.rules.util.MathUtil.add
rule "Form-Solutions Beispiel-Regel"
when
  $Multi: MultiPanelMaster(identifier == "Panel A")
  Panel(identifier == "Panel B", $Summebetrag:getInputComponent("Betrag C"), $Summebetrag =null)
then
  BigDecimal multi = BigDecimal.ZERO;
  java.util.List multiRows = $Multi.getPanelEntities();
 for(Panel multiRow: multiRows){
  multi = add(multi, multiRow.getInputComponent("Betrag A"));
  }
  apply($Summebetrag,multi);
end

         Hinweis:
      Es muss für das Multipanel der Name des Panelnamens in dem Code verwendet werden.

               Page 17 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Regelbau - Expertenmodus

Page 18 / 18 - zuletzt bearbeitet von Form-Solutions GmbH am 19.10.2021
Sie können auch lesen