Pillola di Apps Script #0012
Nome: Limita il numero di risposte nei Google Forms in Automatico
Descrizione: Con pochissime righe di codice e un trigger all'invio del modulo è possibile limitare in modo automatico il numero di risposte che un Google Form può accettare. Nell'esempio ho limitato a 25 tale numero, qualora un utente provasse ad inserire una nuova risposta vedrà comparire un messaggio a video con scritto "Il modulo 'Nome Modulo' non accetta più risposte".
Stato di verifica: VERIFICATO
Ambito di utilizzo: Google Forms
Segnalatore: la pillola deriva da un post di Aya Sayed, ho aggiunto la parte del trigger in modo da renderlo totalmente dinamico
Codice:
function Limit() {
var f = FormApp.getActiveForm();
var r = f.getResponses();
if(r.length > 25) {
f.setAcceptingResponses(false);
}
}
Aggiungere un trigger installabile che attiva la funzione Limit All'invio del modulo (in realtà è sufficiente eseguire la funzione una sola volta tuttavia in questo modo garantiamo che lo faccia ad ogni invio senza doversi ricordare se tale operazione sia stata effettuata manualmente in precedenza o meno).
Se vuoi scrivere anche tu la tua Pillola di Apps Script su appsscript.it segui le indicazioni contenute nell'articolo "Pillole di Apps Script: la sezione dedicata a piccole funzioni, trucchi e suggerimenti".
Il tuo contributo è fondamentale, quello che per qualcuno può sembrare una banalità per qualcun altro è un grande aiuto!
Buonasera, a me non funziona in automatico, ovvero quanfo il modulo è stato compilato n volte, per non far accettare più le risposte dalla n + 1 è necessario andare nello script ed avviarne l'esecuzione. In questo modo non è utile in quanto basterebbe vedere se il numero di risposte e bloccarne la ricezione. Sto sbagliando qualcosa? Grazie, cordiali saluti
Ciao Luca,
lo script deve essere eseguito almeno una volta, ad ogni modo ti assicuri del corretto funzionamento aggiungendo un trigger installabile che attiva la funzione Limit all'invio del modulo, come descritto nell'articolo.
Lo script replica la stessa funzionalità che da interfaccia potresti gestire manualmente, in questo caso però lo fa in modo automatico senza aver bisogno di controllare fisicamente di volta in volta se il numero di risposte è stato raggiunto.
Buongiorno mi piacerebbe applicare una cosa come questa alla somma di un campo. Devo registrare il limite massimo di accessi ad un evento con questo modo devo fare un form per persona ma se uno viene con 3 famigliari deve fare 3 form mi piacerebbe fare che uno scriva 3 persone in un campo o 1 e che la somma di questa risposta raggiunto 25 blocchi il modulo
Ciao Renato,
i Google Forms sono uno strumento molto blindato. Lo script descritto nell'articolo facilita la chiusura del modulo replicando la stessa funzionalità che da interfaccia potresti gestire manualmente.
Con questo tipo di strumento infatti, se non è previsto poter configurare l'impostazione desiderata con le sue funzionalità native, non è possibile ottenerla neanche lato codice. Il consiglio che do sempre in questi casi è quello di crearsi un form personalizzato in HTML, sempre con Google Apps Script. Perderai la semplicità d'uso dei Google Forms ed è richiesto senz'altro un po' di sviluppo, tuttavia puoi crearti tutte le funzionalità che desideri.
Buongiorno, vorrei creare un modulo che permettesse di limitare il numero degli iscritti in base anche alla data. Nello specifico, il mio problema è quello di permettere agli utenti di potersi iscrivere ad una data, e che il sistema controlli per data il numero degli iscritti, limitandoli.
Grazie
Ciao Maurizio,
sinceramente non l'ho testato ma potrebbe funzionare. Una prova che sicuramente farei è quella di utilizzare la funzione del codice presente in questo articolo e adattarla con variabili dinamiche in modo che tu possa aprire e chiudere il form al raggiungimento di una certa soglia di risposte in un giorno e sbloccarla con un controllo il giorno successivo aumentando il valore delle risposte accettate, e così via. Serviranno alcuni controlli e giocare con il valore false/true di setAcceptingResponses ma sulla carta sembra fattibile.
Spero di averti dato un valido spunto :)
Ma è possibile creare uno script che consenta di limitare il numero di risposte per utente a un numero diverso da 1? E magari di raccogliere quante volte un utente ha votato?
Ciao Andrea,
che io sappia non è possibile gestire in modo personalizzato il limite al numero di risposte per utente se non con il metodo setLimitOneResponsePerUser per limitare ad una risposta.
Puoi eventualmente gestire in modo automatico lo Spreadsheet associato, creando una funzione che verifica se la email inserita nel form è già presente (una o quante volte definito come numero massimo) e, se la condizione è soddisfatta, rimuovere dal Foglio la riga appena inserita. Questo tuttavia non ha impatto sulle risposte che vedi in back end del Google Form poiché quelle rimarranno intatte. Lo Spreadsheet invece potrà essere utilizzato come base per leggere i dati 'puliti'.