2

我正在建立一个社区连接器并且正在摸索;该文件指出:

获取数据()

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

要求

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

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

{“configParams”:对象,“scriptParams”:{“sampleExtraction”:布尔值,“lastRefresh”:字符串},“dateRange”:{“startDate”:字符串,“endDate”:字符串},“字段”:[{对象(场地) } ] }

我已经正确设置了 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”。
脚本错误原因:用户脚本错误堆栈跟踪:getData:244

非常感谢任何建议。

4

2 回答 2

3

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

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

把这个留在这里,以防其他人陷入困境。您的 Data Studio Community Connector 的配置选择选项必须包含标签和值的字符串,没有人会为您强制使用它们。修复是这样的:

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

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

});
于 2017-09-29T18:18:49.897 回答
1

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

  1. 测试连接器时,您是否在下拉列表中选择了一个值harvestAccountId
  2. 如果您计划与其他用户共享此连接器,最好使用默认值harvestAccountId,以防用户未选择选项。
  3. 您可以使用Apps 脚本日志记录来查看响应,getConfig()以确保为选项传递了正确的值。然后,您还可以记录requestforgetData()以更好地了解请求中传递的确切内容。
于 2017-09-29T18:22:23.263 回答