価値評価ハンドラ
このハンドラは、パターンまたはパターンのリストに基づいて値が有効かどうかを評価します。
タイプ:value_evaluation_handler
属性
ここでは、利用可能な属性について説明する:
- を評価する: 入力は定義されたパターン
/sに
マッチする必要がある。もしマッチすれば、その入力は有効である。 - code_word_evaluation: この属性が設定されている場合のみ、音声入力がチェックされます。空文字列でも構いません。音声入力コマンドが指定されたキーワードで始まる場合、コマンドの残りの部分が評価に使用されます。
イベント
ハンドラーは以下のイベントを発する:
VALID
:提供された入力がパターンにマッチする場合。ALREADY_VALID
: 提供された入力が、すでに検証に成功したパターンにマッチする場合。ALL_VALID
:to_evaluate
コレクションの全要素が正常に検証された場合。INVALID
: 提供された入力がどのパターンにもマッチしない場合。
ペイロードの構造は以下の通り:
{
"command": "VALID",
"device":
{
"modality": "value-evaluation",
"name": "value-evaluation",
"source": "value-evaluation",
"descriptor": "value-evaluation"
},
"payload":
{
"code": "i am legend"
}
}
{
"command": "INVALID",
"device":
{
"modality": "value-evaluation",
"name": "value-evaluation",
"source": "value-evaluation",
"descriptor": "value-evaluation"
},
"payload":
{
}
}
例
<context>
<param name="validations" type="string"></param>
</context>
<handlers>
<value_evaluation_handler>
<code_word_extraction>validate</code_word_extraction>
<list name="to_evaluate" listType="UNNAMED">
<elem>machine .+</elem>
<elem>station .+</elem>
</list>
</value_evaluation_handler>
</handlers>
<states>
<onevent>
<rule id="is_valid">
<expression>
<![CDATA[ #{event(value-evaluation):command} == 'VALID' ]]>
</expression>
<actions>
<setvar id="add_validation">
<context_of>step</context_of>
<context_update>
<param name="validations" type="string">#{validations} #{event:payload.code}</param>
</context_update>
</setvar>
</actions>
</rule>
<rule id="all_valid">
<expression>
<![CDATA[ #{event(value-evaluation):command} == 'ALL_VALID' ]]>
</expression>
<actions>
<finish_workflow id="exit"/>
</actions>
</rule>
<rule id="invalid_input">
<expression>
<![CDATA[ #{event(value-evaluation):command} == 'INVALID' ]]>
</expression>
<actions>
<ui_notification id="invalid_value" type="ERROR" duration="SHORT" show_immediately="true">
<message>"Not a valid value!</message>
</ui_notification>
</actions>
</rule>
</onevent>
</states>
値抽出ハンドラ
このハンドラは、専用のスキャニング・ハードウェアを使ってバーコード・スキャニングを実装するために使用される。これは、パターンのリストに基づいてスキャナまたは音声入力を抽出し、これらのパターンの少なくとも1つが有効かどうかをチェックします。
タイプ:value_extractor_handler
属性
ここでは、利用可能な属性について説明する:
- パターン: 入力は定義されたパターンにマッチする必要がある。もしマッチすれば、定義されたグループを抽出することができる。
エレメント
各要素は以下の通り:
- grp: グループ内の各項目がどのように抽出されるべきかに関する情報を、パラメータのリストとして格納する。
- allowed_values: パターンが正しいと評価された後にチェックされる値のリストを設定できる。これは
orを
含む正規表現では使えません。なぜなら、各グループは許可された値かスキャンを含まなければならないからです。 - code_word_extraction: この属性が設定されている場合のみ、音声入力がチェックされる。空文字列でも構いません。音声入力コマンドが指定されたキーワードで始まる場合、コマンドの残りの部分が必要な情報を抽出するために使用されます。正規表現による音声認識はできないことに注意してください。すべての潜在的な値は、対応するアクションを介して構文に追加する必要があります。
- を使用します: デフォルトでは、結果のグループはステップのスコープに保存されます。この属性を
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>