getData() 调用中未定义的 configParams
configParams undefined in getData() call
我正在构建社区连接器,正在摸不着头脑;文件指出:
getData()
Returns the tabular data for the given request.
Request
@param {Object} request A JavaScript object containing the data
request parameters.
The request parameter contains user provided values and additional
information that can be used to complete the data request. It has the
following structure:
{ "configParams": object, "scriptParams": {
"sampleExtraction": boolean,
"lastRefresh": string }, "dateRange": {
"startDate": string,
"endDate": string }, "fields": [
{
object(Field)
} ] }
我已经正确设置了 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
};
}
当我 test/debug 时,我可以在配置步骤 select 一个帐户,模式被正确返回,但是当我尝试向报告添加一个小部件时出现以下异常:
Script error message:
TypeError: Cannot read property "harvestAccountId" from undefined.
Script error cause: USER Script
error stacktrace: getData:244
非常感谢任何建议。
发现问题 - 问题是选项的值属性是一个数字,但它必须是一个字符串:
https://developers.google.com/datastudio/connector/reference#getconfig
把它留在这里以防其他人遇到困难。 Data Studio Community Connector 的配置 select 选项必须包含标签和值的字符串,没有人会为您强制使用它们。修复是这样的:
var options = accounts.map(function(account) {
return {
label: account.name,
value: account.id + ''
};
});
通常,当没有从用户配置传递的配置值时,request.configParams
是 undefined
。
- 测试连接器时,您是否 select 在
harvestAccountId
的下拉列表中输入值?
- 如果您打算与其他用户共享此连接器,为
harvestAccountId
设置默认值可能是个好主意,以防用户没有 select 选项。
- 您可以使用 Apps Script logging 查看
getConfig()
的响应,以确保为选项传递正确的值。然后您还可以记录 request
for getData()
以更好地了解请求中传递的内容。
我正在构建社区连接器,正在摸不着头脑;文件指出:
getData()
Returns the tabular data for the given request.
Request
@param {Object} request A JavaScript object containing the data request parameters.
The request parameter contains user provided values and additional information that can be used to complete the data request. It has the following structure:
{ "configParams": object, "scriptParams": { "sampleExtraction": boolean, "lastRefresh": string }, "dateRange": { "startDate": string, "endDate": string }, "fields": [ { object(Field) } ] }
我已经正确设置了 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
};
}
当我 test/debug 时,我可以在配置步骤 select 一个帐户,模式被正确返回,但是当我尝试向报告添加一个小部件时出现以下异常:
Script error message: TypeError: Cannot read property "harvestAccountId" from undefined.
Script error cause: USER Script error stacktrace: getData:244
非常感谢任何建议。
发现问题 - 问题是选项的值属性是一个数字,但它必须是一个字符串:
https://developers.google.com/datastudio/connector/reference#getconfig
把它留在这里以防其他人遇到困难。 Data Studio Community Connector 的配置 select 选项必须包含标签和值的字符串,没有人会为您强制使用它们。修复是这样的:
var options = accounts.map(function(account) {
return {
label: account.name,
value: account.id + ''
};
});
通常,当没有从用户配置传递的配置值时,request.configParams
是 undefined
。
- 测试连接器时,您是否 select 在
harvestAccountId
的下拉列表中输入值? - 如果您打算与其他用户共享此连接器,为
harvestAccountId
设置默认值可能是个好主意,以防用户没有 select 选项。 - 您可以使用 Apps Script logging 查看
getConfig()
的响应,以确保为选项传递正确的值。然后您还可以记录request
forgetData()
以更好地了解请求中传递的内容。