Modelos calculados

Um modelo calculado é um modelo virtual. Ele é criado pelo processamento de dados de outros modelos ou recursos externos. Os dados são processados e armazenados no servidor ou cliente do App Maker em vez de em um banco de dados.

Um modelo calculado pode fazer o seguinte:

  • Sintetizar um relatório personalizado a partir dos dados de outro modelo.
  • Acessar dados de um serviço da Web externo.

Tipos de modelos calculados

O App Maker tem três tipos de modelos calculados:

  • SQL calculado: o modelo usa uma consulta SQL no banco de dados do Cloud SQL do aplicativo para preencher os registros. Saiba mais sobre o modelo SQL calculado.
  • Calculado: o modelo usa um script de consulta do servidor que executa alguma lógica e retorna uma matriz de registros. Saiba mais sobre o script de consulta e veja um exemplo.
  • Calculado do cliente: o modelo usa um script de consulta do cliente para buscar dados de forma síncrona ou usa um callback para retornar resultados assíncronos.

Modelos calculados do cliente

Os modelos calculados do cliente usam um script de consulta personalizado que é executado em vez da consulta de origens de dados normal, transmitindo filtros do parâmetro de consulta.

Para usar um script de consulta personalizado:

  1. Acesse a guia Origens de dados do modelo calculado do cliente.
  2. Na caixa de código Consulta, insira seu script de consulta personalizado. O script precisa incluir uma instrução de retorno.
  3. Para renderizar os dados recuperados de serviços de terceiros:
    1. Mapeie sua consulta de script com a consulta da API de terceiros.
    2. Mapeie os dados retornados para os registros do modelo.

Qual modelo usar?

Consulte a tabela a seguir e as limitações do modelo calculado para determinar o melhor tipo de modelo a ser usado.

Meta Modelo a ser usado
Reestruturar os dados de um modelo no seu aplicativo. Modelo SQL calculado ou Calculado (servidor).

Se seu modelo calculado usar muitos dos mesmos campos que um modelo atual, use uma origem de dados de consulta em vez de um modelo calculado do servidor. Em geral, uma origem de dados de consulta é mais simples.

Buscar dados usando uma API e uma biblioteca do cliente. Modelo calculado do cliente

Com esse modelo, é possível acessar dados usando a API Google ou serviços de terceiros, como as APIs SalesForce ou SDK do Facebook.

Exibir rapidamente componentes do aplicativo, como gráficos e menus dinâmicos, sem consultar o servidor. Modelo calculado do cliente

Limitações

Limitações do modelo calculado do servidor:

  • Os registros não podem ser modificados ou excluídos. Eles são somente leitura.
  • Os registros não podem ser criados no cliente.
  • Eles não podem ter relações com outros modelos do App Maker, incluindo eles próprios.
  • As consultas do modelo SQL calculado não estão sujeitas às restrições de segurança definidas para os modelos consultados. Defina as restrições de segurança para o modelo SQL calculado na guia Segurança.

Limitações do modelo calculado do cliente:

  • Os registros não podem ser modificados ou excluídos. Eles são somente leitura.
  • Eles não podem ter relações com outros modelos do App Maker, incluindo eles próprios.
  • Eles não aceitam a configuração de paginação ou classificação.
  • Eles não aceitam eventos ou configurações de segurança.
  • Um erro será retornado se um resultado for retornado mais de uma vez, como uma chamada de callback dupla ou um retorno e uma chamada de callback.

Exemplos de modelos calculados

Modelo SQL calculado

Para exemplos de modelos SQL calculados, consulte Cloud SQL.

Script de consulta do servidor

O script de consulta a seguir usa o campo Location do modelo Employee para calcular quantos funcionários há em cada local:

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;
    

O script itera em cada registro no modelo Employee e faz o seguinte:

  1. Cria um registro para cada novo local encontrado.
  2. Adiciona à contagem de funcionários quaisquer registros com localizações repetidas.

Para criar registros de modelo calculados, o script usa newRecord(). No entanto, esse método não cria de fato um registro em um back-end de dados. Em vez disso, o modelo retorna os registros diretamente para o cliente.

Para mais exemplos, consulte Script de consulta.

Modelo calculado do cliente

Exemplo 1: consulta síncrona do App Maker na API do cliente

O script a seguir retorna a série de Fibonacci. Outras operações do App Maker aguardam os 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;
    

Exemplo 2: solicitação assíncrona para uma API de terceiros

O script a seguir usa a API Google Books para pesquisar livros que correspondam à entrada do usuário (SearchString) e retorna os resultados com uma função de callback.

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

Exemplo 3: consulta assíncrona do App Maker na API do cliente com funções de callback com êxito e falha

O script a seguir retorna resultados de maneira assíncrona quando eles não são necessários imediatamente.

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