Dieser Handler wird verwendet, um das Scannen von Barcodes mit spezieller Scan-Hardware zu implementieren. Er extrahiert Scanner- oder Spracheingaben auf der Grundlage einer Liste von Mustern und prüft, ob mindestens eines dieser Muster gültig ist.
Typ: value_extractor_handler
Attribute
Das Attribut für den Value Extract Handler lautet:
Muster: Die Eingabe muss mit dem definierten Muster übereinstimmen. Wenn sie übereinstimmt, können die definierten Gruppen extrahiert werden
Elemente
Die verschiedenen Elemente sind wie folgt:
grp: Speichert die Informationen, wie jedes Gruppenmitglied extrahiert werden soll, als eine Liste von Parametern
- Erforderlich: nein
- Standardwert: leere Liste
erlaubte_Werte: Ermöglicht die Angabe einer Liste von Werten, die geprüft werden, wenn das Muster korrekt ist. Kann nicht mit Regexen verwendet werden, die "oder" enthalten, da jede Gruppe einen erlaubten Wert enthalten muss oder gescannt werden muss
- Erforderlich: nein
- Standardwert: keine
code_word_extraction: Soeech Die Eingabe wird nur geprüft, wenn dieses Attribut gesetzt ist. Es kann eine leere Zeichenkette sein. Wenn ein Spracheingabebefehl mit dem angegebenen Schlüsselwort beginnt, wird der Rest des Befehls verwendet, um die benötigten Informationen zu extrahieren. Beachten Sie, dass es nicht möglich ist, Spracherkennung mit regulären Ausdrücken durchzuführen. Alle möglichen Werte müssen der Grammatik mit der Aktion
- Erforderlich: nein
- Standardwert: keine
extract_to_workflow: Standardmäßig werden die resultierenden Gruppen im Schrittbereich gespeichert. Wird dieses Attribut auf true gesetzt, werden die Variablen stattdessen im Workflow-Bereich gespeichert.
- Erforderlich: nein
- Standardwert: keine
Eingabe: Ermöglicht die Übergabe einer Anfangseingabe, die bei der Wiederaufnahme geprüft werden soll
- Erforderlich: nein
- Standardwert: keine
Veranstaltungen
Der Handler gibt die folgenden Ereignisse aus:
VALID_EXTRACTION
oder INVALID_EXTRACTION
: Der Handler prüft jedes Eingabeereignis mit der Modalität "BARCODE" und "SPEECH" (wenn der Parameter "code_word_extraction" angegeben wird) und sendet ein Ereignis mit dem Befehl "VALID_EXTRACTION" oder "INVALID_EXTRACTION".INVALID_PATTERN
: Wenn das angegebene Muster einen Syntaxfehler enthält, gibt der Handler ein Ereignis mit dem Befehl "INVALID_PATTERN" aus.
Die Struktur der Nutzlast ist wie in den Beispielereignissen unten:
{
"command": "VALID_EXTRACTION",
"device":
{
"modality": "value_extractor",
"name": "value_extractor",
"source": "value_extractor",
"descriptor": "value_extractor"
},
"payload":
{
"technology": "SCAN", // [SCAN, VOICE]
"code": "123456789",
"speech_command": "null"
}
}
{
"command": "INVALID_PATTERN",
"device":
{
"modality": "value_extractor",
"name": "value_extractor",
"source": "value_extractor",
"descriptor": "value_extractor"
},
"payload":
{
"technology": "pattern",
"code": "(.()*",
"speech_command": "null"
}
}
Beispiel
<value_extractor_handler pattern="(.+)_(.+)" code_word_extraction="USER">
<grp>
<param name="grp_1" type="string">prefix</param>
<param name="grp_2" type="string">suffix</param>
</grp>
</value_extractor_handler>
Der Code 'test_user' wird eine erfolgreiche Extraktion sein. Danach wird #{prefix}
'test' und #{suffix}
'user' enthalten.
Erweitertes Beispiel mit der Verarbeitung von emittierten Events
<context>
<list name="user_name_list" listType="UNNAMED">
<elem>barry</elem>
<elem>white</elem>
</list>
</context>
<handlers>
<value_extractor_handler pattern="(.+)_(.+)">
<code_word_extraction></code_word_extraction>
<input>admin_barry</input>
<extract_to_workflow>true</extract_to_workflow>
<grp>
<param name="grp_1" type="string">user_role</param>
<param name="grp_2" type="string">user_name</param>
</grp>
<allowed_values>
<list name="grp_1" listType="UNNAMED">
<elem>admin</elem>
<elem>supervisor</elem>
</list>
<param name="grp_2" type="object">#{user_name_list}</param>
</allowed_values>
</value_extractor_handler>
</handlers>
<states>
<onevent>
<rule id="set_user">
<expression><![CDATA[ #{event(value_extractor):command} == 'VALID_EXTRACTION' && exists(#{user_role}) && exists(#{user_name}) ]]></expression>
<actions>
<setvar id="set_user">
<context_of>workflow</context_of>
<context_update>
<param name="userrole" type="string">#{user_role}</param>
<param name="username" type="string">#{user_name}</param>
</context_update>
</setvar>
</actions>
</rule>
<rule id="invalid_input">
<expression><![CDATA[ #{event(value_extractor):command} == 'INVALID_EXTRACTION' && #{event:payload.technology} == 'SCAN' ]]></expression>
<actions>
<ui_notification id="invalid_user" type="ERROR" duration="SHORT" show_immediately="true">
<message>"#{event:payload.code}" is not a valid user!</message>
</ui_notification>
</actions>
</rule>
</onevent>
</states>