Modelos calculados

Un modelo calculado es un modelo virtual. Se crea mediante el cálculo de datos desde otros modelos o recursos externos. Los datos se procesan y almacenan en el servidor de App Maker o del cliente, en lugar de en una base de datos.

Un modelo calculado puede realizar estas acciones:

  • sintetizar un informe personalizado a partir de los datos de otro modelo
  • obtener datos desde un servicio web externo

Tipos de modelos calculados

App Maker tiene tres tipos de modelos calculados:

  • SQL calculado: el modelo usa una consulta de SQL para la base de datos de Cloud SQL de la app a fin de propagar sus registros. Obtén más información sobre el modelo calculado de SQL.
  • Calculado: el modelo usa una secuencia de comandos de consulta del lado del servidor que realiza cierta lógica y muestra un arreglo de registros. Obtén más información sobre la Secuencia de comandos de consulta y un ejemplo.
  • Calculado del lado del cliente: el modelo usa una secuencia de comandos de consulta del lado del cliente para recuperar datos de manera asíncrona o usa una devolución de llamada con el fin de mostrar resultados asíncronos.

Modelos calculados del lado del cliente

Los modelos calculados del lado del cliente usan una secuencia de comandos de consulta personalizada que se ejecuta en lugar de la consulta de fuentes de datos normales y pasa los filtros del parámetro de consulta.

Para usar una secuencia de comandos de consulta personalizada, sigue estos pasos:

  1. Dirígete a la pestaña Fuentes de datos del modelo calculado del lado del cliente.
  2. En el cuadro Consulta, ingresa tu secuencia de comandos de consulta personalizada. Tu secuencia de comandos debe incluir una declaración de muestra.
  3. Para procesar los datos que se recuperan desde servicios de terceros, sigue estos pasos:
    1. Asigna tu secuencia de comandos con la consulta a la API de terceros.
    2. Asigna los datos mostrados a los registros del modelo.

¿Qué modelo debería usar?

Revisa la tabla siguiente y las limitaciones del modelo calculado a fin de determinar el mejor tipo de modelo para usar.

Objetivo Modelo que se debe usar
Reestructura los datos de un modelo en tu app. Modelo (del lado del servidor) SQL calculado o Calculado.

Si tu modelo calculado usa varios de los mismos campos que un modelo existente, usa una fuente de datos de consulta, en lugar de un modelo calculado del lado del servidor. Una fuente de datos de consulta suele ser más simple.

Recupera datos con una API y una biblioteca del lado del cliente. Modelo calculado del lado del cliente

Con este modelo puedes obtener datos mediante la API de Google o servicios de terceros, como el SDK de Facebook o las API de SalesForce.

Muestra con rapidez los componentes de la app, como gráficos y menús dinámicos, sin consultar al servidor. Modelo calculado del lado del cliente

Limitaciones

Limitaciones del modelo calculado del lado del servidor:

  • No se pueden modificar ni borrar sus registros (los registros son de solo lectura).
  • Los registros no se pueden crear en el cliente.
  • No pueden tener relación con otros modelos de App Maker, incluso ellos mismos.
  • Las consultas del modelo SQL calculado no están sujetas a las restricciones de seguridad establecidas para los modelos consultados. Establece restricciones de seguridad para el modelo de SQL calculado en su pestaña de Seguridad.

Limitaciones del modelo calculado del lado del cliente:

  • No se pueden modificar ni borrar sus registros (los registros son de solo lectura).
  • No pueden tener relación con otros modelos de App Maker, incluso ellos mismos.
  • No admiten configuración de paginación ni de ordenamiento.
  • No admiten eventos ni configuración de seguridad.
  • Se muestra un error si un resultado se muestra más de una vez, como una llamada de devolución de llamada doble o una llamada de devolución de llamada y devolución.

Ejemplos de modelos calculados

Modelo SQL calculado

Para obtener ejemplos de modelos SQL calculados, consulta Cloud SQL.

Secuencia de comandos de consulta del lado del servidor

En la secuencia de comandos de consulta siguiente, se usa un campo Location del modelo Employee para calcular cuántos empleados se encuentran en cada ubicación.

var calculatedModelRecords = [];
    var recordsByLocation = {};
    var allEmployees = app.models.Employee.newQuery().run();
    for (var i = 0; i < allEmployees.length; i++) {
      var employee = allEmployees[i];
      if (!recordsByLocation[employee.Location]) {
        var calculatedModelRecord = app.models.EmployeesByLocation.newRecord();
        calculatedModelRecord.NumberOfEmployees = 1;
        calculatedModelRecord.Location = employee.Location;
        calculatedModelRecords.push(calculatedModelRecord);
        recordsByLocation[employee.Location] = calculatedModelRecord;
      } else {
        recordsByLocation[employee.Location].NumberOfEmployees++;
      }
    }
    return calculatedModelRecords;
    

La secuencia de comandos itera en cada registro en el modelo Employee y realiza estas acciones

  1. Crea un registro por cada ubicación nueva que encuentra.
  2. Agrega al recuento de empleados para los registros con ubicaciones repetidas.

La secuencia de comandos crea registros de modelo calculado con newRecord(), pero este método no crea en realidad un registro en el backend de los datos. En cambio, el modelo muestra los registros al cliente de forma directa.

Para obtener más ejemplos, consulta Secuencia de comandos de consulta.

Modelo calculado del lado del cliente

Ejemplo 1: consulta síncrona de la API de cliente de App Maker

La secuencia de comandos siguiente muestra la sucesión de Fibonacci. Otras operaciones de App Maker esperan los resultados antes de continuar.

  var limit = 10;
      var result = [];
      for (var i=0; i < limit; i++) {
        var record =  recordFactory.create();
        if (i < 2) {
          record.Value = 1;
        } else {
          record.Value = result[i-1].Value + result[i-2].Value;
        }
        result.push(record);
      }
      return result;
    

Ejemplo 2: solicitud asíncrona a una API de terceros

La secuencia de comandos a continuación usa la API de Google Libros para buscar libros que coincidan con la entrada (SearchString) del usuario y muestra los resultados con una función de devolución de llamada.

// Note: Include JQuery library for the application
    // Search for a book matching the user's search string
    var searchString = query.parameters.SearchString;
    $.getJSON('https://www.googleapis.com/books/v1/volumes?q=' + encodeURI(searchString), function(result){
      var records = result.items.map(function(bookData){
        // Create a record from the book's data
        var record = recordFactory.create();
        record.Title = bookData.volumeInfo.title || null;
        return record;
      });
      // Return results
      callback.success(records);
    });
    

Ejemplo 3: consulta asíncrona de la API de cliente de App Maker con funciones de devolución de llamada con éxito y con errores

La secuencia de comandos a continuación muestra resultados asíncronos cuando los resultados no se necesitan con inmediatez.

  externalApi.execute(function(results) {
        if (results.length) {
          сallback.success(mapResultsToRecords(results));
        } else {
          сallback.failure(‘No results were found');
        }
      });