Google 表单:如何获取保存在数组中的表单响应项并传递给 JavaScript/Google 应用程序脚本中的云系统的 POST 请求
Google form: How do I get form responses items saved in an array and passed to a POST request to a cloud system in JavaScript/ Google App script
我正在尝试将 google 提交时的表单响应保存在一个数组中,而不是 google sheet。然后,我需要从数组中的响应中访问大约四个元素,以根据响应通过 API 创建一个新项目。我在网上寻找代码来实现这一点,但我得到的代码给我带来了一个挑战,即只访问 post 请求中我需要的元素。
这是访问提交时响应的代码。
function formResponse()
{
var form = FormApp.openById('form-id');
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++)
{
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j++)
{
var itemResponse = itemResponses[j];
Logger.log('Response #%s to the question "%s" was "%s"',
(i + 1).toString(),
itemResponse.getItem().getTitle(),
itemResponse.getResponse());
}
}
return formResponses;
}
这里是 POST 请求的代码,它应该从上一个函数获取数据。所以基本上我想在表单提交上获取项目名称、客户名称、项目的开始和结束日期,以直接传递给 post 请求。
var data = {
'name': lastRow[0][2],
'client': lastRow[0][5],
'starts_at': lastRow[0][7],
'ends_at': lastRow[0][8],
'project_state': "Tentative",
};
var payload = JSON.stringify(data);
var options = {
'method': 'POST',
'Content-Type': 'application/json',
'payload': data,
};
}
var url = TK_URL + 'auth=' + TOKEN
var response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() === 200) {
var json = JSON.parse(response);
var id = json["id"];
我将感谢任何帮助构建代码以允许我在提交时直接获得响应并将其传递给 post 请求。
这会将链接 Sheet 中的所有内容保存在一个数组中,该数组可以通过 'myArray';
键下的 PropertiesService 在脚本中的任何其他地方使用
function onFormSubmit(e) {
let obj=PropertiesService.getScriptProperties().getProperties();
obj.myArray=JSON.stringify(e.range.getSheet().getRange(2,1,sh.getLastRow()-1,sh.getLastColumn()).getDisplayValues());
PropertiesService.getScriptProperties().setProperties(obj);
}
我现在唯一能想到的问题是,我发现 PropertiesService 的长度限制约为 30KB,因此您可能必须将其存储在文件中。但是无论哪种方式,当你把它取出来时,你都必须先解析它,然后再尝试将它用作对象。
如果您只想保存当前提交的内容,这就足够了。
function onFormSubmit(e) {
let obj=PropertiesService.getScriptProperties().getProperties();
obj.myArray=JSON.stringify(e.values);
PropertiesService.getScriptProperties().setProperties(obj);
}
我正在尝试将 google 提交时的表单响应保存在一个数组中,而不是 google sheet。然后,我需要从数组中的响应中访问大约四个元素,以根据响应通过 API 创建一个新项目。我在网上寻找代码来实现这一点,但我得到的代码给我带来了一个挑战,即只访问 post 请求中我需要的元素。
这是访问提交时响应的代码。
function formResponse()
{
var form = FormApp.openById('form-id');
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++)
{
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j++)
{
var itemResponse = itemResponses[j];
Logger.log('Response #%s to the question "%s" was "%s"',
(i + 1).toString(),
itemResponse.getItem().getTitle(),
itemResponse.getResponse());
}
}
return formResponses;
}
这里是 POST 请求的代码,它应该从上一个函数获取数据。所以基本上我想在表单提交上获取项目名称、客户名称、项目的开始和结束日期,以直接传递给 post 请求。
var data = {
'name': lastRow[0][2],
'client': lastRow[0][5],
'starts_at': lastRow[0][7],
'ends_at': lastRow[0][8],
'project_state': "Tentative",
};
var payload = JSON.stringify(data);
var options = {
'method': 'POST',
'Content-Type': 'application/json',
'payload': data,
};
}
var url = TK_URL + 'auth=' + TOKEN
var response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() === 200) {
var json = JSON.parse(response);
var id = json["id"];
我将感谢任何帮助构建代码以允许我在提交时直接获得响应并将其传递给 post 请求。
这会将链接 Sheet 中的所有内容保存在一个数组中,该数组可以通过 'myArray';
键下的 PropertiesService 在脚本中的任何其他地方使用function onFormSubmit(e) {
let obj=PropertiesService.getScriptProperties().getProperties();
obj.myArray=JSON.stringify(e.range.getSheet().getRange(2,1,sh.getLastRow()-1,sh.getLastColumn()).getDisplayValues());
PropertiesService.getScriptProperties().setProperties(obj);
}
我现在唯一能想到的问题是,我发现 PropertiesService 的长度限制约为 30KB,因此您可能必须将其存储在文件中。但是无论哪种方式,当你把它取出来时,你都必须先解析它,然后再尝试将它用作对象。
如果您只想保存当前提交的内容,这就足够了。
function onFormSubmit(e) {
let obj=PropertiesService.getScriptProperties().getProperties();
obj.myArray=JSON.stringify(e.values);
PropertiesService.getScriptProperties().setProperties(obj);
}