Après la mise à jour du SDK et Python Proxy la semaine dernière, c’est au tour des API Javascript et AngularJS de passer en 1.8.2.
Ces deux nouvelles versions sont disponibles sur le repository Nuget depuis votre Visual Studio et sur le CDN Constellation.
Amélioration des méthodes sendMessage et sendMessageWithSaga
La version 1.8.2 de l’API Javascript et AngularJS améliore l’usage de ces deux méthodes.
Invoquer un MessageCallback sans paramètre
Lorsque vous invoquez un MessageCallback qui ne prend pas de paramètre d’entrée, il n’y a plus besoin de passer un objet vide « {} » dans les méthodes sendMessage et sendMessageWithSaga.
Un exemple pour bien comprendre :
1 2 3 4 5 |
// Mode Legacy constellation.server.sendMessage({ Scope: 'Package', Args: ['DemoPackage'] }, "UneMethodeSansParam", "{}"); // Avec la lib 1.8.2 constellation.server.sendMessage({ Scope: 'Package', Args: ['DemoPackage'] }, "UneMethodeSansParam"); |
Notez que vous pouvez toujours utiliser la forme « legacy », il n’y a pas de « breaking change » lorsque vous allez mettre à jour la libraire Javascript.
Cette nouveauté est également portée sur la libraire AngularJS :
1 2 3 4 5 |
// Legacy : constellation.sendMessage({ Scope: 'Package', Args: ['DemoPackage'] }, "UneMethodeSansParam", "{}"); // Avec la lib 1.8.2 constellation.sendMessage({ Scope: 'Package', Args: ['DemoPackage'] }, "UneMethodeSansParam"); |
De plus, cet ajout est également disponible sur la méthode sendMessageWithSaga.
Invoquer un MessageCallback avec plusieurs paramètres
Lorsque vous invoquez un MessageCallback qui prend plusieurs paramètres, il n’y a plus besoin de les encapsuler dans un tableau que ce soit dans la méthode sendMessage ou sendMessageWithSaga.
Un exemple pour bien comprendre :
1 2 3 4 5 |
// Mode legacy constellation.server.sendMessage({ Scope: 'Package', Args: ['DemoPackage'] }, 'UneMethodeAvecPlusieurParams', [ 'input', 2, 4, false ]); // Avec la lib 1.8.2 constellation.server.sendMessage({ Scope: 'Package', Args: ['DemoPackage'] }, 'UneMethodeAvecPlusieurParams', 'input', 2, 4, false); |
Dans la forme legacy les 4 paramètres à passer pour invoquer le MessageCallback « UneMethodeAvecPlusieurParams » sur le package DemoPackage étaient encapsulés dans un tableau. Désormais depuis la version 1.8.2, vous pouvez passer vos paramètres les uns dernière les autres dans les méthodes sendMessage ou sendMessageWithSaga.
Bien évidement vous pouvez toujours utiliser la forme « legacy », il n’y a pas de « breaking change » lorsque vous allez mettre à jour la libraire Javascript. Cette nouveauté est également portée sur la libraire AngularJS et aussi disponible sur la méthode sendMessageWithSaga.
Invoquer un MessageCallback avec message de retour (saga)
Pour uniformiser la signature de la méthode sendMessageWithSaga avec les API Python, .NET ou Arduino, le callback de retour est désormais le 1er argument de la méthode sendMessageWithSaga et non le dernier. De plus cela facilite le traitement par rapport au point cité ci-dessus.
1 2 3 4 5 6 7 8 |
// Legacy constellation.server.sendMessageWithSaga({ Scope: 'Package', Args: ['DemoPackage'] }, 'MethodeAvecReponse', ['input', 2, 4, false], function (response) { console.log("Message de reponse = ", response); }); // Avec la lib 1.8.2 constellation.server.sendMessageWithSaga(function (response) { console.log("Message de reponse = ", response); }, { Scope: 'Package', Args: ['DemoPackage'] }, 'MethodeAvecReponse', 'input', 2, 4, false); |
Dans le mode « legacy » le callback de retour était le dernier argument de la méthode sendMessageWithSaga. De plus comme expliqué ci-dessous tous les arguments à passer au MessageCallback devaient être encapsulés dans un tableau (3ème argument de la méthode sendMessageWithSaga).
Désormais depuis la version 1.8.2, le callback de retour est passé en première et vous pouvez passer vos paramètres les uns dernière les autres comme vu précédemment.
Une nouvelles fois, vous pouvez toujours utiliser la forme « legacy », il n’y a pas de « breaking change » lorsque vous allez mettre à jour la libraire Javascript et cette nouveauté est également portée sur la libraire AngularJS.
Support du hub « Package »
Désormais la libraire Javascript 1.8.2 intègre le proxy permettant de communiquer avec le hub « Package » car jusqu’à présent elle ne permettait qu’une communication avec le hub « Consumer » et « Controller » (relire cette introduction pour plus d’explications sur la lib JS).
Autrement dit il est désormais possible d’écrire des packages (virtuel) en Javascript en profitant de toutes les fonctionnalités propres aux packages (possibilité d’écrire des logs, de définir et récupérer des settings déclarés sur le serveur, de publier des StateObject, etc…).
Bien entendu cela n’a pas grand intérêt dans une page Web qu’on considère plutôt comme un Consommateur car elle a un cycle de vie éphémère (relire les concepts ici). Mais par contre cette libraire ouvre la voie pour pouvoir écrire des packages Javascript basés sur un technologie comme NodeJS qui permet de réaliser de « véritable application » en Javascript.
Le changelog complet est disponible ici.
Je pense qu’il faille détailler la procédure de création d’une sentinelle / package virtuel.
En l’état j’obtiens une 403 sur la tentative de connection au contexte Package, malgré avoir déclarer la sentinelle virtuelle, sur un type de crédentials.
Oui tout à fait, il y aura un article dédié sur l’utilisation de l’API JS pour créer des packages virtuels ainsi qu’une mise à jour des docs des API JS sur les updates de la 1.8.2