Risoluzione dei problemi

Anche lo sviluppatore più esperto raramente scrive codice correttamente al primo tentativo, il che rende la risoluzione dei problemi una parte importante del processo di sviluppo. In questa sezione tratteremo alcune tecniche che possono aiutarti a trovare, comprendere ed eseguire il debug degli errori negli script.

Messaggi di errore

Quando lo script rileva un errore, viene visualizzato un messaggio di errore. Il messaggio è accompagnato da un numero di riga utilizzato per la risoluzione dei problemi. Esistono due tipi di errori di base visualizzati in questo modo: errori di sintassi ed errori di runtime.

Errori di sintassi

Gli errori di sintassi sono causati dalla scrittura di codice che non segue la grammatica JavaScript e vengono rilevati non appena provi a salvare lo script. Ad esempio, il seguente snippet di codice contiene un errore di sintassi:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('[email protected]',
                    'Data in row ' + rowNumber,
                    rowData);
}

Il problema di sintassi qui è un carattere ) mancante alla fine della quarta riga. Quando provi a salvare lo script, viene visualizzato il seguente errore:

Manca ) dopo l'elenco degli argomenti. (riga 4)

In genere, la risoluzione dei problemi relativi a questi tipi di errori è semplice, poiché vengono rilevati immediatamente e in genere hanno cause semplici. Non puoi salvare un file che contiene errori di sintassi, il che significa che nel progetto viene salvato solo il codice valido.

Errori di runtime

Questi errori sono causati dall'utilizzo errato di una funzione o di una classe e possono essere rilevati solo dopo l'esecuzione dello script. Ad esempio, il seguente codice causa un errore di runtime:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

Il codice è formattato correttamente, ma stiamo passando il valore "john" per l'indirizzo email quando chiamiamo MailApp.sendEmail. Poiché non si tratta di un indirizzo email valido, durante l'esecuzione dello script viene generato il seguente errore:

Indirizzo email non valido: john (riga 5)

Ciò che rende più difficile la risoluzione di questi errori è che spesso i dati che passi a una funzione non sono scritti nel codice, ma vengono recuperati da un foglio di lavoro, un modulo o un'altra origine dati esterna. L'utilizzo delle tecniche di debug riportate di seguito può aiutarti a identificare la causa di questi errori.

Errori comuni

Di seguito è riportato un elenco degli errori più comuni e delle relative cause.

Servizio richiamato troppe volte: <nome azione>

Questo errore indica che hai superato la quota giornaliera per una determinata azione. Ad esempio, potresti riscontrare questo errore se invii troppe email in un solo giorno. Le quote sono impostate a livelli diversi per gli account consumer, di dominio e premier e sono soggette a modifiche in qualsiasi momento senza preavviso da parte di Google. Puoi visualizzare i limiti di quota per varie azioni nella documentazione sulle quote di Apps Script.

Server non disponibile. o Si è verificato un errore del server. Riprova.

Esistono alcune possibili cause di questi errori:

  • Un server o sistema Google non è temporaneamente disponibile. Attendi qualche istante e prova a eseguire di nuovo lo script.
  • Si è verificato un errore nello script che non ha un messaggio di errore corrispondente. Prova a eseguire il debug dello script e vedi se riesci a isolare il problema.
  • Esiste un bug in Google Apps Script che causa questo errore. Per istruzioni su come cercare e inviare segnalazioni di bug, consulta la sezione Bug. Prima di segnalare un nuovo bug, cerca per vedere se altri lo hanno già segnalato.

Per eseguire questa azione è richiesta l'autorizzazione.

Questo errore indica che lo script non dispone dell'autorizzazione necessaria per essere eseguito. Quando uno script viene eseguito nell'editor di script o da una voce di menu personalizzata, viene visualizzata una finestra di dialogo di autorizzazione per l'utente. Tuttavia, quando uno script viene eseguito da un trigger, incorporato in una pagina Google Sites o eseguito come servizio, la finestra di dialogo non può essere presentata e viene visualizzato questo errore.

Per autorizzare lo script, apri l'editor di script ed esegui una funzione qualsiasi. Viene visualizzato il prompt di autorizzazione per consentirti di autorizzare il progetto di script. Se lo script contiene nuovi servizi non autorizzati, devi autorizzarlo nuovamente.

Questo errore è spesso causato da trigger che vengono attivati prima che l'utente li abbia autorizzati. Se non hai accesso al progetto di script (perché l'errore si verifica per un componente aggiuntivo che utilizzi, ad esempio), in genere puoi autorizzare lo script utilizzando di nuovo il componente aggiuntivo. Se un trigger continua ad attivarsi e a causare questo errore, puoi rimuoverlo nel seguente modo:

  1. A sinistra del progetto Apps Script, fai clic su Attivatori .
  2. A destra del trigger da rimuovere, fai clic su Altro > Elimina trigger.

Puoi anche rimuovere i trigger problematici dei componenti aggiuntivi disinstallando il componente aggiuntivo.

Accesso negato: DriveApp o The domain policy has disabled third-party Drive apps

Gli amministratori dei Google Workspace domini hanno la possibilità di disattivare l'API Drive per il proprio dominio, il che impedisce ai loro utenti di installare e utilizzare le app Google Drive. Questa impostazione impedisce inoltre agli utenti di utilizzare i componenti aggiuntivi di Apps Script che utilizzano il servizio Drive o il servizio Drive avanzato (anche se lo script è stato autorizzato prima che l'amministratore disattivasse l'API Drive).

Tuttavia, se un componente aggiuntivo o un'app web che utilizza il servizio Drive viene pubblicato per l'installazione a livello di dominio e viene installato dall'amministratore per alcuni o tutti gli utenti del dominio, le funzioni di script per questi utenti funzionano anche se l'API Drive è disattivata nel dominio.

Lo script non è autorizzato a ottenere l'identità dell'utente attivo.

Indica che l'identità e l'email dell'utente attivo non sono disponibili per lo script. Questo avviso è il risultato di una chiamata a Session.getActiveUser(). Può anche derivare da una chiamata a Session.getEffectiveUser() se lo script viene eseguito in una modalità di autorizzazione diversa da AuthMode.FULL. Se viene segnalato questo avviso, le chiamate successive a User.getEmail() restituiscono solo "".

Esistono diversi modi per risolvere il problema relativo a questo avviso, a seconda della modalità di autorizzazione in cui viene eseguito lo script. La modalità di autorizzazione è esposta nelle funzioni attivate come proprietà authMode del e parametro evento.

  • In AuthMode.FULL, valuta la possibilità di utilizzare Session.getEffectiveUser() in alternativa.
  • In AuthMode.LIMITED, assicurati che il proprietario abbia autorizzato lo script.
  • In altre modalità di autorizzazione, evita di chiamare uno dei due metodi.
  • Se sei un cliente di Google Workspace che ha iniziato a visualizzare questo avviso da un trigger installabile, assicurati che il trigger venga eseguito come utente all'interno della tua organizzazione.

Libreria mancante

Se aggiungi una libreria popolare al tuo script, potresti ricevere un messaggio di errore che indica che è mancante, anche se la libreria è elencata come dipendenza per il tuo script. Il motivo potrebbe essere che troppe persone accedono alla raccolta contemporaneamente. Per evitare questo errore, prova una delle seguenti soluzioni:

  • Copia e incolla il codice della libreria nello script e rimuovi la dipendenza dalla libreria.
  • Copia lo script della libreria e implementalo come libreria dal tuo account. Assicurati di aggiornare la dipendenza nello script originale alla nuova libreria anziché a quella pubblica.

Si è verificato un errore a causa di una versione mancante della libreria o di una versione del deployment. Codice di errore Not_Found

Questo messaggio di errore indica una delle seguenti condizioni:

  • La versione dello script di cui è stato eseguito il deployment è stata eliminata. Per aggiornare la versione del copione di cui è stato eseguito il deployment, consulta la pagina Modifica un deployment con versioni.
  • La versione di una libreria utilizzata dallo script è stata eliminata. Per controllare quale libreria manca, fai clic su Altro > Apri in una nuova scheda accanto al nome della libreria. La libreria mancante restituisce un messaggio di errore. Dopo aver trovato la raccolta da aggiornare, esegui una delle seguenti azioni:
  • Lo script di una libreria utilizzata dal tuo script include un'altra libreria che utilizza una versione eliminata. Esegui una delle seguenti azioni:
    • Se disponi dell'accesso in modifica alla libreria utilizzata dallo script, aggiorna la libreria secondaria nello script a una versione esistente.
    • Aggiorna la libreria per utilizzare una versione diversa. Consulta Aggiornare una raccolta.
    • Rimuovi la libreria dal progetto di script e dal codice. Vedi Rimuovere una raccolta.

Errore 400: invalid_scope durante la chiamata all'API Google Chat con il servizio avanzato

Se riscontri Error 400: invalid_scope con il messaggio di errore Some requested scopes cannot be shown, significa che non hai specificato ambiti di autorizzazione nel file appsscript.json del progetto Apps Script. Nella maggior parte dei casi, Apps Script determina automaticamente gli ambiti necessari a uno script, ma quando utilizzi il servizio avanzato Chat, devi aggiungere manualmente gli ambiti di autorizzazione utilizzati dallo script al file manifest del progetto Apps Script. Consulta Impostazione di ambiti espliciti.

Per risolvere l'errore, aggiungi gli ambiti di autorizzazione appropriati al file appsscript.json del progetto Apps Script come parte dell'array oauthScopes. Ad esempio, per chiamare il metodo spaces.messages.create, aggiungi quanto segue:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

Le chiamate UrlFetch a <URL> non sono consentite dal tuo amministratore

Gli amministratori di Google Workspace possono attivare una lista consentita nella Console di amministrazione per controllare a quali domini esterni puoi accedere tramite Apps Script.

Per risolvere l'errore, contatta l'amministratore per richiedere l'aggiunta dell'URL alla lista consentita.

Debug

Non tutti gli errori causano la visualizzazione di un messaggio di errore. Potrebbe esserci un errore più sottile in cui il codice è tecnicamente corretto e può essere eseguito, ma i risultati non sono quelli che ti aspetti. Ecco alcune strategie per gestire queste situazioni e analizzare ulteriormente uno script che non viene eseguito nel modo previsto.

Logging

Durante il debug, spesso è utile registrare le informazioni durante l'esecuzione di un progetto di script. Google Apps Script offre due metodi per registrare le informazioni: il servizio Cloud Logging e i servizi Logger e console più semplici integrati nell'editor Apps Script.

Per ulteriori dettagli, consulta la guida alla registrazione.

Error Reporting

Le eccezioni che si verificano a causa di errori di runtime vengono registrate automaticamente utilizzando il servizio Google Cloud Error Reporting. Questo servizio ti consente di cercare e filtrare i messaggi di eccezione creati dal tuo progetto di script.

Per accedere a Error Reporting, consulta Visualizzare i log e i report sugli errori di Cloud nella console di Google Cloud Platform.

Esecuzioni

Ogni volta che esegui uno script, Apps Script registra l'esecuzione, inclusi i log di Cloud. Questi record possono aiutarti a capire quali azioni ha eseguito lo script.

Per visualizzare le esecuzioni dello script nel progetto Apps Script, fai clic su Esecuzioni a sinistra.

Controllo dello stato del servizio Apps Script

Anche se rari, a volte servizi Google Workspace specifici (come Gmail o Drive) riscontrano problemi temporanei che possono causare interruzioni del servizio. Quando ciò si verifica, i progetti Apps Script che interagiscono con questi servizi potrebbero non funzionare come previsto.

Puoi verificare se si è verificata un'interruzione del servizio Google Workspace visualizzando la Dashboard dello stato di Google Workspace. Se si verifica un'interruzione, attendi che venga risolta o cerca ulteriore assistenza nel Centro assistenza Google Workspace o nella documentazione relativa ai problemi noti di Google Workspace.

Utilizzare il debugger e i punti di interruzione

Per individuare i problemi nello script, puoi eseguirlo in modalità di debug. Quando viene eseguito in modalità di debug, uno script si interrompe quando raggiunge un punto di interruzione, ovvero una riga che hai evidenziato nello script e che ritieni possa presentare un problema. Quando uno script viene messo in pausa, mostra il valore di ogni variabile in quel momento, consentendoti di esaminare il funzionamento interno di uno script senza dover aggiungere molte istruzioni di logging.

Aggiungere un punto di interruzione

Per aggiungere un punto di interruzione, passa il mouse sopra il numero di riga della riga a cui vuoi aggiungere il punto di interruzione. A sinistra del numero di riga, fai clic sul cerchio. L'immagine mostra un esempio di punto di interruzione aggiunto a uno script:

Aggiungere un punto di interruzione

Esegui uno script in modalità di debug

Per eseguire lo script in modalità di debug, fai clic su Debug nella parte superiore dell'editor.

Prima che lo script esegua la riga con il punto di interruzione, si interrompe e visualizza una tabella di informazioni di debug. Puoi utilizzare questa tabella per esaminare dati come i valori dei parametri e le informazioni memorizzate negli oggetti.

Per controllare l'esecuzione dello script, utilizza i pulsanti "Esegui passo passo", "Salta" ed "Esci" nella parte superiore del riquadro del debugger. Questi ti consentono di eseguire lo script una riga alla volta e di esaminare come cambiano i valori nel tempo.

Errore: il codice sorgente per la riga corrente non è disponibile

Il codice sorgente per la riga corrente non è disponibile

Questo errore viene visualizzato quando non è disponibile un file di debug attivo. Google Apps Script non supporta la visualizzazione di script JavaScript (JS) generati dinamicamente nell'editor di script, ad esempio quelli generati utilizzando eval() e new Function(). Questi script vengono creati ed eseguiti all'interno del motore V8, ma non sono rappresentati come file autonomi nell'editor. Se esegui l'istruzione passo per passo di questi script, si verifica questo errore.

Ad esempio, considera il seguente codice:

function myFunction() {
  eval('a=2');
}

Quando viene richiamato eval(), il relativo argomento viene trattato come codice JS ed eseguito come script creato dinamicamente all'interno del motore V8. Se esegui il debug passo passo di eval(), viene visualizzato questo errore. Se lo script include un commento //# sourceURL, il suo nome viene visualizzato nello stack di chiamate. In caso contrario, viene visualizzato come voce senza nome.

Nonostante il messaggio di errore, la sessione di debug rimane attiva e l'esecuzione può continuare. Per procedere, continua con l'esecuzione di step in, step out o ripristino. Tuttavia, questo errore continua a essere visualizzato finché l'esecuzione rimane nell'ambito dello script dinamico. Dopo che l'esecuzione esce dallo script dinamico, il debug continua senza questo errore.

Problemi con più Account Google

Se hai eseguito l'accesso a più Account Google contemporaneamente, potresti avere difficoltà ad accedere ai tuoi componenti aggiuntivi e alle tue app web. L'accesso multiplo o l'accesso a più Account Google contemporaneamente non è supportato per Apps Script, componenti aggiuntivi o app web.

  • Se apri l'editor Apps Script dopo aver eseguito l'accesso a più di un account, Google ti chiede di scegliere l'account che vuoi utilizzare.

  • Se apri un'app web o un componente aggiuntivo e riscontri problemi di accesso multiplo, prova una delle seguenti soluzioni:

    • Esci da tutti i tuoi Account Google e accedi solo a quello che contiene il componente aggiuntivo o l'app web a cui vuoi accedere.
    • Apri una finestra di navigazione in incognito in Google Chrome o una finestra di navigazione privata equivalente e accedi all'Account Google che contiene il componente aggiuntivo o l'app web a cui vuoi accedere.

Richiesta di aiuto

Il debug di un problema utilizzando gli strumenti e le tecniche elencati sopra può risolvere una serie di problemi, ma potrebbero esserci problemi che richiedono un aiuto aggiuntivo per essere risolti. Consulta la nostra pagina di assistenza per informazioni su dove porre domande e segnalare bug.