限制可以提交Google表单的人数的最佳方法是什么,然后在达到限制后为其他人提供加入等待名单的选项?
我可以使用以下脚本在达到定义的限制时关闭表单,但是希望在此时打开另一个表单以收集等候名单提交。
function closeForm() {
// get active form
var form = FormApp.getActiveForm();
// retrieve number of responses thusfar
var responses = form.getResponses();
// set close message
var msg = "We're sorry, but this session is full. Future sessions will be announced in the CISL Daily Bulletin. Thank you for your interest.";
// do the math
if(responses.length >= 1) {
form.setAcceptingResponses(false).setCustomClosedFormMessage(msg);
}
}
我已查看Google文档帮助论坛并在此处进行了搜索。到目前为止,我发现的很少是基于较旧版本的Google表单。
有关如何执行此操作的任何建议吗?
答案 0 :(得分:0)
不确定这样做的最佳方法是什么,但我想到的解决方案按预期工作但 - 这是一个严重警告 - 有点曲折 ...
无论如何,如果您的表单不是太复杂,可能很容易设置。下面的示例使用仅包含文本字段的表单,因此代码非常简单。如果您使用不同的问题类型,则必须为您使用的每种类型添加条件,并因此调整addElement。
全球的想法是制作一个备用表单来保存所有现有字段,删除所有字段并为等待列表创建一个“给你的名字”字段。
然后restore
函数可以毫无痛苦地重新构建表单。
表单公共URL将始终相同,表单可以无限期地重复使用...这是此脚本的主要(唯一)优势。
也许有人会建议一个更聪明和/或更简单的解决方案,我很乐意从中学习。
编辑:我添加了一个onFormSubmit触发器创建功能,并将逻辑更改为最适合正常工作流程:而响应数量为<限制,脚本返回没有任何影响。达到限制时,表单会自动修改。
function createTrigger(){
var form = FormApp.getActiveForm();
ScriptApp.newTrigger('checkFormForLimit').forForm(form).onFormSubmit().create();
}
function checkFormForLimit() {
var form = FormApp.getActiveForm();
var responses = form.getResponses();
Logger.log(responses.length);
if(responses.length<5) {return};// do nothing if not over the limit
if(DriveApp.getFilesByName('backup'+form.getTitle()).hasNext()){ // check if bkp already exists
var formBkp = FormApp.openById(DriveApp.getFilesByName('backup'+form.getTitle()).next().getId());// if it does, open it
}else{
var formBkp = FormApp.create('backup'+form.getTitle());// else create it
}
var msg = "We're sorry, but this session is full. Future sessions will be announced in the CISL Daily Bulletin. Thank you for your interest.";
formBkp.setDescription(form.getDescription());
form.setDescription(msg);
var items = form.getItems();
for(var n in items){
var item = items[n];
if(item.getType()==FormApp.ItemType.TEXT){
formBkp.addTextItem().setTitle(item.getTitle());
form.deleteItem(item);
}
}
form.addTextItem().setTitle('Type your name to subscribe to the wait list')
}
function restoreForm(){
var form = FormApp.getActiveForm();
form.deleteItem(form.getItems()[0]);
var formBkp = FormApp.openById(DriveApp.getFilesByName('backup'+form.getTitle()).next().getId());
form.setDescription(formBkp.getDescription());
var items = formBkp.getItems();
for(var n in items){
var item = items[n];
if(item.getType()==FormApp.ItemType.TEXT){
form.addTextItem().setTitle(item.getTitle());
formBkp.deleteItem(item);
}
}
}