在 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.");
}