Skip to content

TypeError: Cannot read property 'fields' of undefined #1

@ftoonk

Description

@ftoonk

Hi,

I am building a Community Connector from Google Data Studio to the SiteImprove API. I have 2 major errors in the following code snippets:

TypeError1: Cannot call method "map" of undefined, for the below code line.
return response.map(function(visitorsCountries) {

TypeError2: Cannot read property "fields" from undefined, for the below code line.
var requestedFieldIds = request.fields.map(function(field) {

The complete JavaScript code is as follows:

function getAuthType() {
var cc = DataStudioApp.createCommunityConnector();
return cc

var url = 'https://api.siteimprove.com/v2/integrations';

//(API_KEY) is not defined error>>>
var response = UrlFetchApp.fetch(url + '&api_key=' + API_KEY);

return response;
}

function getConfig(request) {
var cc = DataStudioApp.createCommunityConnector();
var config = cc.getConfig();

config
.newSelectMultiple()
.setId('visitorCountry')
.setName('Selections')
.setHelpText('Select the visitors countries aspect')
.addOption(config.newOptionBuilder().setLabel('Country').setValue('country'))
.addOption(config.newOptionBuilder().setLabel('Visits').setValue('visits'))
.addOption(config.newOptionBuilder().setLabel('Bounce Rate').setValue('rate'));

//config.setDateRangeRequired(true);

return config.build();
}

function getFields(request) {
var cc = DataStudioApp.createCommunityConnector();
var fields = cc.getFields();
var types = cc.FieldType;
var aggregations = cc.AggregationType;

  fields.newDimension()
.setId('country')
.setType(types.TEXT);

fields.newMetric()
.setId('visits')
.setType(types.NUMBER)
.setAggregation(aggregations.SUM);

fields.newMetric()
.setId('rate')
.setType(types.PERCENT)
.setAggregation(aggregations.SUM);
return fields;

//fields.newDimension()
//.setId('day')
//.setName('Date')
//.setType(types.YEAR_MONTH_DAY);
}
function getSchema(request) {
var fields = getFields(request).build();
return { schema: fields };
}

function responseToRows(requestedFields, response) {
function logObject(object) { cc.newDebugError() .setText(JSON.stringify(s)) .throwException(); }

// Transform parsed data and filter for requested fields
// var visitorsCountries;
//TypeError: Cannot call method "map" of undefined.>>>
return response.map(function(visitorsCountries) {
var row = [];
// var field = [];
requestedFields.asArray().forEach.(function (field) {
switch (field.getId()) {
//case 'day':
//return row.push(visitorsCountries.day.replace(/-/g, ''));
case 'rate':
return row.push(visitorsCountries.rate);
case 'visitors':
return row.push(visitorsCountries.visitors);
case 'country':
return row.push(country);
default:
return row.push('');
}
});
return { values: row };
})};

function getData(request) {
function logObject(object) { cc.newDebugError() .setText(JSON.stringify(s)) .throwException(); }

// var fields = getFields();
// var request;
var requestedFieldIds = request.fields.map(function(field) {
return field.name;
});
var requestedFields = getFields().forIds(requestedFieldIds);

// Fetch and parse data from API
var url = [
'https://my2.siteimprove.com/Analytics/207470/LastThirtyDays/Users/Countries',

//request.dateRange.startDate,
//':',
//request.dateRange.endDate,
//'/',
//fields.
request.configParams.visitorCountry
];
var response = UrlFetchApp.fetch(url.join(''));
var parsedResponse = JSON.parse(response).visits;
var parsedResponse = JSON.parse(response).rate;
var parsedResponse = JSON.parse(response).country;
//fields.
var rows = responseToRows(requestedFields, parsedResponse, request.configParams.visitorCountry);
return {
schema: requestedFields.build(),
rows: rows
};
}

Please let me know how can I improve the code from the errors?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions