我正在尝试为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
答案 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"
}
]
}