Llamada a acciones desde vistas

Puede invocar acciones desde vistas. Las acciones Application Engine.

Antes de empezar

Antes de empezar, ya debe estar creada la acción.

Acerca de esta tarea

Para llamar a una acción desde una vista, debe especificar las opciones de configuración de tipo Acción en las declaraciones de variable de la vista y seleccionar una acción predeterminada que se va a utilizar. La acción predeterminada es la interfaz de programación de aplicaciones (API) para la que debe coincidir las acciones personalizadas. Los nombres y los tipos de las entradas y salidas deben coincidir.

Procedimiento

  1. Abra una vista y, a continuación, especifique una opción de configuración de tipo de acción en las declaraciones de variable.
    1. En la página Variables , pulse el signo más junto a Opciones de configuración.
    2. En Datos, seleccione la opción de tipo Servicio , seleccione la acción predeterminada y, a continuación, proporcione un nombre para representar esta acción de opción de configuración.
      Nota: opcionalmente, los usuarios de esta vista pueden alterar temporalmente la acción predeterminada con una acción compatible.
  2. Implemente la acción.
    Llame a la acción utilizando una sintaxis de llamada JavaScript simple o una API REST.
    En la página Comportamiento, en Gestores de sucesos, seleccione un método (carga, descarga, vista, cambio o colaboración) y, a continuación, proporcione código para llamar a la acción. Utilice la siguiente guía para su código manejador de sucesos.
      • Llamando a la acción utilizando una sintaxis de llamada JavaScript :
        • Utilice: this.context.options.<service_option_name>(args)
          Tabla 1. Propiedades opcionales para el objeto args JavaScript
          Propiedad Descripción
          parámetros (Serie u objeto) Una serie JSON que representa la entrada en la acción. Si se proporciona un objeto, se serializará en formato JSON mediante JSON.stringify(). Como tal, el objeto debe ser serializable con JSON.
          carga (function) Una función de devolución de llamada cuando la llamada de acción se devuelve correctamente. La función de devolución de llamada tiene un único parámetro que contiene la salida de la llamada de acción.
          Error (función) Una función de devolución de llamada cuando la llamada de acción genera un error. La función de devolución de llamada tiene un único parámetro que contiene la información de error.
          Nota: Se llama a la acción sólo utilizando la entrada y salida JSON.
      • Llamando a la acción utilizando una API REST:
        • Uso: this.context.options.<service_option_name>.url (Esto contiene la acción URL )
        • Serialice los datos de entrada en formato JSON y añádalos al URL utilizando params como el nombre del parámetro.
        • Llame al URL utilizando una llamada XHR y especifique las siguientes propiedades de forma adecuada: handleAs, headers, sync, load, error properties.
      Restricción: Si la acción utiliza un suceso de finalización de error con código de error y datos de error, el contenido del error modelado en la acción no está disponible en la propiedad de error JavaScript o en la propiedad de error de la API REST. El mensaje de error devuelto contiene el código de error, pero ningún dato de error.
  3. Pulse Guardar o Finalizar edición.

Ejemplo

El ejemplo siguiente es código JavaScript para un manejador de sucesos 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);
Sugerencia: Si la salida de la acción es un objeto de negocio de tipo complejo, el objeto de datos que obtiene de la respuesta contiene una propiedad que contiene los metadatos del objeto, por ejemplo:
{"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 establece directamente el objeto de respuesta en el enlace, como en el siguiente ejemplo, el objeto @metadata se añade en su estructura:
this.context.binding.get("value").set("BookPlacedPosition",data.bookPlacedPosition);  
Cuando desencadena el suceso límite en el servidor, el servidor genera una excepción porque no espera que el suceso límite tenga el objeto @metadata. Para evitar una excepción, elimine el objeto @metadata de la respuesta antes de establecerla en el enlace, por ejemplo:
delete data.bookPlacedPosition['@metadata'];
_this.context.binding.get("value").set("BookPlacedPosition",data.bookPlacedPosition);