JavaScript, HTML, CSS e... !
10 commenti

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):



Esempio di un Google Form

Fig. 1 - Esempio di un Google Form


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):



Esempio di uno Spreadsheet contenente le risposte ad un Google Form

Fig. 2 - Esempio di uno Spreadsheet contenente le risposte ad un Google Form


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):



Apertura dell'editor di script di un Google Form

Fig. 3 - Apertura dell'Editor di Script di un Google Form


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":



punta in alto con google apps script - interagire con i google forms

Fig. A - Il libro in italiano - Punta in alto con... Google Apps Script - pag 280 e 281


...E QUESTO È SOLO QUANTO RIFERITO ALL'INTERAZIONE CON I GOOGLE FORMS DA APPS SCRIPT!

ACQUISTA ORA IL LIBRO SU AMAZON:

punta in alto con google apps script libro italiano

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):



Richiesta di autorizzazioni all'uso del nuovo componente aggiuntivo

Fig. 4 - Richiesta di autorizzazioni all'uso del nuovo componente aggiuntivo


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):



Colonna laterale che mostra il risultato dell'elaborazione in Google Apps Script dei dati del Form presenti nel relativo Spreadsheet

Fig. 5 - Colonna laterale che mostra il risultato dell'elaborazione in Google Apps Script dei dati del Form presenti nel relativo Spreadsheet


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:



assegnare una funzione al submit del form

Fig. 6 - Assegnare una funzione al submit del Form tramite i Trigger del progetto


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.

Tags

Michele Pisani

Michele Pisani

Sviluppatore Javascript ed esperto in Digital Analytics

L'esperienza nel settore Digital Analytics unita ad anni di sviluppo in Javascript ha trovato la massima espressione in Google Apps Script che mi ha permesso, con estrema facilità e poche righe di codice, di realizzare potenti applicazioni interattive e processi automatizzati integrati con i prodotti della G Suite.

Come contattarmi
scrivi un commento

10 Commenti

  1. Saturday, March 28, 2020 alle ore 11:36 Ivan

    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

    Rispondi a questo commento
    • Saturday, March 28, 2020 alle ore 11:48 Michele PisaniAutore

      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/

      Rispondi a questo commento
      • Sunday, March 29, 2020 alle ore 18:07 Ivan

        Ok Michele ho preso il libro, ora provo a dargli una lettura grazie per ora.

    • Sunday, March 29, 2020 alle ore 19:00 Michele PisaniAutore

      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.

      Rispondi a questo commento
  2. Tuesday, April 21, 2020 alle ore 12:10 Luca Pianca

    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?

    Rispondi a questo commento
    • Tuesday, April 21, 2020 alle ore 21:25 Michele PisaniAutore

      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.

      Rispondi a questo commento
  3. Sunday, October 29, 2023 alle ore 08:18 Marcella

    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?

    Rispondi a questo commento
    • Sunday, October 29, 2023 alle ore 09:17 Michele PisaniAutore

      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.

      Rispondi a questo commento
  4. Friday, November 10, 2023 alle ore 19:44 Irene

    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

    Rispondi a questo commento
  5. Friday, November 10, 2023 alle ore 19:45 Irene

    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

    Rispondi a questo commento

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato.I campi contrassegnati da un * sono obbligatori
Puoi utilizzare i seguenti tag nei commenti:
[bold]testo[/bold] se vuoi evidenziare un testo con il grassetto[code]function helloworld() { }[/code] se vuoi pubblicare una porzione di codice[url]https://www.appsscript.it[/url] se devi riferirti ad un indirizzo web