Search code examples
google-apps-scriptlooker-studio

Google Data Studio Community Connector getData() not working as expected


function getData(request){
  try{  
  var options = {
  'method' : 'post',
  'contentType': 'application/json',
  'payload' : JSON.stringify(request)
  };
  response=UrlFetchApp.fetch(getDataUrl, options);

  resData = JSON.parse(response.getContentText())

  return resData

  }catch (e) { 
    e = (typeof e === 'string') ? new Error(e) : e;
    Logger.log("Catch", e);
    throw e;
  }
}

The the above is my getData() function.

My isAdminUser() returns true.

When I try to visualize my data, I get the following error

Data Set Configuration Error

Data Studio cannot connect to your data set.

There was an error requesting data from the community connector. Please report the issue to the provider of this community connector if this issue persists.

Error ID: 3d11b88b https://i.sstatic.net/x3Hki.png

The error code changes every time I refresh data and I can't find any dictionary to map the error id to an error

I tried debugging by logging the request parameter, response.getContentText() and resData variable to make sure I my data is formatted correctly.

Following are the logs printed in Stackdriver logs

request

{configParams={/Personal config data/}, fields=[{name=LASTNAME}]}

response.getContentText()

{"schema":[{"name":"LASTNAME","dataType":"STRING"}],"rows":[{"values":["test"]},{"values":["test"]},{"values":["Dummy"]},{"values":["One"]},{"values":["Nagargoje"]},{"values":[""]},{"values":[""]},{"values":[""]},{"values":[""]},{"values":[""]}],"filtersApplied":false}

resData

{rows=[{values=[test]}, {values=[test]}, {values=[Dummy]}, {values=[One]}, {values=[Nagargoje]}, {values=[]}, {values=[]}, {values=[]}, {values=[]}, {values=[]}], filtersApplied=false, schema=[{name=LASTNAME, dataType=STRING}]}

I am not sure what is wrong with my getData() function.

The Object that I am returning seems to match the structure given here https://developers.google.com/datastudio/connector/reference#getdata


Solution

  • So there was no issue with my getData() function, the issue existed in the manifest file. I was searching about passing parameter via URL and I stumbled upon a field called dataStudio.useQueryConfig and added that to my manifest file and set its value to true. Google Data studio was expecting me to return a query Config for getData(). But what I really wanted was this.

    Anyways, I was able to debug it thanks to Matthias for suggesting me to take a look at Open-Source implementations

    I implemented JSON connect which worked fine, so I Logged what it was returning in getData() and used that format/structure in my code, but my connector still didn't work.

    My next assumption was maybe there is something wrong with my getSchema() return value. So I logged that as well and then copy pasted the hard coded value of both getData() and getSchema() return varaibles from JSON connect.

    And even that didn't work, so my last bet was there must be something wrong with the manifest file, maybe the dummy links I added in it must be the issue. Then, after carrying out field by comparison I was finally able to get my community connector working.

    This would have been easier to debug if the error messages were a bit helpful and didn't seem so generic.