En la búsqueda de nuevas soluciones técnicas para reducir los tiempos de desarrollo y complejidad, me he encontrado con esta nueva característica que ha sido liberada en Microsoft Dynamics Finance and Operations.
Durante el transcurso de los años, me he encontrado con varios requerimientos en las que se necesita gestionar los estados de un registro, por ejemplo:
Una de las soluciones técnicas que he aplicado está enfocada en crear clases para que gestionen los diferentes estados del registro cuando el usuario ejecute una acción sobre los registros. Esta forma tradicional con la que he venido trabajando es conocida por todos.
Buenos, les cuento que con una nueva funcionalidad establecida en Dynamics 365 FO, esta operación se puede manejar de forma automática, ahorrando un poco de tiempo en desarrollo, esta nueva característica es conocida como Maquina de estado, a continuación proporcionaré la información necesaria para que pueda ser implementada por ustedes en sus nuevos requerimientos.
Realicé una pequeña investigación y me encontré que este concepto ya se aplicaba a los flujos de trabajo en .Net y en otros lenguajes de programación, obviamente, la solución implementada en Dynamics 365 FO trae sus limitantes.
Bueno, Aquí les traigo un ejemplo sencillo para aclarar dudas y entender esta característica.
Primero, consideremos que tenemos un formulario, hemos agregado un origen de datos y en el diseño un grid que nos permita ingresar información.
Como podemos apreciar en el grafico anterior, tenemos una columna para gestionar el estado de cada registro, al estado lo hemos creado con los siguientes elementos: Post, Draft, Open, None.
Ahora, resulta que necesitamos que estos estados se gestionen de forma automática, es decir, que los cambios y validaciones entre los diferentes estados se puedan realizar sin la necesidad de agregar código fuente, aquí es donde podemos sacar provecho de las características brindada por Maquina de estado.
Se preguntarán como funciona, pues, no es complejo, y lo que necesitamos es agregar ciertos elementos a un nodo de la tabla y configurar el comportamiento de los estados, estos comportamientos se les denomina transiciones entre estados.
En nuestro ejemplo, modificamos la tabla para agregar una nueva Maquina de estado, de la siguiente manera:
Si nos fijamos en las propiedades de cada nuevo elemento que hemos agregado, vamos a observar que todo se vincula a un campo de la tabla (campos base enum) que es encargada de presentar el estado de cada registro.
Si en alguna ocasión ya trabajaste con los flujos de trabajo, te darás cuenta de que la Máquina de estado requiere de un estado inicial, intermedio y final. Es a partir de estos estados que nosotros configuramos las transiciones que necesitamos que se presenten y se validen.
Por ejemplo, vamos a crear 3 menús ítem para que trabajen con la Máquina de estado y luego presentar en nuestro formulario.
La propiedad del menú ítem quedaría de la siguiente manera:
Se preguntarán en que momento hemos creado la clase para que gestione estos estados, la respuesta es, el estándar crea automáticamente esta clase cuando nosotros ejecutamos la acción de Generar la Maquina de estado.
La acción de generar la Maquina de estado se debe enviar cada vez que terminamos de configurar nuestros estados o hayamos realizado algún cambio
En la siguiente imagen podemos ver la opción de Generar:
La siguiente parte de la configuración es importante, aquí es donde establecemos el vinculo con la Máquina de estado creada en nuestra tabla.
De esta forma podemos crear varios menú ítems que utilicen la configuración que hemos establecido.
El resultado final es tener un formulario que utilice esta nueva característica:
Ahora, una prueba de la funcionalidad que acabamos de desarrollar.
Vamos a suponer que el estado del registro se encuentra en Borrador:
Al momento de presionar el botón Abrir, la maquina de estado realiza todas las validaciones correspondientes y actualiza el registro con el nuevo estado, de la siguiente forma:
Realicemos otra prueba, volvamos a iniciar el estado a Borrador:
Presionamos sobre el botón Registrar, vamos a observar que la validación de la máquina de estado entra en acción:
Esto nos indica que el sistema valida los estados de acuerdo con la configuración que hemos establecido. Para nuestro ejemplo, nosotros hemos restringido que desde el estado Borrador solo se puede pasar a estado Abierto y no Registrar.
Con este ejemplo queremos presentar esta nueva característica, esperamos que sea de utilidad al momento de plantear nuevas soluciones técnicas en sus requerimientos.
Ismael Utitiaj
Product Innovation Consultant
Attomo Group S.A