Los componentes se escriben en XML y puede implementar el comportamiento deseado anotando sus reglas, que son instrucciones si A y B .
Por ejemplo, el requisito es que durante la inspección de una máquina, si el usuario presiona el botón "Cámara", se inicia la cámara interna del dispositivo.
La misma regla podría expresarse un poco más cerca de la implementación como:
Si estamos en el step
"inspect_machine" yevent
ocurre con la command
"Cámara" entonces ejecutamos action
"start_camera".
El marco estructural típico de un componente es el siguiente:
<workflow [ATTRIBUTES]> <context> [...] </context> // Variables de datos, optional <rules> [...] </rules> // Si [Expresión] entonces [acciones]; opcional <acciones> [...] </acciones> // opcional <pasos> <paso [ATTRIBUTES]><estados> <encurrículum> [...] </onresume> // opcional <onevent> [...] </onevent> // opcional[...] </estados> <mapeo> [...] </mapping>< /paso> [...] </pasos> </flujo de trabajo>
Antes de seguir adelante con un ejemplo, a continuación se muestra una descripción general de las etiquetas XML:
Para comprender mejor la estructura de los componentes, usaremos un ejemplo de un componente de elección de imagen .
El usuario selecciona entre las dos opciones "Manzana" y "Pera". El mismo componente se utilizará para esta capacitación y se mejorará a medida que avancemos.
La siguiente interfaz de usuario muestra cómo se vería este componente mientras se ejecuta en la aplicación de vidrio inteligente Frontline Workplace.
El flujo de trabajo es:
<?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="Componente de elección" startstep="choose" xsi:noNamespaceSchemaLocation=".. /.. /.. /configuration/workflow.xsd"> <steps> <step id="choose" descriptor="el usuario selecciona entre dos opciones" uitemplate="ChoiceScreen"> <states>< onevent> <rule id="menu_button_selection"> <expression>#{event:command} == 'APPLE' || #{event:command} == 'PEAR'</expression> <actions> <finish_workflow id="finish_workflow"> <output> <param name="selected_button" type="string">#{event:command}</param> </output> </finish_workflow> </actions> </rule> </onevent> </states> </step> </steps> </workflow>
1. La etiqueta de flujo de trabajo contiene un atributo startstep="choose". Esto se utiliza para seleccionar qué paso se realizará primero después de inicializar el componente.
2. <step id="choose"...
se utiliza para hacer referencia a una opción que se mostrará uitemplate="ChoiceScreen"
con . ChoiceScreen es un archivo que define lo que se muestra en la pantalla mientras estamos en este paso.
Como se ha explicado, el comportamiento de un componente se define mediante reglas. Una regla consta de una expresión (o condición) y de la acción que se debe realizar cuando esa condición es True. Cada regla se asigna a uno de los estados <onenter>
, <onresume>
, <onleave>
<onevent>
, o <onpause>
. Las reglas solo se comprobarán cuando el componente esté en ese estado (por ejemplo, onenter, cuando el componente se inicia por primera vez).
3. El <rule id="menu_button_selection">
se asigna al <onevent>
estado. Cada vez que ocurra un evento, se comprobarán todas las reglas dadas a este estado. Aquí, <expression>#{event:command} == 'APPLE' || #{event:command} == 'PEAR'</expression>
comprueba si el evento contiene un comando específico. Tal evento se activaría cuando un botón con el nombre "APPLE" o "PEAR" se activa mediante un comando de voz o presionándolo en la pantalla.
4. Si una expresión de regla se evalúa como verdadera, se ejecuta el conjunto de acciones de la etiqueta de <actions>
la regla. En este ejemplo, se utiliza la finish_workflow
acción. Esto abandona inmediatamente el componente una vez que el usuario ha elegido una de las dos opciones, y pasa la elección que se hizo en un <output>
parámetro para que podamos crear diferentes transiciones en el diagrama de flujo de trabajo basadas en esa elección.
Supongamos que desea ampliar nuestro componente de elección para enviar un mensaje que contenga la elección del usuario al conector de primera línea (que a su vez podría comunicar esta información a un sistema backend). Piensa en las siguientes preguntas:
Las acciones son los bloques de construcción básicos que podemos usar. Van desde cambiar lo que ve el usuario (colores, texto, notificaciones,...) hasta controlar el flujo del programa (pasar al siguiente paso) mediante la gestión de datos y la comunicación con el conector de primera línea o dispositivos externos.
En primer lugar, se podría argumentar que la comunicación con el conector de primera línea es una funcionalidad independiente y debe tener su propio componente. Tendrías toda la razón: separar el aspecto de la comunicación en sus propios componentes haría que ambos componentes fueran más reutilizables. Por otro lado, a veces desea simplificar el flujo de procesos que se muestra en la interfaz de Frontline Creator para su cliente manteniendo varias funcionalidades juntas en un solo componente. Por ahora, supongamos que combinamos ambas funcionalidades en un solo componente.
Anteriormente, se le dijo que los pasos son equivalentes a las pantallas. Entonces, ¿por qué tendría más de un paso si la funcionalidad adicional es solo la comunicación de backend?
La respuesta es la mantenibilidad y la reutilización. Mantenibilidad, porque al realizar cambios en el aspecto de la comunicación, solo tendrás que mirar ese paso y no leer nada del otro código. Reutilización, porque también podría enviar mensajes diferentes utilizando el mismo paso si el componente se vuelve aún más complejo.
De la misma manera, sería una buena idea hacer dos componentes separados de estas dos funcionalidades. Es una buena idea crear al menos pasos separados si los combina en un solo componente. Simplemente haga que la pantalla se vea igual o agregue un acuse de recibo de notificación de progreso desde el conector. Como tal, sugerimos tener 2 pasos aquí, por ejemplo, "elección" y "message_connector".
El objetivo principal de esta pregunta es familiarizarte con el catálogo de 'Acciones'. Estos son algunos ejemplos de acciones que puede utilizar en el proceso de implementación:
Con esto, ya has terminado la primera lección. La siguiente lección tratará sobre los alcances y abarcará su primera tarea práctica.