Este controlador evalúa si un valor es válido en función de un patrón o de una lista de patrones.
Tipo: value_evaluation_handler
A continuación, se muestra una explicación de los atributos disponibles:
/sdefinido. Si coincide, la entrada es válida.El controlador emite los siguientes eventos:
VALID: Si la entrada proporcionada coincide con el patrón.ALREADY_VALID: Si la entrada proporcionada coincide con un patrón que ya se ha validado correctamente.ALL_VALID: Si todos los elementos de la to_evaluate colección se han validado correctamente.INVALID: Si la entrada proporcionada no coincide con ningún patrón.La estructura de la carga útil es la siguiente:
   {
          "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">
            <expresión>
                <![ 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>"¡No es un valor válido!</message>
                </ui_notification>
            </actions>
        </rule>
    </onevent>
</states>
            Este controlador se utiliza para implementar el escaneo de códigos de barras a través de hardware de escaneo dedicado. Extrae el escáner o la entrada de voz en función de una lista de patrones y comprueba si al menos uno de estos patrones es válido.
Tipo: value_extractor_handler
A continuación, se muestra una explicación del atributo disponible:
Los diferentes elementos son los siguientes:
or, porque cada grupo debe contener un valor o escaneo permitido. 
               true se guardarán las variables almacenadas en el scopte del flujo de trabajo. 
               resume. 
               El controlador emite los siguientes eventos:
VALID_EXTRACTIONo INVALID_EXTRACTION: El controlador comprobará cualquier evento de entrada con las BARCODE modalidades y SPEECH (si se proporciona el code_word_extraction parámetro) y emitirá un evento con los VALID_EXTRACTION comandos orINVALID_EXTRACTION.INVALID_PATTERN: Si el patrón proporcionado contiene un error de sintaxis, el controlador emitirá un evento con el INVALID_PATTERN comando .La estructura de la carga útil es la siguiente:
   {
          "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",
             "código": "(.() *",
             "speech_command": "nulo"
          }
    }
             <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>
             Un código como "test_user" se extraerá correctamente. Después, #{prefix} contendrá "prueba" y #{suffix} contendrá "usuario".
<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}" no es un usuario válido!</message>
                </ui_notification>
            </actions>
        </rule>
    </onevent>
</states>