ASP YOK
ASP YOK

Reputation: 131

App script/maker and Big Query

I having an google app (app maker) where I script the following code:

    function runQuery() {
  var projectId = 'projekte-123425512';
  var request = {
    query: 'SELECT title FROM [bigquery-public-data:samples.wikipedia]  where title contains "olimpic" LIMIT 100'
  };
  var queryResults = BigQuery.Jobs.query(request, projectId);
  var jobId = queryResults.jobReference.jobId;
  var names = queryResults.schema.fields.map(function(field){ return field.name; });
  return queryResults.rows.map(function(row) {
    var obj = {};
    for( var i = 0, len = names.length; i < len; ++i ) {
      obj[names[i]] = row.f[i].v;
    }
    return obj;
  });
}

So I basically try to get some data out of Big Query and store it in an array. Later I want it as a calculated model and a data source in my app:

enter image description here

I already tried it and get result in my logger:

enter image description here

It works! But only in app script debugger, then I want to test the whole app I get the following error:

The function queryRecords must return an array of records, but the array contained an element that was not a record. Error: The function queryRecords must return an array of records, but the array contained an element that was not a record.

EDIT

I updated my code

    function runQuery() {
  var projectId = 'nifty-stage-155512';
  var request = {
    query: 'SELECT title FROM [bigquery-public-data:samples.wikipedia]  where title contains "olimpic" LIMIT 100'
  };
  var queryResults = BigQuery.Jobs.query(request, projectId);
  var jobId = queryResults.jobReference.jobId;
  var names = queryResults.schema.fields.map(function(field){ return field.name; });


  //var records = [];  
  return queryResults.rows.map(function(row) {
  var record = app.models.Test.newRecord();
  for (var i = 0, len = names.length; i < len; ++i) {
    // Calculated model should contain correspondent fields
    // all non-defined fields will be ignored
    record[names[i]] =  (row.f[i].v);
  }

  return record;
});
}

It now works without error but I still get no data into my grid:

enter image description here

Is there something I'am missing in the configuration of the grid or the datasource??

enter image description here

Upvotes: 0

Views: 314

Answers (1)

Pavel Shkleinik
Pavel Shkleinik

Reputation: 6347

App Maker doesn't allow to return arbitrary objects through its datasources. All results should be strongly typed:

...

return queryResults.rows.map(function(row) {
  var record = app.models.CalcModelName.newRecord();

  for (var i = 0, len = names.length; i < len; ++i) {
    // Calculated model should contain correspondent fields
    // all non-defined fields will be ignored
    record[names[i]] = row.f[i].v;
  }

  return record;
});

Here are some samples for reference https://developers.google.com/appmaker/samples/calculated-model/ https://developers.google.com/appmaker/samples/jdbc/

Upvotes: 1

Related Questions