2017-09-29 4 views
0

Ich bin dabei, einen Community Connector zu erstellen und kratze mich am Kopf; In der Dokumentation:configParams undefined in getData() call

getData()

Returns the tabular data for the given request.

Request

@param {Object} request A JavaScript object containing the data request parameters.

The request parameter contains user provided values and additional information that can be used to complete the data request. It has the following structure:

{ "configParams": object, "scriptParams": { "sampleExtraction": boolean, "lastRefresh": string }, "dateRange": { "startDate": string, "endDate": string }, "fields": [ { object(Field) } ] }

Ich habe richtig Setup getConfig() (zumindest meine Konfigurationen vom Benutzer angefordert werden), aber meine getData Funktion wird kein configParams-Objekt übergeben. Hier ist mein Code.

function getConfig(request) { 

    var Harvest = HarvestService({ 
    token: getHarvestAuthService().getAccessToken() 
    }); 
    var accounts = Harvest.accounts.list(); 
    var options = accounts.map(function(account) { 

    return { 
     label: account.name, 
     value: account.id 
    }; 

    }); 

    var config = { 
    configParams: [ 
     { 
     type: 'SELECT_SINGLE', 
     name: 'harvestAccountId', 
     displayName: 'Harvest Account ID', 
     helpText: 'The ID of the Harvest Account to pull data from.', 
     options: options 
     } 
    ], 
    dateRangeRequired: true 
    }; 

    return config; 

} 

function getData(request) { 

    var startDate = request.dateRange.startDate; 
    var endDate = request.dateRange.endDate; 
    var accountId = request.configParams.harvestAccountId; 
    var harvestAuthService = getHarvestAuthService(); 

    var Harvest = HarvestService({ 
    token: harvestAuthService.getAccessToken(), 
    account: accountId 
    }); 

    var fieldKeys = request.fields.map(function(field) { return field.name; }); 

    var entries = Harvest.entries.list({ 
    startDate: new Date(startDate), 
    endDate: new Date(endDate) 
    }); 

    var rows = entries.map(entryToRow); 

    return { 
    schema: request.fields, 
    rows: rows, 
    cachedData: false 
    }; 

} 

Wenn ich/debug zu testen, kann ich ein Konto bei dem Konfigurationsschritt wähle, wird das Schema korrekt zurückgegeben, aber ich bekomme die folgende Ausnahme, wenn ich versuche und ein Widget zu dem Bericht hinzufügen:

Script error message: TypeError: Cannot read property "harvestAccountId" from undefined.
Script error cause: USER Script error stacktrace: getData:244

Jeder Rat sehr geschätzt.

Antwort

1

das Problem Fand heraus - das Problem war, dass der Wert Attribut der Option eine Zahl, aber es muss eine Zeichenfolge sein:

https://developers.google.com/datastudio/connector/reference#getconfig

Weggehen dies hier falls jemand anderes bekommt auf diese stecken . Ihre Konfigurationsoptionen für Ihren Data Studio Community Connector müssen Zeichenfolgen sowohl für die Bezeichnung als auch für den Wert enthalten, und niemand wird sie für Sie erzwingen. Fix war:

var options = accounts.map(function(account) { 

    return { 
    label: account.name, 
    value: account.id + '' 
    }; 

}); 
0

Normalerweise request.configParams ist undefined, wenn es keine Konfigurationswerte aus der Benutzerkonfiguration übergeben werden.

  1. Wenn Sie den Steckverbinder testen, wählen Sie einen Wert in der Dropdown-Liste für harvestAccountId aus?
  2. Wenn Sie diesen Connector für andere Benutzer freigeben möchten, ist es möglicherweise eine gute Idee, einen Standardwert für harvestAccountId zu haben, falls der Benutzer keine Option auswählt.
  3. Sie können Apps Script logging verwenden, um die Antwort für getConfig() zu sehen, um sicherzustellen, dass richtige Werte für Optionen übergeben werden. Dann können Sie auch die request für getData() protokollieren, um besser zu verstehen, was genau in der Anfrage passiert wird.
+0

Danke für Ihre Antwort; Das Problem war, dass meine Werte keine Strings waren und nicht hinter den Kulissen erzwungen wurden. –

Verwandte Themen