In dieser Lektion werden wir über Bereiche und Referenzen sprechen. Diese helfen Ihnen dabei, Regeln und Aktionen wiederverwendbar zu machen und auf Daten in Ihrer Komponente zuzugreifen und diese zu verwalten.
Es gibt zwei Bereiche, in denen Sie Regeln und Aktionen deklarieren und Daten speichern können:
- Schritt: Jeder Schritt einer Komponente hat seinen eigenen Geltungsbereich. Die hier definierten Regeln, Aktionen und Daten sind an anderer Stelle nicht verfügbar.
- Arbeitsablauf: Alle Schritte einer Komponente haben Zugriff auf die Regeln, Aktionen und Daten, die dem Workflow-Bereich hinzugefügt wurden.
Außerdem stehen drei Bereiche zum Speichern von Daten zur Verfügung:
- Wurzel: Alle Komponenten eines Workflows haben Zugriff auf den Wurzelbereich. Dieser kann verwendet werden, um Daten zwischen Komponenten zu übertragen.
- user_session: Solange sich der Benutzer nicht abmeldet, kann auf die im Bereich user_session gespeicherten Daten auch nach Beendigung der Workflow-Ausführung zugegriffen werden (z. B. von einem anderen Workflow aus oder wenn derselbe Workflow mehrmals ausgeführt wird).
- global: Solange die Frontline Workplace-Anwendung nicht geschlossen ist, sind die im globalen Bereich gespeicherten Daten zugänglich, auch wenn sich ein Benutzer abmeldet und ein anderer Benutzer anmeldet.
Beispielkomponente
<workflow [ATTRIBUTES]>
<context> [...] </context> \
<actions> [...] </actions> -\
<rules> --\
<rule id="menu_button_selection"> ---\
<expression>[..]</expression> ----\
<actions> -----|--> Workflow scope
[...] ----/
</actions> ---/
</rule> --/
</rules> -/
<steps>
<step id="stepA" [ATTRIBUTES]>
<context> [...] </context> ----\
<rules> [...] </rules> -----|--> Step scope
<actions> [...] </actions> ----/
<states>
<onevent>
<rule ref="menu_button_selection"/> -------> Referencing a rule from the workflow scope
<rule id="show_notification"> --\
<expression>[..]</expression> ---\
<actions> ----\
[...] -----|--> Direct definition (could still reference a pre-defined action)
</actions> ----/
</rule> ---/
</onevent>
</states>
</step>
<step id="stepB" [ATTRIBUTES]>
<states>
<onevent>
<rule ref="menu_button_selection"/> -------> Referencing a rule from the workflow scope
</onevent>
</states>
</step>
</steps>
</workflow>
In diesem Beispiel:
- Eine Regel mit
id="menu_button_selection"
wird im Workflow-Bereich definiert und dann sowohl im Schritt id="stepA"
als auch im Schritt id="stepB"
mit dem Attribut ref
referenziert.
Hinweis: Durch die Wiederverwendung von Regeln und Aktionen wird das Verhalten Ihrer Komponente konsistent, die Wartbarkeit verbessert und die Menge an Code minimiert.
- Die IDs innerhalb eines Bereichs müssen eindeutig sein. Sie können identische IDs in anderen Bereichen verwenden, aber wenn Sie keinen sehr guten Grund haben, empfehlen wir, dies nicht zu tun, um Verwirrung zu vermeiden. Wenn Sie identische IDs verwenden, gilt die Rangfolge von unten nach oben: Wenn eine Regel mit
id="menu_button_selection"
direkt im Schrittbereich definiert ist, wird sie anstelle aller vordefinierten Regeln mit derselben ID im Workflow-Bereich ausgeführt. - Möglicherweise haben Sie auch Regeln/Aktionen, die nur in einem Ihrer Schritte, aber in mehreren Zuständen/Regeln dieses bestimmten Schrittes benötigt werden. In diesem Fall können Sie die Regel/Aktion im Schrittbereich definieren und sie auf dieselbe Weise referenzieren.
- Schließlich können Sie auch Regeln und Aktionen direkt dort definieren, wo sie benötigt werden. Eine solche Regel/Aktion wird nirgendwo anders verfügbar sein. Wenn Sie wissen, dass Ihre Regel/Aktion nicht wiederverwendet wird, kann eine direkte Definition die Komponente besser lesbar machen, da Sie nicht herumspringen müssen, um die Implementierung zu sehen.
Hinweis: IDs müssen innerhalb eines Bereichs eindeutig sein. Wenn Sie beim Erstellen einer neuen Regel oder Aktion eine bestehende Regel oder Aktion als Vorlage kopieren und einfügen, vergessen Sie in der Regel, das Attribut ID zu ändern. Machen Sie es sich zur Gewohnheit, zuerst die ID zu ändern.
📌Zuweisung
Überarbeiten Sie unsere Auswahlkomponente:
- Legen Sie die Aktion
finish_workflow
in den globalen Bereich und referenzieren Sie sie in der Regel - Legen Sie die Regel
menu_button_selection
in den globalen Bereich und referenzieren Sie sie in dem Schritt - Stellen Sie sicher, dass die Komponente noch wie vorgesehen funktioniert
Download-Komponente (Pre-Assignment)
Hilfe und Ressourcen
Hier sind einige Tipps, die die Entwicklung von Arbeitsabläufen und Komponenten etwas erleichtern:
Vorschau-Modus
In diesem Modus können Sie Ihre Änderungen sofort testen, ohne den Workflow veröffentlichen zu müssen. Weitere Informationen finden Sie im Abschnitt Workflow-Vorschau.
Server- und Client-Protokolle
Sie können auf die FCC- und Geräteprotokolle zugreifen, indem Sie sich mit dem sysadmin-Benutzer anmelden oder direkt auf den Ordner UBIMAX_HOME\logs zugreifen. Die Geräteprotokolle werden in regelmäßigen Abständen auf den Server übertragen, aber Sie können als sysadmin-Benutzer einen sofortigen Upload anfordern.
Anmerkungen zur Lösung
Wenn Sie noch nicht alles für die Entwicklung vorbereitet haben, sollte das die Hauptaufgabe für diese erste praktische Aufgabe sein.
In der Regeldefinition verweisen Sie nun auf eine vordefinierte Aktion, die im selben Bereich definiert ist. Die Reihenfolge der <actions>- und
<rules>-Tags
spielt keine Rolle, damit dies funktioniert. So sollte Ihre Komponente aussehen:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<workflow xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" wfd_version="1.0" reporting="false"
id="choice" name="choice" descriptor="Choice component" startstep="choose"
xsi:noNamespaceSchemaLocation="../../../configuration/workflow.xsd">
<actions>
<finish_workflow id="finish_workflow">
<output>
<param name="selected_button" type="string">#{event:command}</param>
</output>
</finish_workflow>
</actions>
<rules>
<rule id="menu_button_selection">
<expression>#{event:command} == 'APPLE' || #{event:command} == 'PEAR'</expression>
<actions>
<action ref="finish_workflow"/>
</actions>
</rule>
</rules>
<steps>
<step id="choose" descriptor="the user selects between two options" uitemplate="ChoiceScreen">
<states>
<onevent>
<rule ref="menu_button_selection"/>
</onevent>
</states>
</step>
</steps>
</workflow>
Download-Komponente (Post-Assignment)
Damit haben Sie die zweite Lektion abgeschlossen. Die nächste Lektion wird sich mit Datenvariablen befassen.