Services d'objet
Les services d'objet sont des fonctions qu'un objet peut exécuter. Chaque objet peut avoir un ou plusieurs services. Vous pouvez définir des services au niveau Forme d'objet, Modèle d'objet ou Objet. Une requête portant sur un objet de base de données est un exemple de service.
Il existe plusieurs méthodes d'implémentation, ou gestionnaires, pour les services selon le modèle que vous utilisez. Script, SQL Query et SQL sont des exemples de gestionnaires. Des gestionnaires supplémentaires peuvent être disponibles selon la fonctionnalité spécifique d'un objet, comme un objet Edge.
L'implémentation spécifique d'un service défini par l'utilisateur est effectuée via un script côté serveur (actuellement via SQL ou JavaScript). Le service peut alors être appelé via une URL, une application compatible client REST, ou par un autre service dans ThingWorx.
Lorsque vous créez un service, vous pouvez définir des propriétés d'entrée et une sortie. Les entrées et sorties peuvent relever de tous les types de données standard ThingWorx. Chaque service peut également avoir des autorisations d'exécution distinctes spécifiées dans la définition de service. Un service n'est pas obligé d'avoir des entrées ou des sorties, mais il possède généralement les unes ou les autres, voire les deux. Par exemple, si vous souhaitez envoyer un planning de livraison à un camion, l'objet Camion peut avoir un service avec une entrée nommée PlanningLivraison et un type de XML. Le service peut prendre les données entrantes et associer une propriété d'objet du camion dans une table de données.
Si vous souhaitez envoyer la sortie directement à un widget d'application composite, vous devez choisir une sortie dont le type de base est INFOTABLE. Si vous choisissez de générer une table d'informations, vous devez sélectionner une forme de données. La forme de données indique à l'application quelles colonnes et quels types de données seront renvoyés de manière à formater les données. Vous pouvez choisir un certain nombre d'entrées selon vos exigences. Par exemple, votre sortie peut prendre la forme d'une requête SQL adressant une base de données qui renvoie des données à une application composite. Le service fait automatiquement partie de l'API REST du serveur d'application ThingWorx (le même que pour toutes les définitions dans votre modèle). Vous pouvez utiliser le service via un appel REST depuis une autre application ou dans une application composite.
En appelant un service, si vous définissez la sortie en tant que table d'informations, vous pouvez demander que le résultat soit présenté au format HTML, JSON ou XML à l'aide d'un appel d'URL et du paramètre Accept URL (pour en savoir plus, consultez la rubrique
API REST ThingWorx). En raison de cette flexibilité et de la capacité de l'environnement d'une application composite à facilement exploiter une table d'informations, il est recommandé d'utiliser ce format comme modèle de conception par défaut. Les besoins spécifiques, comme une sortie au format XML, peuvent être satisfaits au besoin.
Une fois que vous avez défini l'interface de traitement de script, vous pouvez implémenter le service en cliquant sur la colonne Gestionnaire du service. Vous êtes redirigé dans l'éditeur d'implémentation de service. Dans l'éditeur d'implémentation, vous choisissez le Gestionnaire (SQL Query ou Script). SQL Query est uniquement disponible pour une entité base de données. L'implémentation de script est le fait d'un moteur de scripts Java côté serveur.
Avec SQL Query, vous saisissez une requête respectant la syntaxe que vous utilisez avec la base de données source. Vous pouvez utiliser des entrées de service en tant que paramètres dans la requête, comme vous le feriez avec les déclarations préparées. Si votre propriété de sortie est une table d'informations, vous n'avez pas besoin de manipuler les résultats. Le résultat de requête apparaît dans la table d'informations et est disponible en tant que sortie.
|
Il n'est pas recommandé d'utiliser une chaîne au format '--[[]]' and '[[]]' dans une requête SQL pour un objet de base de données. Si vous souhaitez utiliser une chaîne dans le service de requête SQL, insérez cette chaîne dans la variable d'entrée, puis transmettez cette valeur au service SQL.
|
Le gestionnaire de script est une méthode puissante permettant d'utiliser l'ensemble des données, objets et services sur le serveur pour répondre aux besoins de votre application. Vous pouvez effectuer des calculs et des consultations, appeler des services ou accéder à des propriétés d'autres objets du modèle. Lorsque vous sélectionnez Script en tant que gestionnaire, plusieurs assistants de script vous sont proposés. Vous pouvez voir les entrées pour le script, les propriétés, les services et les événements de l'objet que vous êtes en train de modifier. Un double clic vous permet de coller ces entrées dans la fenêtre de script. Vous pouvez également parcourir les propriétés, les services et les événements de toute autre entité de votre système. Vous pouvez combiner toutes les fonctionnalités de modèle au sein de votre service.
|
Si le script est appelé depuis une page Web ou une URL, il s'exécute dans le contexte de l'utilisateur connecté. Si l'utilisateur n'a pas accès aux événements, aux propriétés ou aux services d'exécution d'une entité du script, ce dernier peut échouer.
|
L'éditeur d'implémentation de script possède également des systèmes d'aide à la syntaxe et des extraits de code pour faciliter la création des scripts.
|
Par défaut, le délai d'expiration d'un script sur ThingWorx Platform est de 30 secondes. Au-delà, la plateforme met fin à l'exécution. Un administrateur ThingWorx peut configurer le délai d'expiration des scripts dans la section des paramètres de base du fichier platform-settings.json file.
|
Services asynchrones
Les services asynchrones sont créés et exécutés dans leur propre thread. Ils ne peuvent pas générer une valeur de retour, car lorsque vous les exécutez, le thread est créé et s'exécute de manière indépendante sur la plateforme. Si l'appel est effectué depuis un autre service, le service appelant n'attend pas la fin du service asynchrone. Cela peut s'avérer particulièrement utile pour les services dont l'exécution demande du temps, notamment ceux associés à des timers qui actualisent la structure de données en arrière-plan ou qui effectuent des tâches de maintenance du système.
Si vous choisissez Asynchrone dans l'éditeur Nouveau service, l'option Mettre les appels en attente apparaît. Cette option concerne les services avec liaison distante qui placent en file d'attente l'exécution des services si l'objet distant n'est pas connecté. ThingWorx place en file d'attente toutes les tentatives d'exécution d'un service, puis les exécute séquentiellement lorsque l'objet distant est connecté à nouveau.
|
Les propriétés des objets distants ne sont pas mises à jour pour les périphériques contrôlés par Edge.
|
Statistiques relatives aux services
Le sous-système d'utilisation collecte les données relatives aux services JavaScript qui sont arrêtés après expiration d'un délai. Pour plus d'informations, consultez la rubrique
Statistiques relatives à l'exécution de scripts terminée en raison d'un délai d'expiration .
Exécution de services à partir de modèles d'objet et de formes d'objet
Vous pouvez exécuter des services à partir de modèles d'objet et de formes d'objet. Le cas échéant, vous pouvez avoir besoin de spécifier un objet implémenté à partir duquel exécuter le service. Dans l'onglet Exécuter, sélectionnez un objet dans le champ Objet implémentant.