Sin duda lo más demandado por parte de los usuarios de D365FO es poder visualizar datos en tiempo real. Es cierto que todos los datos de D365FO son en tiempo real, faltaría más que estuvieran desactualizados; pero muchos clientes/usuarios antes de migrar a D365FO usan ciertas plataformas que les proporcionan gráficos o estadísticas con una exactitud y una criticidad que no pueden perder con la nueva herramienta.
Pongamos el caso de una planta de producción que mide en cada momento el rendimiento de una línea productiva. Este rendimiento está medido en base a la cantidad de productos que pasan por segundo por un lector o sensor. Cuando esta frecuencia disminuye constituye una pérdida para la empresa y puede ser consecuencia de algún problema aguas arriba o que simplemente no se está usando al 100% la capacidad de producción.
Teóricamente estos factores y estas mediciones tienen que estar previstas y ser programadas en el sistema pero nada es ideal y perfecto, y al final todo se ve sometido a actuaciones humanas y eventos externos.
Así pues volviendo a nuestro ejemplo tenemos a un responsable de producción que está monitorizando en todo momento el rendimiento de la cadena productiva y en base a esos valores establece planes de actuación sobre los recursos. Incluso puede llegar a ver si en una de sus líneas productivas se ha producido una parada por algún motivo. En el momento de migrar su solución actual a D365FO no podemos privarle de esos indicadores inmediatos.
A continuación os detallo alguna de las alternativas en D365FO que podríamos usar y los inconvenientes que nos encontraríamos con cada una de ellas:
Tecnología | Tiempo real | Inconvenientes |
PowerBI embebido | No | Requiere de actualizar el Entity Store periódicamente |
Power Platform | Sí pero con decalaje de varios segundos (quizás minutos) | Requiere de crear gráficos e interfasar los datos entre D365FO y Dataverse. Mantenimiento de varias aplicaciones (D365FO y PowerPlatform) |
Aplicación externa | Sí | Ya que migramos a D365FO no queda muy bien que esta parte no esté dentro del ecosistema |
Gráficos nativos | Sí | Requiere de refresco del formulario |
Vemos pues que las distintas opciones que se detallan en la tabla son aproximaciones que nos podrían llegar a servir. Cuando las exponemos al cliente las dos primeras quedan automáticamente descartadas porque aparte de no cumplir el requerimiento podrían llegar a comportar un fallo en la planta por no ser fiables a tiempo real.
Como expertos en D365FO tenemos que decantarnos por la última. Pasar a desarrollar una aplicación externa que no dependa de Dynamics no tiene mucha lógica si queremos dar buena impresión al cliente y queremos que su planta de producción esté totalmente integrada en la nube.
Diseño de la solución
Necesitamos mostrar en un gráfico lineal el número de productos que circulan por un sensor en cada momento para que el operario/responsable sepa en todo momento el rendimiento de su línea de producción.
Elementos y características necesarias:
Origen de datos (tabla o similar)
Formulario nuevo
Gráfico lineal
Sensor en la planta de producción
Interface para enviar la información desde la planta a Dynamics
Auto-refresco del formulario
Origen de datos
Primero de todo creamos una tabla con dos campos donde introduciremos los datos. Un campo para el valor a almacenar y otro para que quede registrada la fecha y hora de la medición:
Formulario nuevo
Creamos un formulario con la siguiente estructura. Podemos ver el control de tipo Chart donde podemos configurar los distintos valores y tipologías de gráfico que podemos usar:
Gráfico lineal
Seguidamente configuramos nuestro gráfico conforme a los datos de la tabla y a la visualización que queremos obtener:
Sensor en la planta de producción
Este punto es el menos rígido ya que dependerá prácticamente en su totalidad de la infraestructura del cliente. Puede ser un servicio que registra una medición en una tabla SQL o hasta un lector que envía la lectura mediante un puerto COM a un servidor.
Interface para enviar la información desde la planta a Dynamics
En cualquier caso y para el ejemplo que estamos montando hemos montado una PowerApp que envía cada 4 segundos un número aleatorio a Dynamics mediante un servicio publicado en D365FO.
El proyecto de D365FO quedaría de la siguiente manera una vez terminado el ejemplo:
Autorefresco
El autorefresco del formulario es la parte más importante pues de alguna manera tenemos que conseguir que sin tener que actualizar la página el contenido de nuestro gráfico se vaya actualizando con la tasa de refresco que queramos.
Un ejemplo de ello lo podemos observar y extraer del nuevo control en planta de D365FO. Allí se muestra la hora actual (esquina superior derecha) y ésta se va actualizando cada minuto sin tener que refrescar el formulario:
Esto lo hace con un control de tipo "Timer" al que podemos predefinirle un tiempo en segundos de refresco (o parametrizarlo) y en el método elapsed añadir la funcionalidad que queremos que se ejecute cada vez que el timer llegue a su fin (después de los X segundos):
[Control("Custom")]
class KeepAliveTimer
{
public int elapsed()
{
int ret = super();
element.setDateTimeLabel();
return ret;
}
}
Una vez lo tenemos todo preparado es momento de ejecutar la PowerApp para que vaya enviando los datos y abrir el formulario de Dynamics para que podamos ver el resultado y...VOILÀ! Tenemos un sensor que envía información a D365FO cada 4 segundos y un gráfico que nos muestra la medición con una tasa de refresco a 10 segundos (podemos bajarla incluso más).
Podemos profundizar mucho más y cambiar las propiedades de los gráficos para poder conseguir mejores resultados. Os dejo con una imagen de gráfico categorizado:
Espero que os haya sido de ayuda y que podáis implementar algo parecido. El tiempo real ya no será un problema!!!
Quiero agradecer especialmente a los compañeros que investigaron sobre este tema y aportaron luz a ello.