Rappels avancés REST

De RAD Studio
Aller à : navigation, rechercher

Remonter à DataSnap REST


Les rappels avancés vous permettent, depuis une page web, de recenser des fonctions JavaScript avec le serveur, et de spécifier sous quelle condition vous voulez qu'elles soient notifiées en spécifiant l'ID du canal à écouter. Ceci permet à un simple client de recevoir des notifications quasi instantanées du serveur, sans devoir constamment émettre des requêtes pour voir si quelque chose a été modifié ou s'est produit.

Pour effectuer des notifications depuis le serveur, vous devez d'abord déplacer le composant serveur et tous les composants de classe serveur sur une fiche de module de données (ou quelque part ailleurs où ils créeront une instance unique -- à l'extérieur du module web). Le serveur a des fonctions de diffusion et de notification qui prennent un ID de canal et un objet TJSONValue 'message'. La notification prend des paramètres supplémentaires pour spécifier le rappel client exact sur lequel envoyer le message. Si vous voulez diffuser un message à chaque fois qu'un composant mémo est modifié, ajoutez un événement pour la modification de ce composant, et ajoutez-y :

 
 Val := TJSONString.Create(Memo1.Text);
 [DSServer].BroadcastMessage('MemoChannel', Val); //'MemoChannel' can be replaced by anything
 

Puis dans le code client, ajoutez une fiche contenant une zone texte avec l'ID "tarea" (ou un identificateur de votre choix) et ajoutez ce code JavaScript, en vous assurant qu'il s'exécutera d'une manière ou d'une autre (soumission de fiche, chargement de page, et ainsi de suite) :

 
 var channel = new ClientChannel(null, "MemoChannel"); //this matches the server's Channel ID
 var callback = new ClientCallback(channel, null,
   function(jsonValue) {
     if (jsonValue != null) {
       document.getElementById("tarea").value = jsonValue;
     }
     return true;
 });
 channel.connect(callback);
 

Avec ce code exemple, vous avez maintenant une zone de texte dans votre navigateur web qui reste synchronisée avec ce qui est tapé dans le composant mémo sur le serveur.

Dans XE2, les rappels JavaScript REST peuvent maintenant spécifier une liste de ServerChannelNames sur lesquels écouter, au-dessus du ServerChannelName de leur canal. Il existe un paramètre final facultatif au constructeur ClientCallback, qui est un tableau JSON de noms de canaux. Ce peut être un tableau vide ou null si vous ne voulez pas spécifier des noms de canaux supplémentaires sur lesquels écouter.

C'est une nécessité particulière pour JavaScript, en raison de la limite de connexion imposée par les navigateurs. Sachez que vous pouvez simuler un comportement similaire en ayant une convention de nommage à travers tous les clients pour leurs IDs de rappel. Le serveur peut alors diffuser vers un canal spécifié ET un ID de rappel (mais pas vers le client). C'est presque identique aux rappels écoutant sur leur propre canal. Toutefois, il empêche les clients d'avoir plusieurs rappels écoutant sur le même canal. Il restreint aussi le serveur, en lui faisant spécifier le canal parent.

Voir aussi