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

L'utilizzo o meno di un trigger installabile fa la differenza

Gestire l'evento onEdit(e) per l'invio automatico delle Email con Google Apps Script

Il trigger onEdit(e) viene eseguito quando un utente modifica un valore in un Foglio Google. Il parametro e passato alla funzione è facoltativo, ad ogni modo è un oggetto evento che contiene informazioni sul contesto che ha causato l'attivazione del trigger.
Uno dei dubbi più comuni legati all'utilizzo di onEdit è quello di un correlato invio di un'email in automatico ad un destinatario. Per fare chiarezza su quando un'email può essere inviata in automatico e quando no faccio descrivo brevemente di seguito le due situazioni:

- Quando si utilizza direttamente onEdit(e) senza un trigger installabile, il parametro e contiene le seguenti informazioni:

{authMode=LIMITED, range=Range, source=Spreadsheet, oldValue=true, user=miamail@gmail.com, value=FALSE}

In questo caso, l'evento non può inviare un'email a causa dei permessi limitati, evidenziati dal parametro "authMode=LIMITED".
Provando infatti ad inviare una mail, con MailApp.sendEmail(...), il Log di Stackdriver mostrerà un ERRORE con dettaglio "Non disponi dell'autorizzazione per chiamare MailApp.sendEmail. Autorizzazioni richieste: https://www.googleapis.com/auth/script.send_mail at onEdit".

- Quando si utilizza onEdit(e) con un trigger installabile di tipo evento "Modifica", il parametro e contiene le seguenti informazioni:

{authMode=FULL, range=Range, oldValue=false, source=Spreadsheet, value=TRUE, user=miamail@gmail.com, triggerUid=123456}

Di seguito un esempio di configurazione del trigger, Fig. 1:



trigger onedit per la funzione onedit

Fig. 1 - Trigger onEdit per la funzione onEdit


In questo caso, l'evento può inviare un'email in quanto i permessi vengono dati previa richiesta di autorizzazione, evidenziati dal parametro "authMode=FULL".


Per completezza, il resto delle informazioni contenute nel parametro e sono "range", le coordinate della cella modificata recuperabile ad esempio con e.range.getA1Notation(), e "source" il relativo Spreadsheet, il cui identificativo può essere recuperato con e.source.getId().

Oltre altrigger onEdit() può interessarti conoscere il trigger semplice onChange(), te ne parlo nel mio articolo "La Differenza tra i trigger installabili onEdit() e onChange()".

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

2 Commenti

  1. Wednesday, April 6, 2022 alle ore 22:24 Lorenzo

    Ciao, vorrei scrivere la data in formato dd/mm/yyyy hh:mm:ss, all'interno di una cella modificata, sfruttando l'output del comando now().
    Il problema è che non riesco a trovare la giusta formattazione del comando now() che restituisce un numero grandissimo che penso siano millisecondi dall'origine, ma nella cella formattata per accogliere una data, non ottengo la conversione.
    Uso questo codice:

    function onEdit(e){
    return Date.now();
    }

    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