在getData()调用

时间:2017-09-29 12:42:27

标签: google-data-studio

我正在建立一个社区连接器并且正在摸不着头脑;文件说明:

  

的getData()

     

返回给定请求的表格数据。

     

请求

     

@param {Object} request包含数据的JavaScript对象   请求参数。

     

request参数包含用户提供的值和其他值   可用于完成数据请求的信息。它有   以下结构:

     

{" configParams":object," scriptParams":{       " sampleExtraction":boolean,       " lastRefresh&#34 ;: string}," dateRange":{       " startDate":string,       " endDate&#34 ;: string}," fields":[       {         对象(场)       }]}

我正确设置了getConfig()(至少,我的配置是从用户请求的),但我的getData函数没有传递给configParams对象。这是我的代码。

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
  };

}

当我测试/调试时,我可以在配置步骤中选择一个帐户,正确返回架构,但是当我尝试向窗口添加窗口小部件时,我收到以下异常:

  

脚本错误消息:   TypeError:无法读取属性" harvestAccountId"来自undefined。
  脚本错误原因:USER脚本   错误堆栈跟踪:getData:244

任何建议都非常感谢。

2 个答案:

答案 0 :(得分:3)

发现问题 - 问题是选项的value属性是一个数字,但它必须是一个字符串:

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

留下这个以防万一其他人卡在这上面。 Data Studio社区连接器的配置选择选项必须包含标签和值的字符串,没有人会为您强制它们。修复是这样的:

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

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

});

答案 1 :(得分:1)

通常,当没有从用户配置传递的配置值时,request.configParamsundefined

  1. 测试连接器时,您是否在harvestAccountId的下拉列表中选择了一个值?
  2. 如果您打算与其他用户共享此连接器,那么在用户未选择选项的情况下,为harvestAccountId设置默认值可能是个好主意。
  3. 您可以使用Apps Script logging查看getConfig()的响应,以确保为选项传递正确的值。然后,您还可以记录request getData(),以便更好地了解请求中传递的内容。