Seleccione la acción de datos que ha heredado los métodos que sustituir

Cada acción de datos debe implantar varios métodos para funcionar correctamente, por lo que solo debe sustituirlos por aquellos que implanten el comportamiento que desee cambiar.

Métodos genéricos

Si están ampliando una de las clases de acciones de datos concretas, por ejemplo HTTPAPIDataAction, la mayoría de los métodos necesarios ya estarán implantados y solo tendrá que sustituir aquellos que implanten el comportamiento que desee cambiar.

En esta sección se describen los distintos métodos y su comportamiento esperado.

Todos los tipos de acciones de datos deben implantar los métodos que se describen aquí.

create(sID, sName)

Se llama al método estático create() cuando se crea una nueva acción de datos y se selecciona un Tipo de acción de datos en el menú desplegable. Este método es responsable de:

  • Crear la clase de modelo Knockout que use su acción de datos.

    La clase de modelo Knockout debe tener el ID y el nombre que se transfieren al método create() junto con los valores por defecto sensibles para el resto de propiedades. Por ejemplo, para una acción de datos de conversión de moneda tal vez desee definir la moneda por defecto para convertirla en Dólares. El modelo Knockout es el lugar correcto donde proporcionar los valores por defecto.

  • Crear una instancia de su acción de datos desde el modelo Knockout.
  • Devolver la instancia de su acción de datos.

invoke(oActionContext, oDataActionContext)

Se llama al método invoke() cuando el usuario llama a la acción de datos desde el menú contextual para un punto de datos en una visualización. El método transfiere el argumento DataActionContext que contiene metadatos que describen los puntos de datos, la visualización, los filtros, el libro de trabajo y la sesión seleccionados. Consulte Clases de servicio de acción de datos.

validate()

Se llama al método validate() en cada acción de datos cuando el usuario hace clic en Aceptar en el cuadro de diálogo Acciones de datos. El método validate() devuelve un valor null para indicar que todo es válido o un DataActionError si hay algo que no es válido. Si alguna de las acciones de datos contiene un error en el cuadro de diálogo, el error impide que el cuadro de diálogo se cierre y se muestra un mensaje de error al usuario. Con este método se valida el nombre de la acción de datos con el método this.validateName().

getGadgetInfos(oReport)

Se llama al método getGadgetInfos() para permitir a la interfaz de usuario mostrar campos de propiedad de acción de datos. El método devuelve una matriz de GadgetInfos en el orden en que desee que aparezca en la interfaz de usuario. Se proporcionan gadgets para todos los tipos de datos más comunes (por ejemplo, de texto, desplegables, de contraseñas, de selección múltiple, botón de radio, casilla de control), pero puede crear gadgets personalizados si desea campos más complicados (por ejemplo, cuando haya varios gadgets agrupados o cuando se muestren campos de gadgets distintos en función de la opción que seleccione). Es una práctica recomendada crear un método que cree cada GadgetInfo que desee en la matriz, ya que facilita que las posibles subclases seleccionen entre los GadgetInfo que haya proporcionado. Si sigue esta práctica recomendada, hay varios métodos implantados por las distintas clases base de acción de datos que pueden devolver un GadgetInfo para cada uno de los campos que usan en sus interfaces de usuario. Si también necesita uno de estos elementos GadgetInfo, llame al método create****GadgetInfo() correspondiente e introduzca su valor de retorno en su matriz de gadgets.

isAllowedHere(oReport)

Se llama al método isAllowedHere() cuando el usuario hace clic con el botón derecho en un punto de datos de una visualización y la interfaz de usuario empieza a generar el menú contextual. Si hay una acción de datos relevante para los puntos de datos seleccionados, el método devuelve true y la acción de datos aparece en el menú contextual. Si el método devuelve false, la acción de datos no aparece en el menú contextual. Piense en aceptar el comportamiento por defecto heredado de la superclase.

upgrade(oOldDataActionJS)

Si está creando la primera acción de datos, no use el método upgrade(oOldDataActionJS). Use solo este método cuando haya creado su primer modelo Knockout y cuando esté realizando cambios importantes en las propiedades de una segunda versión del modelo Knockout. Por ejemplo, si la primera versión de la acción de datos almacena una URL en su modelo Knockout, pero decide que la siguiente versión almacenará partes de componentes de URL en distintas propiedades (por ejemplo, protocol, hostname, port, path, queryString y bookmark).

La segunda versión del código de modelo Knockout le solicitaría que abriera una acción de datos que se haya guardado con la primera versión del código de modelo Knockout que puede provocar problemas. Para resolver el problema, el sistema identifica que la versión del código de acción de datos actual es más reciente que la de la acción de datos que se está abriendo, por lo que llama al método upgrade() en la nueva clase de acción de datos y la transfiere en el modelo Knockout de acción de datos anterior (serializado en un objeto JSON). A continuación, puede usar el objeto JSON anterior para rellenar el nuevo modelo Knockout y que se devuelva una versión actualizada del objeto JSON. De esta forma se garantiza que los metadatos de la acción de datos anterior sigan funcionando conforme mejore el código de acción de datos.

Métodos HTTPAPIDataAction

Si está ampliando la clase HTTPAPIDataAction, proporciona el siguiente método adicional que puede optar por sustituir:

getAJAXOptions(oDataActionContext)

El método invoke() de la acción de datos llama al método getAJAXOptions(). El método getAJAXOptions() crea el objeto AJAX Options que describe la solicitud HTTP que desea que cree su acción de datos. El método getAJAXOptions() se transfiere al objeto oDataActionContext que contiene los metadatos que describen los puntos de datos, la visualización, los filtros, el libro de trabajo y la sesión seleccionados. Defina el valor AJAX Options como sea necesario en la API de HTTP en la que está intentando realizar la integración y especifique las funciones que desea que se llamen cuando el resultado de HTTPRequest sea correcto o produzca un error. Consulte el sitio web de JQuery para obtener una explicación del objeto jQuery.ajax y de sus propiedades.

La siguiente implantación se hereda de la clase HTTPAPIDataAction. Debe volver a escribir el método heredado para especificar los requisitos. Por ejemplo, formando la solicitud HTTP y el código que maneja la respuesta HTTP. Esta implantación es útil, ya que muestra los parámetros transferidos a la función getAJAXOptions(), el objeto que se espera que devuelva y muestra un ejemplo claro de cómo estructurar el código dentro del método.

1 /**
2  * This method returns an object containing the AJAX settings used when the data action is invoked. 
3  * Subclasses may wish to override this method to provide their own behavior. 
4  * @param {module:obitech-reportservices/dataactionmanager.DataActionContext} oDataActionContext The context metadata describing where the data action was invoked from.  
5  * @returns {?object} A JQuery AJAX settings object (see http://api.jquery.com/jQuery.ajax/ for details) - returns null if there is a problem. 
6  */
7 dataaction.HTTPAPIDataAction.prototype.getAJAXOptions = function (oDataActionContext)
8 {
9    jsx.assertInstanceOfModule(oDataActionContext, "oDataActionContext", "obitech-reportservices/dataactionmanager", "DataActionContext");
10   
11   var oAJAXOptions = null;   
12   var oKOViewModel = this.getKOViewModel();
13   var sURL = oKOViewModel.sURL();
14   if (sURL)
15   {
16      // Parse the URL
17      var sResultURL = this._parseURL(sURL, oDataActionContext);
18      if (sResultURL)
19      {
20         // Parse the POST parameters (if required)
21         var eHTTPMethod = oKOViewModel.eHTTPMethod()[0];
22         var sData = null;
23         if (eHTTPMethod === dataaction.HTTPDataActionKOModel.HTTPMethod.POST)
24         {
25            var sPOSTParams = oKOViewModel.sPOSTParams();
26            sData = sPOSTParams.replace(dataaction.AbstractHTTPDataAction.RegularExpressions.LINE_END, "&");
27            sData = this._parseURL(sData, oDataActionContext, false);
28         }
29         oAJAXOptions = {
30            type: eHTTPMethod,
31            url: sResultURL,
32            async: true,
33            cache: false,
34            success: function (/*oData, sTextStatus, oJQXHR*/)
35            {
36               oDataActionContext.getReport().displaySuccessMessage(messages.HTTP_API_DATA_ACTION_INVOCATION_SUCCESSFUL.format(oKOViewModel.sName()));
37            },
38            error: function (oJQXHR/*, sTextStatus, sError*/)
39            {
40               oDataActionContext.getReport().displayErrorMessage(messages.HTTP_API_DATA_ACTION_INVOCATION_FAILED.format(oKOViewModel.sName(), oJQXHR.statusText, oJQXHR.status));
41            }
42         };
43         if (sData)
44         {
45            oAJAXOptions.data = sData;
46         }
47      }
48   }
49   return oAJAXOptions;
50 };