Aggiungere funzionalità nei componenti aggiuntivi
Interagire con i Google Forms tramite Google Apps Script
Nell'articolo "I vantaggi di creare un Google Form da codice tramite Google Apps Script" sono state messe in evidenza alcune qualità derivanti da una generazione dei form gestita lato codice rispetto all'uso, se pur comodissimo, del relativo editor WYSIWYG dedicato. In questo tutorial, invece, verranno mostrate le potenzialità di Google Apps Script per l'integrazione di funzionalità aggiuntive ad un Google Form, indipendentemente dal metodo con cui è stato generato, al fine di arricchire l'interfaccia con informazioni utili ed immediate basate sulla compilazione, fino a quel momento, del form stesso da parte degli utenti che l'hanno inviato.
L'obiettivo è pertanto quello di mostrare a video, nella pagina del Form, alcuni dati prelevati dal relativo Google Spreadsheet in cui sono salvate le risposte di chi ha compilato il modulo, nel caso specifico per la raccolta di informazioni sull'interesse sportivo da parte degli utenti, ovvero quello realizzato nell'articolo menzionato poco sopra (Fig. 1):
Poniamo, ad esempio, che ci interessi visualizzare come informazione immediatamente disponibile il numero di utenti di sesso maschile e di sesso femminile con l'indicazione dell'intervallo di età per ciascuno dei due gruppi.
I dati su cui ci baseremo saranno quindi quelli relativi alle risposte di 'Sesso' e 'Data di nascita' che, nello Spreadsheet delle risposte al form, sono i seguenti (Fig. 2, N.B.: i dati mostrati sono puramente inventati al solo scopo illustrativo):
Di seguito il codice da incorporare (bound-script) all'interno del Form tramite il relativo 'Editor di script...' che può essere aperto dalla schermata di modifica del Google Form cliccando sul menu rappresentato da 3 pallini in verticale e cliccando a sua volta l'opportuno elemento nel menu che si aprirà contestualmente (Fig. 3):
Il codice da inserire all'interno dell'editor e molte altre informazioni su come interagire con i Google Forms tramite Google Apps Script continuano nel mio libro "Punta in alto con... Google Apps Script":
...E QUESTO È SOLO QUANTO RIFERITO ALL'INTERAZIONE CON I GOOGLE FORMS DA APPS SCRIPT!
ACQUISTA ORA IL LIBRO SU AMAZON:
Se sei pronto a diventare un esperto nella programmazione in Google Apps Script non posso fare altro che augurarti una buona lettura e soprattutto... Buon divertimento!
Come si può notare dalla funzione presente nel trigger di tipo semplice 'onOpen', all'apertura della pagina del form verrà creato un menu personalizzato (un esempio dettagliato sulla creazione dei menu personalizzati si trova nell'articolo "Menu personalizzati in SpreadsheetApp e DocumentApp con Google Apps Script") all'interno dell'interfaccia composto da un solo elemento con la finalità di mostrare, nel corpo di una colonna laterale, le informazioni sul tipo di utenza che ha, fino a quel momento, utilizzato il form.
function onOpen() {
ui.createMenu('Riepilogo informazioni...')
.addItem("Mostra info sul tipo di utenza che utilizza il form...", 'showInformation')
.addToUi();
var current_user = Session.getActiveUser().getEmail();
if (current_user.length == 0) {
showTempSideBar();
} else {
showInformation();
}
}
La stessa funzione controlla se l'utente è autorizzato all'uso di questo nuovo componente ed in caso negativo, tramite un'apposita funzione (nel caso specifico showTempSideBar()) mostrerà, all'interno della colonna laterale, un messaggio di richiesta di autorizzazioni per l'utente che sta utilizzando la nuova funzionalità e le relative modalità di attivazione (Fig. 4):
Una volta autorizzato l'utente seguendo i vari passaggi della procedura di autenticazione, ovvero quanto Session.getActiveUser().getEmail() sarà valorizzato (corrispondente alla mail dell'utente autorizzato), verrà mostrato nella colonna laterale il contenuto desiderato (Fig. 5):
La parte di codice dedicata all'elaborazione dei dati del Form presenti all'interno del relativo Spreadsheet di trova nella funzione showInformation() che viene ora richiamata ogni volta che la pagina del form viene aperta.
Quello che viene effettivamente svolto è il recupero del foglio di calcolo in questione ed in base agli indici delle domande del Form e le righe presenti nello Sheet, viene effettuato un ciclo per il recupero delle informazioni di sesso e data di nascita in base a due modalità (mostrate a scopo illustrativo), quella tramite i loro indici, con getIndex(), oppure tramite il titolo della domanda, con getTitle(), e viene visualizzato tramite la composizione di un contenuto HTML il messaggio deiderato previa elaborazione dei dati con le funzioni di appoggio per la somma del numero dei maschi e delle femmine e per il calcolo dell'età (recuperato per differenza di date con la funzione personalizzata dateDifference(dateMin, dateMax)) e la relativa identificazione dei valori minimi e massimi.
Per aggiornare i dati sarà sufficiente ricaricare la pagina o, meglio ancora, cliccare sull'icona dei componenti aggiuntivi (il pezzo del puzzle) per poi cliccare sulla voce di menu: 'Riepilogo informazioni...'.
E' inoltre possibile richiamare una funzione, tramite i trigger dell'editor di script, nel momento in cui un utente effettua il submit del Form. Questa funzionalità può trovare utilità, ad esempio, per farsi inviare una mail di notifica ogni volta che il Form viene inviato.
Per assegnare un trigger automatico al submit del Form è necessario selezionare, dalla barra dei menu dell'editor di Apps Script incorporato al file del Form, la voce "Modifica --> Trigger del progetto corente" e scegliere la funzione da richiamare, come mostrato nell'immagine seguente, Fig. 6:
Da notare, nel codice completo, la semplicità con cui è possibile far apparire la colonna laterale, ovvero tramite il metodo ui.showSidebar() ed allo stesso tempo come la manipolazione del suo contenuto HTML e CSS avviene in poche righe grazie al servizio HtmlService.
Per quanto riguarda invece il recupero delle informazioni dallo Spreadsheet, ovvero la parte di codice dove viene utilizzato il metodo getDataRange(), consiglio la lettura dell'articolo "Google Apps Script: best practice per il miglioramento delle performance" in particolare la parte dove viene raccomandato l'utilizzo delle operazioni batch.
Buongiorno e complimenti per la sua guida, avrei una domanda da porle, vorrei creare un modulo in HTML non Google form e inviare le risposte ad un foglio di Google, pensa sia possibile? Oppure prelevare i dati da un database mysql in uno sheet di Google.
Vedo che ha scritto un libro in vendita su Amazon, trovo nel libro la soluzione che sto cercando?
Grazie
Ciao Ivan,
quello che ti serve è risolvibile con gli script sia per la creazione di web app con Apps Script che dialogano con gli strumenti della G Suite sia per il collegamento a database esterni.
Nel libro trovi sicuramente le info necessarie per ottenere quello che stai cercando.
Qui trovi la versione Kindle considerando che per via del Covid-19 Amazon ha momentaneamente sospeso la stampa e l'invio di alcuni prodotti dando la precedenza a quelli più prioritari: https://www.amazon.it/Punta-alto-Google-Apps-Script-ebook/dp/B083F1YMRC/
Ok Michele ho preso il libro, ora provo a dargli una lettura grazie per ora.
Grazie a te Ivan,
sono sicuro che mettendo insieme le nozioni che troverai sulla realizzazione di web app con Google Apps Script (nel capitolo 6 c'è proprio un esempio su un form HTML) e la comunicazione con gli Spreadsheet o altri database (capitolo 4) riuscirai ad ottenere il risultato desiderato molto velocemente.
Buongiorno, guida molto interessante.
Avrei una domanda.
Io un blocco inserisco il titolo e vorrei poter andare a capo.
Mi spiego:
Il titolo del blocco vorrei fosse così:
FISICITA' e MATERIALITA'
Attività che richiedono.
Tuttavia Google moduli non mi permette di andare a capo ed il risultato è su un'unica linea, come di seguito.
FISICITA' e MATERIALITA' Attività che richiedono.
Come poter fare quindi senza usare il campo descrizione?
Ciao Luca,
se non è previsto dall'interfaccia, o meglio, se quel campo non prevede il comando per andare a capo in condizioni native, non può essere risolvibile neanche da script.
Buongiorno e complimenti! Ho una domanda però da farti: è possibile tramite script nascondere delle domande nella sezione successiva in base alla risposta ottenuta in una delle domande della sezione precedente?
Oppure uno script in questo non puó essere d'aiuto?
Ciao Marcella, gli script non possono modificare i form una volta che il form è stato lanciato. Puoi però ottenere il risultato che desideri tramite le funzionalità native, ovvero preparando diverse sezioni puoi inviare l'utente a una di queste sezioni sulla base della risposta.
Ciao Michele, innanzitutto complimenti! Ti contatto per sapere se è fattibile quello che sto cercando di fare. Avrei necessità di esportare in Google form un valore ulteriore da Google moduli. In particolare l'excel del modulo quiz mi riporta la risposta (in punti da 1a 5) relativa alla domanda e mi riporta il punteggio totale aggiornato con la mia revisione manuale. Vorrei portare in colonna la mia revisione manuale assieme al punto scelto della persona per ogni singola domanda. È fattibile? Sarebbe di estremo aiuto,! Grazie mille
Ciao Michele, innanzitutto complimenti! Ti contatto per sapere se è fattibile quello che sto cercando di fare. Avrei necessità di esportare in Google form un valore ulteriore da Google moduli. In particolare l'excel del modulo quiz mi riporta la risposta (in punti da 1a 5) relativa alla domanda e mi riporta il punteggio totale aggiornato con la mia revisione manuale. Vorrei portare in colonna la mia revisione manuale assieme al punto scelto della persona per ogni singola domanda. È fattibile? Sarebbe di estremo aiuto,! Grazie mille