Mashup Builder > Services de données et liaisons > Exécution de services de données dans une application composite > Liaison d'événements et gestion de l'ordre d'exécution dans une application composite
Liaison d'événements et gestion de l'ordre d'exécution dans une application composite
Le nombre de services de données et de liaisons dans une application composite augmente à mesure que vous développez des solutions et des visualisations plus avancées. Dans ThingWorx, les événements et les abonnements sont utilisés dans le processus de développement IoT pour exécuter des services, afficher des alertes et appliquer d'autres types de logique métier. Lier des événements à des services vous permet de créer des applications interactives qui réagissent aux entrées utilisateur et d'exécuter des actions en réponse à des événements en temps réel. Les caractéristiques des événements sont les suivantes :
Ils signalent un changement d'état pour indiquer qu'une quelque chose s'est produit.
Ils peuvent se produire qu'ils soient ou non liés à un service qui exécute le code. Les événements qui ne sont pas liés n'affectent pas l'état de l'application.
Ils peuvent se déclencher chaque fois que les services liés sont exécutés pour un motif quelconque.
Lors de l'exécution de l'application composite, des événements peuvent se produire au niveau d'une application composite, d'un widget, d'une fonction ou d'un service de données. Vous pouvez lier des événements pour exécuter les types de services suivants :
Services de données ajoutés au panneau Données.
Services d'application composite, tels que les services Refresh et ResetInputsToDefaults.
Services de widget, tels que le widget Bouton TriggerClick.
Les services de fonction, tels que le service Evaluate de la fonction Expression.
Vous pouvez utiliser des événements pour concevoir des applications composites interactives qui répondent aux actions exécutées par un utilisateur, telles que l'événement Clicked d'un bouton ou l'événement ValueChanged d'un champ de saisie. L'événement Loaded d'application composite est généralement utilisé pour exécuter des services de données qui affichent des données dans une application composite.
Gestion de l'ordre d'exécution des fonctions et des services de données
Les applications composites contiennent des collections de widgets, de fonctions et de services qui exécutent une plage de tâches. Certains services peuvent être exécutés en parallèle pour optimiser l'efficacité. Toutefois, certains services dépendent de l'entrée d'un autre service et doivent être exécutés dans un ordre séquentiel. Vous pouvez utiliser l'événement de service ServiceInvokeComplete pour créer une dépendance entre deux services. Un service dépendant ne s'exécute pas tant que le service dont il dépend n'est pas exécuté. Par exemple, si la fonction A dépend de la fonction B, la fonction B ne s'exécute que lorsque la fonction A s'exécute et est terminée.
La liste suivante décrit l'ordre d'exécution par défaut au moment de l'exécution :
D'abord, les expressions JavaScript qui sont définies dans les fonctions Expression et Validateur sont évaluées de manière asynchrone, sauf si vous utilisez des événements pour définir l'ordre d'exécution.
Ensuite, les services de données sont exécutés de manière asynchrone, à moins qu'un ordre spécifique ne soit défini à l'aide d'événements dans l'application composite.
Lorsque vous liez un événement à plusieurs services de données ou fonctions dans les versions précédentes de ThingWorx, l'ordre dans lequel les liaisons étaient créées dans une application composite établissaient la séquence de leur exécution. Si des modifications supplémentaires étaient apportées aux applications composites existantes ou que des liaisons étaient mises à jour, l'ordre d'exécution pouvait être affecté.
Ce comportement a changé dans les versions 9.3.2, 9.2.7, 9.1.11 et 9.0.16 ou ultérieures de ThingWorx Platform. Lorsque vous utilisez les nouvelles fonctions sécurisées standard, vous ne pouvez pas vous fier à l'ordre dans lequel elles sont définies ou liées dans Mashup Builder. Pour vous assurer que l'ordre d'exécution reste cohérent, toutes les expressions sont exécutées avant les services lors de l'exécution.
Utilisez les événements de sortie de la fonction pour définir la séquence correcte d'évaluation des expressions. Des problèmes peuvent survenir si l'application composite repose sur un ordre spécifique lorsque les expressions sont évaluées. La complexité de l'application composite et le temps d'évaluation de l'expression peuvent déterminer à quel moment un résultat devient disponible. Lors de la liaison de plusieurs paramètres d'entrée à une fonction, il est recommandé que les entrées soient liées à partir du même service ou widget de sortie afin d'éviter de transmettre des entrées partiellement définies lorsqu'une expression est évaluée.
Vous pouvez utiliser des événements pour définir un ordre séquentiel. Par exemple, utilisez l'événement de service ServiceInvokeCompleted dans le panneau Propriétés des données pour exécuter le service dépendant à la place de l'événement d'application composite Loaded.
Lorsque votre logique métier requiert la création de fonctions dépendantes, vous devez utiliser l'événement de fonction Expression Changed en plus de la propriété Output. De même, utilisez les événements True et False de la fonction Validateur pour exécuter les services liés qui dépendent de la sortie de la fonction. L'exemple suivant présente une liaison entre une expression, une fonction Validateur et un service de données. Pour exécuter les fonctions dans un ordre séquentiel, l'événement de fonction Expression Changed est utilisé pour évaluer le validateur. Les événements True et False du validateur sont également liés à un service et à une fonction Message de statut.
Il n'est pas recommandé de lier des propriétés Output et State sans utiliser d'événements de fonction pour définir l'ordre d'exécution. La fonction Validateur peut être évaluée avant la fonction Expression et renvoyer une valeur incorrecte au moment de l'exécution.
Est-ce que cela a été utile ?