Google Data Studio Connector getData缺少字段

时间:2018-10-11 17:59:08

标签: google-apps-script google-data-studio hubspot

我正在尝试为HubSpot创建一个数据连接器,并且一直在想办法解决这个问题。据我所知,我所做的一切都正确,但是getData调用中的请求对象缺少我在架构中指定的字段之一。

当我检查日志时,getSchema返回了两个字段,但是由于某种原因,我似乎只得到一个。我在下面包含了代码和日志:

function getData(request) {
  console.log("ORIGINAL FIELDS FOR GETDATA(): " + JSON.stringify(request.fields));

  switch (request.configParams.apiEndPoint) {
    case "sources":
      var url = API_URL + "/analytics/v2/reports/totals/summarize/daily?start=" + startYYYYMMDD + "&end=" + endYYYYMMDD;   
      break;
    case "stages":
      console.info("Fetching for Stages API");
      var url = API_URL + "/deals/v1/pipelines/default";
      getPipelineData(request, url);
      break;
  }
}

function getPipelineData(request, endPoint) {
  var header_row = [];

  console.log("FIELDS: " + JSON.stringify(request));

  request.fields.forEach(function(field) {
    for (var i = 0; i < mySchema.length; i++) {
      console.log("for loop i: " + i);
      console.log("mySchema[i]: " + JSON.stringify(mySchema[i]));

      if (mySchema[i].name === field.name) {
        console.log("Matched " + mySchema[i].name + " to " + field.name);

        header_row.push(mySchema[i]);
      } else {
        console.error("Did not match " + mySchema[i].name + " to " + field.name);
      }
    }
  });

您可以在第5行的日志中看到getSchema返回2个字段“ label”和“ stageId”。但是,日志中的下一行显示getData正在使用的对象只有一个字段“标签”。

对于我的一生,我还没有办法弄清楚我在哪里出了问题,可以真正使用一些帮助!

以下是指向日志输出的链接:https://www.screencast.com/t/rpD7oz5ZuDdv

2 个答案:

答案 0 :(得分:0)

getSchema()在数据源初始化/配置期间被调用。对于所有字段都将调用它,通常在创建数据源时执行一次。

每当在仪表板上创建/查看图表元素时,都会调用

getData(),并且仅针对该图表元素中的特定字段调用。此字段列表将在request.fields中传递。

workflow diagram可能会有帮助。

在日志中,第3行和第4行是在创建数据源时发生的。第5行发生在您向仪表板添加图表元素时(该图表元素只有label字段)。

答案 1 :(得分:0)

尝试将一个组属性添加到您的架构字段。 在遍历getData函数中的字段时以及在调用API之前,您可以在检查字段类型以进行正确调用时简单地按组进行筛选。我起草了api调用的函数。但是一般的想法是这样。

 function getData(request) {
     var fieldsSchema = this.getFields()
     var requestedFields = request.fields.map(function (field) {
         for (var i = 0; i < fieldsSchema.length; i++) {
             if (fieldsSchema[i].name == field.name) {
                 return fieldsSchema[i];
             }
         }
     });

     var datatype = requestedFields.reduce(function (type, field) {
         if (!type) {
             return field['group'];
         }
         if (type !== field['group']) {
             console.log('You can only choose fields in the same group.')
         }
         return type;
     }, undefined);

     config.datatype = datatype;
     switch (config.datatype) {
         case 'sources':
             return this.getSourcesFromApi(request, config, requestedFields);
         case 'stage':
             return this.getStagesFromApi(request, config, requestedFields);
         default:
             console.log('Fields in the group not supported')
     }
 }


 function getSchema(){
    return {schema: this.getFields()};
 }

 // get fields could be something like this
 function getFields() {
     return [{
             "name": "date",
             "label": "Date",
             "description": "The date that this was created",
             "dataType": "STRING",
             "group": "stages"
         },
         {
             "name": "name",
             "label": "name",
             "dataType": "STRING",
             "group": "stages"
         }
     ]

 }