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
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
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);