Mashup Builder > Servicios de datos y enlaces > Ejecución de servicios de datos en un mashup > Enlace de eventos y gestión del orden de ejecución en un mashup
Enlace de eventos y gestión del orden de ejecución en un mashup
El número de servicios de datos y enlaces en un mashup crece a medida que se desarrollan soluciones y visualizaciones más avanzadas. En ThingWorx, los eventos y las suscripciones se utilizan en el proceso de desarrollo de IoT para ejecutar servicios, mostrar alertas y aplicar otros tipos de lógica empresarial. El enlace de eventos a servicios permite crear aplicaciones interactivas que respondan a la entrada del usuario y realicen acciones basadas en eventos en tiempo real. A continuación se indican las características de los eventos:
Alertan un cambio de estado para indicar que ha pasado algo.
Pueden producirse independientemente de que se enlacen a un servicio que ejecute código. Los eventos que no están enlazados no afectan al estado de la aplicación.
Pueden activarse cada vez que se produce algo para ejecutar servicios enlazados.
En el tiempo de ejecución del mashup, los eventos se pueden producir en un mashup, un widget, una función o un nivel de servicio de datos. Los eventos se pueden enlazar para ejecutar los siguientes tipos de servicios:
Los servicios de datos que se añaden al panel Datos.
Servicios de mashup, como los servicios Refresh y ResetInputsToDefaults.
Servicios de widget, como el servicio TriggerClick de widget de botón.
Servicios de función, como el servicio Evaluate de función de expresión.
Se pueden utilizar eventos para diseñar mashups interactivos que respondan a las acciones que realiza un usuario, como el evento Clicked de un botón o el evento ValueChanged de un campo de entrada. El evento Loaded de mashup se utiliza normalmente para ejecutar servicios de datos que muestran datos dentro de un mashup.
Gestión del orden de ejecución de las funciones y los servicios de datos
Los mashups contienen recopilaciones de widgets, funciones y servicios que realizan un rango de tareas. Algunos servicios se pueden ejecutar en paralelo para maximizar la eficacia. Sin embargo, hay servicios que dependen de la entrada de otro servicio y deben ejecutarse en orden secuencial. El evento de servicio ServiceInvokeComplete se puede utilizar para crear una dependencia entre dos servicios. Un servicio dependiente no se ejecuta hasta que se ejecuta el servicio del que depende. Por ejemplo, si la función A depende de la función B, la función B no se ejecuta hasta que la función A se ejecuta y se completa.
En la siguiente lista se indica el orden de ejecución por defecto actual en tiempo de ejecución:
En primer lugar, las expresiones de JavaScript que se definen dentro de las funciones de expresión y validador se evalúan de forma asíncrona, a menos que se utilicen eventos para definir el orden de ejecución.
A continuación, los servicios de datos se ejecutan de forma asíncrona, a menos que se defina un orden específico mediante eventos en el mashup.
Cuando se enlaza un evento a múltiples servicios de datos o funciones de versiones anteriores de ThingWorx, el orden en que se crearon los enlaces en un mashup estableció la secuencia de su ejecución. Realizar cambios adicionales en los mashups existentes y actualizar enlaces podría afectar al orden de ejecución en tiempo de ejecución.
Este comportamiento ha cambiado en las versiones 9.3.2, 9.2.7, 9.1.11 y 9.0.16 o posterior de ThingWorx Platform. Al utilizar las nuevas funciones seguras estándar, no se puede confiar en el orden en que se han definido o enlazado en Mashup Builder. Para garantizar que el orden de ejecución se mantenga coherente, todas las expresiones se ejecutan antes que los servicios en tiempo de ejecución.
Utilice los eventos de salida de la función para definir la secuencia correcta y evaluar las expresiones. Se pueden producir incidencias si el mashup se basa en un orden específico cuando se evalúan las expresiones. La complejidad del mashup y la temporización de la evaluación de la expresión pueden determinar cuándo estará disponible un resultado. Al enlazar varios parámetros de entrada a una función, se recomienda enlazar la entrada del mismo servicio o widget de salida para evitar pasar entradas parcialmente definidas cuando se evalúe una expresión.
Se pueden utilizar eventos para definir un orden secuencial. Por ejemplo, utilice el evento ServiceInvokeCompleted del servicio del panel Propiedades de datos para ejecutar el servicio dependiente en lugar del evento Loaded del mashup.
Cuando la lógica de negocio requiere la creación de funciones dependientes, se debe utilizar el evento Changed de la función de expresión, además de la propiedad Output. Del mismo modo, utilice los eventos True y False de la función de validador para ejecutar servicios enlazados que dependan de la salida de la función. En el siguiente ejemplo se muestra un enlace entre una función de expresión o validador, y un servicio de datos. Para ejecutar las funciones en un orden secuencial, el evento Changed de la función de expresión se utiliza para evaluar el validador. Los eventos True y False del validador también están enlazados a un servicio y una función de mensaje de estado.
No se recomienda enlazar las propiedades Output y State sin utilizar eventos de función para definir el orden de ejecución. La función de validador puede evaluar antes de la función de expresión y devolver un valor incorrecto en tiempo de ejecución.
¿Fue esto útil?