Calling actions from views
You can invoke actions from views. The actions are called in the Application
Engine.
Before you begin
About this task
To call an action from a view, you must specify configuration options of type Action in the view variable declarations and select a default action to be used. The default action is the application programming interface (API) for which custom actions must match. The names and types of both inputs and outputs must match.
Procedure
Example
The following example is JavaScript code for a
load event
handler: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);Tip: If the action output is a complex-type business object, the data object that you
get from the response contains a property holding the metadata of your object, for example:
{"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}} If
you directly set the response object to your binding like the following example, the
@metadata object is added in your structure:
this.context.binding.get("value").set("BookPlacedPosition",data.bookPlacedPosition); When
you trigger the boundary event to the server, the server throws an exception because it does not
expect the boundary event to have the @metadata object. To avoid an exception,
remove the @metadata object from the response before you set it to the binding, for
example:delete data.bookPlacedPosition['@metadata'];
_this.context.binding.get("value").set("BookPlacedPosition",data.bookPlacedPosition);