In alcune situazioni potremmo aver bisogno di limitare le risposte di un modulo Google. Non esiste, almeno per ora, una funzione integrata in Moduli per farlo. Abbiamo invece a disposizione alcuni componenti aggiuntivi, come ad esempio formLimiter, che svolgono questo compito. Per qualche motivo potresti voler evitare l’utilizzo di un componente aggiuntivo – perché non soddisfa pienamente le tue esigenze, non vedi quello che fa dietro le quinte, o non è applicabile al tuo dominio per motivi legati al trattamento dei dati.

La soluzione che propongo qui consiste in un breve script da aggiungere al modulo Google di cui vuoi limitare le risposte. È codice aperto ed analizzabile, e puoi vedere chiaramente quello che fa. Non presenta problemi di trattamento esterno dei dati: farà parte di un modulo del tuo dominio, senza trasferire alcun dato al di fuori di esso. E puoi modificarlo, ampliarlo e migliorarlo in base alle tue esigenze.

A differenza di altri script che ho proposto in precedenza, questo non è collegato al foglio di risposte del modulo, ma direttamente al modulo stesso.

Procedura breve

Se sei già abbastanza pratico del funzionamento di uno script allegato ad un file di Drive, puoi saltare la descrizione dettagliata che trovi in questo post. Ti basterà seguire questi passaggi, e tutto sarà pronto in due minuti:

  1. crea il modulo Google di cui vuoi limitare le risposte, e scegli dal menu Impostazioni la voce Editor di script
  2. dai un nome al progetto, sostituisci la funzione vuota con il codice che trovi più sotto e modifica nella prima riga il numero delle risposte massime che vuoi accettare; poi salva
  3. dall’editor esegui una volta la funzione onOpen, e concedi le autorizzazioni
  4. torna al modulo: dal menu Componenti aggiuntivi scegli la voce con il nome che hai dato al progetto, clicca su Imposta attivatore e attendi qualche secondo che lo script sia terminato
  5. tutto è pronto, puoi utilizzare il modulo; al raggiungimento del numero impostato il modulo verrà chiuso automaticamente, e riceverai una mail di notifica

Se hai bisogno di indicazioni più dettagliate di questa descrizione veloce, di seguito trovi spiegazioni analitiche di ogni passaggio.
Più sotto trovi il video che illustra la procedura e l’utilizzo dello script.

Il codice

var risposteAccettate = 4; //cambia questo numero con il limite di risposte che vuoi impostare

function onOpen() {
  var ui = FormApp.getUi();
  ui.createAddonMenu().addItem('Imposta attivatore', 'impostaAttivatore').addToUi();
}

function limitaRisposte() {
  var form = FormApp.getActiveForm();
  var formName = form.getTitle();
  var responses = form.getResponses();
  if (!responses) {
    return; // previene errore in caso non ci siano risposte nel modulo
  }
  if (responses.length > (risposteAccettate -1)) {
    form.setAcceptingResponses(false);
    // l'indirizzo email a cui inviare la notifica viene ricavato dal proprietario del modulo
    var destinatarioEmail = DriveApp.getFileById(form.getId()).getOwner().getEmail();
    var oggettoEmail = `Iscrizioni chiuse per il modulo ${formName}`;
    var testoEmail = `Il modulo ${formName} ha raggiunto il limite massimo di ${responses.length} iscritti. Le iscrizioni sono state chiuse.`
    MailApp.sendEmail(destinatarioEmail, oggettoEmail, testoEmail);
  }
  
}


function impostaAttivatore() {
  
  // cerca se già impostato trigger per funzione principale, altrimenti lo crea e memorizza creazione avvenuta in una proprietà
  var props = PropertiesService.getScriptProperties();
  if (props.getProperty('triggerPresente')) {
    return;  
  }
      
  var triggers = ScriptApp.getProjectTriggers();
  if (triggers.length > 0) {
    for (i = 0; i < triggers.length; i ++) {
      if (triggers[i].getHandlerFunction() == 'limitaRisposte') {
        props.setProperty('triggerPresente', true);
      }
    }
  }
  
  if (triggers.length == 0 || !(props.getProperty('triggerPresente'))) {
    ScriptApp.newTrigger('limitaRisposte')
    .forForm(FormApp.getActiveForm())
    .onFormSubmit()
    .create();
    props.setProperty('triggerPresente', true);
  }
}

Crea lo script

Prima di tutto, crea nel tuo Drive il modulo Google di cui vorrai limitare le risposte. Quindi clicca sul menu in alto a destra, icona dei 3 pallini verticali, e scegli la voce Editor di script:

Google Moduli - limitare risposte

Si apre una nuova scheda con l’editor di Apps Script.

Alla data odierna è in corso di distribuzione la nuova interfaccia dell’editor, che nel giro di pochi giorni dovrebbe raggiungere tutti i domini G Suite. Le schermate successive si riferiscono alla nuova interfaccia, la procedura rispetto all’editor precedente non cambia nella sostanza, ma solo nella visualizzazione e nella disposizione dei menu.

Clicca in alto a sinistra sul nome generico Progetto senza titolo, scegli un nome e salva.

Progetto Apps Script - rinomina

A questo punto elimina il contenuto del progetto – la funzione vuota preimpostata – e copia il codice dello script che trovi qui in alto. Ricordati di modificare la prima linea del progetto inserendo il numero massimo di risposte che vuoi accettare per questo modulo, al posto del valore 4 esemplificativo:

var risposteAccettate = 4; //cambia questo numero con il limite di risposte che vuoi impostare

Salva con l’icona apposita, chiudi la scheda del progetto, e torna alla scheda del modulo.

Attiva la procedura

Il codice indicato finora non basta per far funzionare la procedura. Dopo aver creato il progetto in Apps Script, è necessario impostare un attivatore – trigger – per fare in modo che la funzione principale dello script venga eseguita automaticamente. Diversamente, le funzioni degli script vanno eseguite a mano, e nel nostro caso perderemmo tutti i vantaggi della procedura.

Per approfondire…
Se vuoi documentarti sugli attivatori – meccanismo, diverse tipologie ed impiego pratico – puoi guardare la voce dedicata della guida di Apps Script.

In questo caso non devi occuparti di gestire gli attivatori: seguendo le indicazioni sottostanti verrà creato in automatico quanto serve per far funzionare la procedura senza interventi specifici. Se vorrai creare progetti analoghi, o modificare questo per altri scopi, ricordati che dovrai impostare la gestione degli attivatori separatamente.

Ora ricarica la pagina del modulo: dopo qualche istante comparirà in alto a destra l’icona dei Componenti aggiuntivi, a forma di tessera di puzzle. Cliccandola, trovi una nuova voce di menu, che ha il nome del progetto appena salvato. Scegli questa voce, e nella nuova lista che compare, clicca su Imposta attivatore.

Moduli - menu componenti aggiuntivi
1. Clicca sull’icona di Componenti aggiuntivi, e scegli la voce con il nome che hai dato al progetto
2. Nel menu successivo, scegli Imposta attivatore

Le autorizzazioni

Compariranno ora una serie di schermate che chiedono di acconsentire alle autorizzazioni per lo script: accettale tutte.

Queste richieste di autorizzazioni potrebbero sembrare allarmanti. E servono proprio a questo: i consensi vanno valutati con attenzione. Quando installiamo componenti aggiuntivi sviluppati da terzi, è bene lavorare solo con fonti fidate (sviluppatori noti, riconosciuti in rete, magari con sito web dedicato da cui trarre ulteriori informazioni). In questo caso puoi valutare l’attendibilità dello script proposto da due fattori:
1. il codice è aperto, puoi analizzare cosa fa
2. visto che stai installando tu lo script, questo agisce per conto del tuo account: sarai quindi tu ad avere sempre il controllo dello script, e nessun altro all’esterno

La prima esecuzione non verrà completata: è stata interrotta per permetterti di accettare le autorizzazioni. Devi quindi ripetere questo ultimo passaggio una seconda volta: icona Componenti aggiuntivi, clicca sul nome del progetto, quindi su Imposta attivatore. Ora l’esecuzione verrà completata in pochi secondi.

A questo punto verranno impostate automaticamente le operazioni iniziali. Come detto sopra, questa parte si occupa della creazione del’attivatore – e verifica anche che non esista già, per non fare duplicati inutili. Devi eseguire questa parte solo la prima volta, poi non più. L’attivatore appena impostato farà partire la funzione principale ogni volta che un utente compila e invia il modulo. In questo modo, ad ogni invio viene verificato il numero delle risposte, e se il numero massimo è stato raggiunto, il modulo viene chiuso.

Utilizzo

Sei pronto per inviare il modulo alle persone che devono compilarlo. Né tu né i compilatori dovete più fare nulla di diverso dal solito. Dietro le quinte lo script tiene monitorato il conteggio delle risposte: ad ogni invio, l’attivatore fa eseguire la funzione principale che effettua il controllo. Se il numero degli invii è inferiore a quello che hai stabilito non succede nulla. Solo quando il modulo Google raggiunge il numero di risposte stabilito, lo script attiva la funzione per limitare le risposte. Il modulo viene automaticamente modificato per non accettare più risposte. Contemporaneamente, ti viene inviata una mail di notifica che ti avvisa del raggiungimento del numero desiderato.

Puoi cambiare il comportamento riguardante l’invio della mail (destinatario, oggetto o messaggio) modificando le righe del codice che se ne occupano, nella parte terminale dello script.

Controlli ed errori

Puoi verificare il corretto funzionamento della procedura direttamente nel nuovo editor di Apps Script, aprendolo dal menu Impostazioni del modulo come indicato in fase di creazione.

All’apertura viene mostrata la schermata con l’editor del codice vero e proprio. Nel menu ad icone sulla sinistra puoi selezionare le altre icone per fare i controlli necessari.

Scegliendo la voce Attivatori possiamo verificare se il trigger è stato creato, ed eventualmente aprirlo per vederne i dettagli o modificarlo secondo le nostre esigenze. Esecuzioni invece mostra l’elenco di ogni esecuzione di una funzione contenuta nello script. In caso di problemi, troviamo nella colonna Stato l’indicazione di Errore, e se clicchiamo sulla riga interessata si apre il dettaglio dell’errore, con il riferimento alla riga dello script che origina il problema.

Guarda il video

This error message is only visible to WordPress admins

Error: No connected account.

Please go to the Instagram Feed settings page to connect an account.