在 doGet(e) 函数中调用 FormApp
Calling FormApp within doGet(e) function
我对脚本编写比较陌生,所以请多多关照。
我正在尝试在 Google 应用程序中创建一个绑定到表单的函数,包括一个捕获 3 个变量(requestNum、approverNum 和状态)并从 FormApp 获取各种其他信息(例如标题)的网络应用程序、回复等)。
我收到 - TypeError: 无法在以下代码(绑定到表单)的第 3 行调用 null 的方法 "getId"。
非常感谢能够从 doGet 函数中调用表单信息的任何指导!谢谢你。
function doGet(e){
var form = FormApp.getActiveForm();
var formId = form.getId();
var items = form.getItems();
var d = new Date();
var formattedDate = Utilities.formatDate(d, "GMT+11", "MMM dd yyyy");
var conn = Jdbc.getConnection(dbUrl, user, userPwd);
var stmt = conn.prepareStatement('INSERT INTO approvals '
+ '(formId, requestNum, approverNum, status, date) values (?, ?, ?, ?, ?)');
stmt.setString(1, formId);
stmt.setString(2, e.parameter.requestNum);
stmt.setString(3, e.parameter.approverNum);
stmt.setString(4, e.parameter.status);
stmt.setString(5, d);
stmt.execute();
var nextApproverNum = e.parameter.approverNum + 1;
var answer = e.parameter.status;
var requestNum = e.parameter.requestNum;
var nextApproverEmail = e.parameter.reply;
var titles = [];
for (i=0; i<items.length; i++) {
titles.push(items[i].getTitle());
}
var responses = [];
var formResponses = form.getResponses();
var itemResponses = formResponses[requestNum-1].getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
responses.push(itemResponses[j].getResponse());
}
....etc
在正确的访问条件下,您遇到问题的代码可以正常工作。您应该查看您用于发布为网络应用程序的设置。
此代码段仅关注您提出的问题,并且按预期工作:
function doGet(e){
// var form = FormApp.getActiveForm(); // TypeError: Cannot call method "getId" of null.
var form = FormApp.openById('17lTBrLmQxggVADlnPC6DgTZf1f2sCEA1Rc9ZIpBu_uQ');
var formId = form.getId();
var items = form.getItems();
return ContentService.createTextOutput("Form contains "+items.length+"items.");
}
我对脚本编写比较陌生,所以请多多关照。
我正在尝试在 Google 应用程序中创建一个绑定到表单的函数,包括一个捕获 3 个变量(requestNum、approverNum 和状态)并从 FormApp 获取各种其他信息(例如标题)的网络应用程序、回复等)。
我收到 - TypeError: 无法在以下代码(绑定到表单)的第 3 行调用 null 的方法 "getId"。
非常感谢能够从 doGet 函数中调用表单信息的任何指导!谢谢你。
function doGet(e){
var form = FormApp.getActiveForm();
var formId = form.getId();
var items = form.getItems();
var d = new Date();
var formattedDate = Utilities.formatDate(d, "GMT+11", "MMM dd yyyy");
var conn = Jdbc.getConnection(dbUrl, user, userPwd);
var stmt = conn.prepareStatement('INSERT INTO approvals '
+ '(formId, requestNum, approverNum, status, date) values (?, ?, ?, ?, ?)');
stmt.setString(1, formId);
stmt.setString(2, e.parameter.requestNum);
stmt.setString(3, e.parameter.approverNum);
stmt.setString(4, e.parameter.status);
stmt.setString(5, d);
stmt.execute();
var nextApproverNum = e.parameter.approverNum + 1;
var answer = e.parameter.status;
var requestNum = e.parameter.requestNum;
var nextApproverEmail = e.parameter.reply;
var titles = [];
for (i=0; i<items.length; i++) {
titles.push(items[i].getTitle());
}
var responses = [];
var formResponses = form.getResponses();
var itemResponses = formResponses[requestNum-1].getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
responses.push(itemResponses[j].getResponse());
}
....etc
在正确的访问条件下,您遇到问题的代码可以正常工作。您应该查看您用于发布为网络应用程序的设置。
此代码段仅关注您提出的问题,并且按预期工作:
function doGet(e){
// var form = FormApp.getActiveForm(); // TypeError: Cannot call method "getId" of null.
var form = FormApp.openById('17lTBrLmQxggVADlnPC6DgTZf1f2sCEA1Rc9ZIpBu_uQ');
var formId = form.getId();
var items = form.getItems();
return ContentService.createTextOutput("Form contains "+items.length+"items.");
}