Appel d'actions à partir de vues

Vous pouvez appeler des actions à partir de vues. Les actions sont appelées dans la section Application Engine.

Avant de commencer

Avant de commencer, l'action doit avoir été créée au préalable.

A propos de cette tâche

Pour appeler une action à partir d'une vue, vous devez spécifier des options de configuration de type Action dans les déclarations de variable de vue et sélectionner une action par défaut à utiliser. L'action par défaut est l'interface de programme d'application (API) à laquelle doivent correspondre les actions personnalisées. Les noms et les types des deux entrées et sorties doivent correspondre.

Procédure

  1. Ouvrez une vue, puis spécifiez une option de configuration de type Action dans les déclarations de variable.
    1. Dans la page Variables , cliquez sur le signe plus en regard de Options de configuration.
    2. Sous Données, sélectionnez l'option de type Service , sélectionnez l'action par défaut, puis indiquez un nom pour représenter cette action d'option de configuration.
      Remarque: L'action par défaut peut éventuellement être remplacée par une action compatible par les utilisateurs de cette vue.
  2. Implémentez l'action.
    Appelez l'action à l'aide d'une syntaxe d'appel JavaScript simple ou d'une API REST.
    Dans la page Behavior, sous Event handlers, sélectionnez une méthode (load, unload, view, change, ou collaboration), puis fournissez le code pour appeler l'action. Suivez les instructions ci-dessous pour le code de gestionnaire d'événements.
      • Appel de l'action à l'aide d'une syntaxe d'appel JavaScript :
        • Utilisez : this.context.options.<service_option_name>(args)
          Tableau 1. Propriétés facultatives pour l'objet args JavaScript
          Propriété Description
          params (Chaîne ou Objet) Chaîne JSON qui représente l'entrée de l'action. Si un objet est fourni, il sera sérialisé dans le format JSON en utilisant JSON.stringify(). En tant que tel, l'objet doit être sérialisable JSON.
          charger (fonction) Fonction de rappel lorsque l'appel d'action est renvoyé correctement. La fonction de rappel comporte un seul paramètre qui contient la sortie de l'appel d'action.
          Erreur (fonction) Fonction de rappel lorsque l'appel d'action génère une erreur. La fonction de rappel comporte un seul paramètre qui contient les informations d'erreur.
          Remarque: L'action est appelée uniquement à l'aide d'une entrée et d'une sortie JSON.
      • Appel de l'action à l'aide d'une API REST :
        • Utilisation : this.context.options.<service_option_name>.url (contient l'action URL.)
        • Sérialisez les données d'entrée dans le format JSON et ajoutez-les à l'adresse URL en utilisant params comme nom de paramètre.
        • Appelez l'URL à l'aide d'un appel XHR et spécifiez les propriétés suivantes en conséquence : handleAs, headers, sync, load, error properties.
      Restriction: Si l'action utilise un événement de fin d'erreur avec un code d'erreur et des données d'erreur, le contenu de l'erreur modélisée dans l'action n'est pas disponible dans la propriété d'erreur JavaScript ou dans la propriété d'erreur de l'API REST. Le message d'erreur renvoyé contient le code d'erreur, mais pas les données d'erreur.
  3. Cliquez sur Enregistrer ou sur Terminer l'édition.

Exemple

L'exemple suivant est un code JavaScript pour un gestionnaire d'événements load :
var _this = this;
var input = {text: this.context.options.service_option_name.get("value")};
var serviceArgs = {
  params: JSON.stringify(input),
  load: function(data) {
console.log("service returned: ", data);  
    // now dynamically create the img tag
    require(["dojo/_base/url"], function(url) {
       var relPath = new url(data.path).path;
       domConstruct.create("img", {src:relPath, style:"margin:5px 0px"}, _this.context.element, "first");     
    });
  },
  error: function(e) {console.log("service call failed: ", e);}
} 
this.context.options.service_name(serviceArgs);
Astuce: Si la sortie de l'action est un objet métier de type complexe, l'objet de données que vous obtenez de la réponse contient une propriété contenant les métadonnées de votre objet, par exemple:
{"status":"200","data":{"serviceStatus":"end","key":"@54","step":"End","data":
{"bookPlacedPosition":{"Floor":1,"Room":"101","Row":2,"@metadata":
{"dirty":true,"shared":false,"rootVersionContextID":"2064.c30905ba-8d17-41f4-
b2a8-08cbb6516ff0T","className":"PlacedPosition"}}},"actions":null}} 
Si vous définissez directement l'objet de réponse à votre liaison comme dans l'exemple suivant, l'objet @metadata est ajouté dans votre structure :
this.context.binding.get("value").set("BookPlacedPosition",data.bookPlacedPosition);  
Lorsque vous déclenchez l'événement limite sur le serveur, le serveur génère une exception parce qu'il ne s'attend pas à ce que l'événement limite puisse disposer de l'objet @metadata. Pour éviter une exception, supprimez l'objet @metadata de la réponse avant de le définir dans la liaison, par exemple :
delete data.bookPlacedPosition['@metadata'];
_this.context.binding.get("value").set("BookPlacedPosition",data.bookPlacedPosition);