Search code examples
javascriptgoogle-apps-scriptgoogle-app-maker

How do I reference a value in an App Maker query (like I do in Apps Script)


I am writing a script to take a stock number, loop through existing stock numbers until a match is NOT found, then assign that unique stock number to the record. My problem is that the usual data[i][2] doesn't seem to reference a 'query' the same way that Apps Script would reference an array.

Fair warning, I'm trying to expand my Apps Script skills in to broader Javascript so I there's a good chance I'm doing it all wrong - I'm all ears if you tell me I'm doing this all incorrectly!

Using the log: data[i][2] gives me 'undefined' whereas data[2] gives me all fields of the third item in my query. Based on this I feel like I just need to learn how to reference it properly.

//Querying my datasource as 'var data'
var query = app.models.UsedVehicles.newQuery();
query.filters.ParentDealType._contains = prefix;
var data = query.run();
//Returns four records which is correct.

var testStockNo = prefix+month+countstring+year; 
console.log("Test Stock Number " + j + ": " + testStockNo);
for (i = 0; i < data.length; i++){
     console.log("data[i][2]: " + data[i][2]); //results: undefined
     console.log("data[2]: " + data[2]); //results: all fields of 3rd query result.
     if(data[i][2] === testStockNo){
        k++;
        break;
     }else{
     console.log("No Match");
  }
}

Even if testStockNo equals the value in field:TStockNo, the log displays:
Test Stock Number 1: C1200118

data[i][2]: undefined

data[2]: Record : { TIndex: 8, TVin8: HS654987, TStockNo: null, TParentStkNo: GSD6578, TYear: 2010, TMake: NISSAN, TModel: PICKUP, TMileage: 24356, ParentDealType: C}

No Match


Solution

  • Issue/Solution:

    query.run() returns array of records and NOT a array of arrays(2D). You should access the Record value using it's key instead of a index.

    Snippets:

    console.log("data[i][TStockNo]: " + data[i]['TStockNo']);
    console.log("data[i].TStockNo: " + data[i].TStockNo);
    console.log("data[2]: " + data[2]); 
    

    References: