这个处理程序被用来实现使用专用扫描硬件的条形码扫描。它根据一个模式列表提取扫描仪或语音输入,并检查这些模式中是否至少有一个是有效的。
型号:value_extractor_handler
属性
值提取处理程序的属性是。
模式。 输入需要与定义的模式相匹配。如果匹配,就可以提取出定义的组。
构成要素
不同的要素如下。
grp:存 储信息,每个组的成员应该如何被提取出来,作为一个参数列表
allowed_values:允 许设置一个值的列表,在模式正确后,这些值将被检查。不能与包含 "或 "的重组词一起使用,因为每组必须包含一个允许的值或扫描。
code_word_extraction:S oeech输入只有在这个属性被设置的情况下才会被检查。它可以是一个空字符串。如果一个语音输入命令以给定的关键词开始,命令的其余部分将被用来提取需要的信息。请注意,不可能进行正则表达式语音识别。所有可能的值都需要用动作添加到语法中。
extract_to_workflow。 默认情况下,结果组将被保存到步骤范围内。将此属性设置为"true",变量将被保存到工作流范围中。
输入。 允许你传递一个初始输入,以便在恢复时检查。
活动
该处理程序发出以下事件。
VALID_EXTRACTION
或INVALID_EXTRACTION
:处理程序将检查任何具有 "BARCODE "和 "SPEECH "模式的输入事件(如果提供了 "code_word_extraction "参数),并发出一个带有 "VALID_EXTRACTION "或 "INVALID_EXTRACTION "命令的事件。INVALID_PATTERN
:如果提供的模式包含一个语法错误,处理程序将发出一个带有 "INVALID_PATTERN "命令的事件。
有效载荷结构如下面的事件示例。
{
"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"
}
}
例子
<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>
代码'test_user'将是一个成功的提取。之后,#{prefix}
将包含'test',#{suffix}
将包含'user'。
扩展的例子,包括对发射的事件的处理
<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>