Utilisation du service QueryImplementingThings
Si vous exécutez un clustering haute disponibilité de ThingWorx, certains états qui étaient auparavant des processus en mémoire (tels que les valeurs de propriété, l'état des objets et le statut de connexion) doivent être partagés dans l'ensemble du cluster. Par conséquent, les propriétés d'objet sont désormais stockées dans un cache Apache Ignite en mémoire, qui n'a pas d'incidence notable sur les performances ou l'ingestion des propriétés.
Des améliorations ont été apportées pour minimiser les effets de la latence sur les requêtes. Les services ont été modifiés de sorte qu'ils ne renvoient que les valeurs des propriétés qui résident sur la forme d'objet ou le modèle d'objet associé(e). Vous pouvez toujours filtrer les propriétés qui résident sur des objets d'implémentation. Toutefois, vous devez utiliser la nouvelle API GetThingPropertyValues pour renvoyer des données sur les objets d'implémentation.
* 
A partir ThingWorx 9.4.0, un nouveau paramètre booléen, isSortFirst, a été ajouté au service QueryImplementingThings. La valeur par défaut du paramètre isSortFirst est false et le service continue à fonctionner comme auparavant. Si isSortFirst est défini sur true, le service QueryImplementingThings commence par trier le jeu de résultats, puis applique la limite.
* 
Limitez les filtres et triez uniquement les propriétés définies sur la forme d'objet ou le modèle d'objet. Evitez de filtrer ou de trier les propriétés qui résident sur des objets d'implémentation. Vous pouvez envisager de retirer des propriétés d'objets et de les placer sur la forme d'objet ou le modèle d'objet implémenté(e).
GetThingPropertyValues
GetThingPropertyValues est une nouvelle API qui récupère les valeurs des propriétés en bloc afin de limiter le nombre d'appels de cache requis pour remplir l'ensemble de données de retour. Les entrées sont thingRefrence, une table d'informations de noms et de types d'objets, et dataShapeName, qui est une chaîne identifiant la forme de données des propriétés requises. GetThingPropertyValues renvoie une table d'informations de valeurs de propriété pour chaque objet identifié dans l'entrée thingReference.
Par exemple, pour utiliser cette API, vous pouvez effectuer les opérations suivantes :
1. Exécutez QueryImplementingThings ou QueryImplementingThingsWithData par rapport à une forme d'objet ou un modèle d'objet.
Pour optimiser les performances, utilisez QueryImplementingThings, qui renvoie les noms d'objets avec les champs de base.
2. Collectez tous les noms d'objets à partir de QueryImplementingThings.
3. Créez une forme de données comprenant toutes les différentes propriétés de tous les objets différents.
4. Appelez getThingPropertyValues avec les collections de noms d'objet de l'étape 2 et le nom de la forme de données de l'étape 3.
Le JavaScript de cet exemple est :
var result = ThingShapes["testThingShapeOneForQITService<>626037"].QueryImplementingThings({
maxItems: undefined /* NUMBER */,
nameMask: undefined /* STRING */,
query: undefined /* QUERY */,
tags: undefined /* TAGS */
});
var resultQIT = result;
var params = {
infoTableName : "InfoTable",
dataShapeName : "ThingRefDataShape"
};
// CreateInfoTableFromDataShape(infoTableName:STRING("InfoTable"), dataShapeName:STRING):INFOTABLE(ThingRefDataShape)
result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape(params);
var thingRef = result;
for(var x=0 ; x<resultQIT.length ; x++){
var thingName = resultQIT[x].name;
var newEntry = new Object();
newEntry.name = thingName; // STRING
newEntry.type = "Thing"; // STRING
thingRef.AddRow(newEntry);
}
// result: INFOTABLE dataShape: "RootEntityList"
result = Resources["EntityServices"].GetThingPropertyValues({
thingReferences: thingRef /* INFOTABLE */,
dataShapeName: "QITDataShape<>392587" /* DATASHAPENAME */
});
Est-ce que cela a été utile ?