Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una máquina de estado es un paradigma conocido para desarrollar programas. La StateMachine actividad, junto con State, Transition y otras actividades, se pueden usar para crear programas de flujo de trabajo de máquina de estado. En este tema se proporciona información general sobre la creación de flujos de trabajo de máquina de estado.
Visión general del flujo de trabajo de la máquina de estados
Los flujos de trabajo de máquina de estado proporcionan un estilo de modelado con el que puede modelar el flujo de trabajo de forma controlada por eventos. Una StateMachine actividad contiene los estados y transiciones que componen la lógica de la máquina de estado y se pueden usar en cualquier lugar donde se pueda usar una actividad. Hay varias clases en el entorno de ejecución de la máquina de estado:
Para crear un flujo de trabajo de máquina de estado, los estados se agregan a una StateMachine actividad y las transiciones se usan para controlar el flujo entre estados. En la siguiente captura de pantalla, del paso Tutorial de IntroducciónCómo: Crear un flujo de trabajo de máquina de estado, se muestra un flujo de trabajo de máquina de estados con tres estados y tres transiciones. Initialize Target es el estado inicial y representa el primer estado del flujo de trabajo. Esto se indica mediante la línea que lo lleva desde el nodo Inicio. El estado final del flujo de trabajo se denomina FinalState y representa el punto en el que se completa el flujo de trabajo.
Un flujo de trabajo de máquina de estado debe tener uno y solo un estado inicial y al menos un estado final. Cada estado que no sea un estado final debe tener al menos una transición. En las secciones siguientes se tratan la creación y configuración de estados y transiciones.
Crear y configurar estados
State representa un estado en el que puede estar una máquina de estado. Para agregar un elemento State a un flujo de trabajo, arrastre el diseñador de actividad State desde la sección Máquina de estados del Cuadro de herramientas y colóquelo en una actividad StateMachine en la superficie del Diseñador de flujo de trabajo de Windows.
Para configurar un estado como Estado inicial, haga clic con el botón derecho en el estado y seleccione Establecer como estado inicial. Además, si no hay ningún estado inicial actual, el estado inicial se puede designar arrastrando una línea desde el nodo Inicio en la parte superior del flujo de trabajo hasta el estado deseado. Cuando una actividad StateMachine se coloca en el diseñador de flujo de trabajo, está preconfigurada con un estado inicial denominado State1. Un flujo de trabajo de máquina de estado debe tener uno y solo un estado inicial.
Un estado que representa un estado de terminación en una máquina de estado se denomina estado final. Un estado final es un estado que tiene su propiedad IsFinal establecida en true
, no tiene ninguna actividad Exit, y ninguna transición que se origine en él. Para agregar un estado final a un flujo de trabajo, arrastre un diseñador de actividad FinalState desde la sección Máquina de estado del Cuadro de herramientas y colóquelo en una StateMachine actividad en la superficie del Diseñador de flujos de trabajo de Windows. Un flujo de trabajo de máquina de estado debe tener al menos un estado final.
Configuración de acciones de entrada y salida
Un estado puede tener una Entry y una Exit acción. (Un estado configurado como estado final puede tener solo una acción de entrada). Cuando una instancia de flujo de trabajo entra en un estado, se ejecutan todas las actividades de la acción de entrada. Cuando se completa la acción de entrada, los desencadenadores de las transiciones del estado se programan. Cuando se confirma una transición a otro estado, se ejecutan las actividades de la acción de salida, aunque el estado vuelva al mismo estado. Una vez completada la acción de salida, se ejecutan las actividades de la acción de la transición y, a continuación, se realiza la transición al nuevo estado y se programan sus acciones de entrada.
Nota:
Al depurar un flujo de trabajo de máquina de estados, los puntos de interrupción se pueden colocar en la actividad de la máquina de estados raíz y los estados del flujo de trabajo de máquina de estados. Es posible que los puntos de quiebre no se coloquen directamente en las transiciones, pero se pueden colocar en cualquier actividad contenida dentro de los estados y transiciones.
Crear y configurar transiciones
Todos los estados deben tener al menos una transición, excepto para un estado final, que puede no tener ninguna transición. Los cambios pueden agregarse después de agregar un estado a un flujo de trabajo de máquina de estados o se pueden crear cuando se coloca el estado.
Para agregar un State y crear una transición en un solo paso, arrastre una actividad State desde la sección State Machine del Cuadro de Herramientas y mantenga el puntero sobre otro estado en el diseñador de flujos de trabajo. Cuando el elemento arrastrado State está sobre otro State, aparecerán cuatro triángulos alrededor del otro State. Si el State se coloca en uno de los cuatro triángulos, se agrega a la máquina de estados y se crea una transición desde el origen State hasta el destino State donde fue colocado. Para obtener más información, vea Diseñador de actividad de transición.
Para crear una transición después de agregar un estado, hay dos opciones. La primera opción es arrastrar el estado desde la superficie del diseñador de flujo de trabajo y mantener el mouse sobre un estado existente y colocarla en uno de los puntos de colocación. Esto es similar al método descrito en la sección anterior. También puede mantener el mouse sobre el estado de origen deseado y arrastrar una línea al estado de destino deseado.
Nota:
Un solo estado en una máquina de estado puede tener hasta 76 transiciones creadas mediante el diseñador de flujo de trabajo. El límite de transiciones de un estado para los flujos de trabajo creados fuera del diseñador solo está limitado por los recursos del sistema.
Una transición puede tener un Trigger, un Conditiony un Action. El elemento Trigger de una transición se programa cuando se completa la acción Entry del estado de origen de la transición. Normalmente Trigger es una actividad que espera que ocurra algún tipo de evento, pero puede ser cualquier actividad o incluso ninguna actividad. Una vez completada la actividad Trigger , se evalúa Condition, si existe. Si no hay ninguna Trigger actividad, Condition se evalúa inmediatamente. Si la condición se evalúa como false
, se cancela la transición y se vuelve a programar la Trigger actividad de todas las transiciones del estado. Si hay otras transiciones que comparten el mismo estado de origen que la transición actual, esas Trigger acciones también se cancelan y se vuelven a programar. Si el Condition se evalúa como true
, o si no hay una condición, se ejecuta la Exit acción del estado de origen y, a continuación, se ejecuta el Action de la transición. Cuando Action se completa, el control pasa al estado de destino
Las transiciones que comparten un desencadenador común se conocen como transiciones de desencadenador compartido. Cada transición de un grupo de transiciones compartidas de desencadenador tiene el mismo desencadenador, pero una Condition y una acción únicas. Para agregar acciones adicionales a una transición y crear una transición compartida, haga clic en el círculo que indica el inicio de la transición deseada y arrástrelo al estado deseado. La nueva transición compartirá un mismo desencadenador que la transición inicial, pero tendrá una condición y una acción únicas. Las transiciones compartidas también se pueden crear desde el diseñador de transiciones haciendo clic en Agregar transición de desencadenador compartido en la parte inferior del diseñador de transiciones y, a continuación, seleccionando el estado de destino deseado en los estados disponibles para conectarse .
Nota:
Tenga en cuenta que si la condición Condition de una transición se evalúa en False
(o todas las condiciones de una transición de desencadenador compartido se evalúan en False
), la transición no se producirá y se reprogramarán todos los desencadenadores para todas las transiciones desde el estado.
Para obtener más información sobre cómo crear flujos de trabajo de máquina de estado, vea How to: Create a State Machine Workflow, StateMachine Activity Designer, State Activity Designer, FinalState Activity Designer y Transition Activity Designer.
Terminología de la máquina de estado
En esta sección se define el vocabulario de la máquina de estado que se usa en este tema.
Estado
Unidad básica que compone una máquina de estado. Una máquina de estados puede estar en un estado en un momento dado.
Acción de entrada
Actividad que se ejecuta cuando se entra en el estado
Acción de salida
Una actividad ejecutada al salir del estado
Transición
Relación dirigida entre dos estados que representa la respuesta completa de una máquina de estado a una aparición de un evento de un tipo determinado.
Transición compartida
Una transición que comparte un estado de origen y un desencadenador con una o varias transiciones, pero tiene una condición y una acción únicas.
Desencadenador
Actividad de desencadenamiento que hace que se produzca una transición.
Condición
Una restricción que se debe evaluar como true
después de que se produzca el desencadenador para que se complete la transición.
Acción de transición
Actividad que se ejecuta al realizar una transición determinada.
Transición condicional
Transición con una condición explícita.
Transición automática
Transición que pasa de un estado a sí mismo.
Estado inicial
Estado que representa el punto inicial de la máquina de estado.
Estado final
Un estado que representa la finalización de la máquina de estados.