Risoluzione dei problemi

Anche lo sviluppatore più esperto raramente scrive il codice correttamente al primo tentativo, il che rende la risoluzione dei problemi una parte importante del processo di sviluppo. Questa sezione illustra le tecniche per 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 con un numero di riga. Esistono due tipi di errori di base: errori di sintassi ed errori di runtime.

Errori di sintassi

Gli errori di sintassi si verificano quando il codice non segue la grammatica JavaScript e vengono rilevati quando salvi lo script. Ad esempio, lo snippet seguente 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('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

Il problema è un carattere ) mancante alla fine della riga 4. Quando salvi lo script, viene visualizzato il seguente errore:

Missing ) after argument list. (line 4)

Questi errori vengono rilevati immediatamente, il che ne facilita la risoluzione. Nel progetto viene salvato solo il codice valido.

Errori di runtime

Gli errori di runtime si verificano quando una funzione o una classe viene utilizzata in modo errato e vengono rilevati quando lo script viene eseguito. 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);
}

Sebbene il codice sia formattato correttamente, "john" è un indirizzo email non valido. Viene generato il seguente errore:

Invalid email: john (line 5)

Questi errori sono difficili da risolvere perché i dati vengono spesso estratti da fonti esterne come fogli di lavoro o moduli. Utilizza le tecniche di debug per identificare la causa.

Errori comuni

Di seguito è riportato un elenco di errori comuni e delle relative cause.

Service invoked too many times: <action name>

Questo errore indica che hai superato la quota giornaliera per un'azione, ad esempio l'invio di troppe email. Le quote variano in base al tipo di account e sono soggette a modifiche. Visualizza i limiti nella documentazione sulle quote di Apps Script.

Server not available. or Server error occurred, please try again.

Le cause possibili includono:

  • Un server Google non è temporaneamente disponibile. Attendi e riprova.
  • Un errore nello script non ha un messaggio corrispondente. Prova a eseguire il debug per isolare il problema.
  • Esiste un bug in Google Apps Script. Cerca e invia le segnalazioni di bug in Bugs.

Authorization is required to perform that action.

Lo script non dispone dell'autorizzazione necessaria per l'esecuzione. Quando uno script viene eseguito da un attivatore o come servizio, non è possibile visualizzare una finestra di dialogo di autorizzazione.

Per autorizzare lo script, apri l'editor di script ed esegui una funzione qualsiasi. Se lo script utilizza nuovi servizi non autorizzati, devi autorizzarlo di nuovo.

Gli attivatori che vengono attivati prima dell'autorizzazione o dopo la scadenza spesso causano questo errore. Se la causa è un componente aggiuntivo, utilizzalo di nuovo per autorizzarlo di nuovo. Rimuovi gli attivatori problematici:

  1. Nel progetto Apps Script, fai clic su Attivatori .
  2. Accanto all'attivatore, fai clic su Altro > Elimina attivatore.

In alternativa, disinstalla il componente aggiuntivo.

Anche le autorizzazioni granulari possono anche causare questi errori. Consulta la pagina degli ambiti di autorizzazione per proteggere le esecuzioni degli attivatori.

Access denied: DriveApp or The domain policy has disabled third-party Drive apps

Gli amministratori di Google Workspace possono disattivare l' API Drive per il loro dominio, impedendo agli utenti di utilizzare le app Drive o i componenti aggiuntivi di Apps Script che utilizzano il servizio Drive.

Se un componente aggiuntivo o un'app web viene pubblicato per l'installazione a livello di dominio e installato da un amministratore, le funzioni dello script vengono eseguite anche se l'API Drive è disattivata.

The script does not have permission to get the active user's identity.

L'identità e l'indirizzo email dell'utente attivo non sono disponibili. Ciò è dovuto alle chiamate a Session.getActiveUser() o Session.getEffectiveUser() in modalità di autorizzazione diverse da AuthMode.FULL. Se lo script viene eseguito su un attivatore, puoi trovare la modalità di autorizzazione nella authMode proprietà dell'oggetto evento di Apps Script.

Risolvi il problema in base alla modalità di autorizzazione:

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

Library is missing

Una libreria potrebbe essere segnalata come mancante se troppe persone vi accedono contemporaneamente. Per risolvere questo problema:

  • Copia il codice della libreria direttamente nello script.
  • Copia e sottoponi a deployment la libreria dal tuo account.
  • Se la libreria non è necessaria per il funzionamento dello script, rimuovila dal progetto dello script.

Error occurred due to a missing library version or a deployment version. Codice di errore Not_Found

Questo messaggio di errore indica una delle seguenti condizioni:

  • La versione dello script utilizzata da un deployment è stata eliminata. Per risolvere il problema, modifica il deployment e seleziona una versione dello script diversa.
  • È stata eliminata una versione della libreria utilizzata dallo script. Per risolvere il problema, nell'editor di script, in "Librerie", trova la libreria e aggiornala a una versione diversa o rimuovila. Per aggiornare, fai clic sul numero di versione e seleziona una versione diversa. Per rimuovere, fai clic su Altro > Rimuovi.
  • Una libreria include un'altra libreria e la versione di quest'ultima è stata eliminata. Per risolvere il problema, contatta l'autore della libreria o utilizza una versione diversa della libreria utilizzata dallo script.

Error 400: invalid_scope when calling Google Chat API with the advanced service

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 per uno script, ma quando utilizzi il servizio avanzato di Chat, devi aggiungere manualmente gli ambiti di autorizzazione utilizzati dallo script al file manifest del progetto Apps Script. Consulta la sezione Impostare 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 spaces.messages.create metodo, 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 utilizzare una lista consentita per controllare l'accesso ai domini esterni. Contatta l'amministratore per aggiungere l'URL alla lista consentita.

Violazione delle norme relative alle autorizzazioni

Questo errore si verifica quando un'applicazione che utilizza HTMLService tenta di eseguire API web che richiedono autorizzazioni sensibili, ad esempio navigator.mediaDevices.getUserMedia() per l'accesso alla fotocamera o al microfono. L'ambiente sandbox di Apps Script limita queste funzionalità per proteggere la sicurezza degli utenti.

Ospita la funzionalità che richiede queste autorizzazioni su un dominio separato (al di fuori di Apps Script) e aprilo in una nuova finestra o scheda. Puoi quindi inviare i dati o le risposte acquisiti alla tua applicazione Apps Script come mostrato in questo esempio.

Code.gs

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('Index')
      .setTitle('Media Devices Example');
}
function processCameraData(data) {
  Logger.log('Received data from client-side: ' + data);
  // Process data as needed
}

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <button id="open-camera">Open Camera in New Window</button>
    <script>
      document.getElementById('open-camera').addEventListener('click', function() {
        // URL for external domain handling camera access & posting data back.
        // External page uses getUserMedia & window.opener.postMessage(...).
        var externalUrl = 'https://your-external-domain.com/camera';
        window.open(externalUrl, 'cameraWindow', 'width=600,height=400');
      });

      // Listen for messages from the external window.
      window.addEventListener('message', function(event) {
        // Check event.origin to ensure message is from the expected source.
        if (event.origin !== 'https://your-external-domain.com') {
          return;
        }
        console.log('Data received from external window:', event.data);
        // Send data to server-side Apps Script.
        google.script.run.processCameraData(event.data);
      });
    </script>
  </body>
</html>

Debug

Alcuni errori sono impercettibili e non attivano messaggi. Ad esempio, il codice potrebbe essere in grado di essere eseguito, ma i risultati sono imprevisti. Utilizza le seguenti strategie per esaminare gli script che si comportano in modo imprevisto.

Logging

Registra le informazioni durante l'esecuzione di uno script utilizzando il servizio Cloud Logging o i servizi Logger e console nell'editor di script.

Error Reporting

Per utilizzare Error Reporting in Google Cloud, utilizza un progetto standard gestito dall'utente anziché un progetto predefinito.

Quando utilizzi un progetto standard, gli errori di runtime vengono registrati automaticamente in Google Cloud Error Reporting. Visualizza i log di Cloud e le segnalazioni di errori nella console Google Cloud.

Esecuzioni

Google Apps Script registra ogni esecuzione, inclusi i log di Cloud. Per visualizzare le esecuzioni, fai clic su Esecuzioni .

Controllo dello stato del servizio

Controlla le interruzioni del servizio Google Workspace nella Dashboard dello stato di Google Workspace.

Utilizzo del debugger e dei 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 mette in pausa quando raggiunge un punto di interruzione, ovvero una riga che hai evidenziato nello script e che ritieni possa avere un problema. Quando uno script si mette in pausa, viene visualizzato il valore di ogni variabile in quel momento, consentendoti di ispezionare il funzionamento interno di uno script senza dover aggiungere molte istruzioni di logging.

Aggiunta di 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 seguente mostra un esempio di punto di interruzione aggiunto a uno script:

Aggiungere un punto di interruzione

Esecuzione di uno script in modalità di debug

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

Prima dell'esecuzione dello script, la riga con il punto di interruzione si mette in pausa e viene visualizzata una tabella di informazioni di debug. Puoi utilizzare questa tabella per esaminare i dati, ad esempio i valori dei parametri e le informazioni memorizzate negli oggetti.

Per controllare la modalità di esecuzione dello script, nella parte superiore del riquadro Debugger, utilizza i pulsanti "Esegui istruzione", "Esegui istruzione successiva" e "Esegui fino all'uscita". Questi pulsanti ti consentono di eseguire lo script una riga alla volta e di esaminare la variazione dei valori nel tempo.

Errore: Source code for the current line is not available

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 "Esegui istruzione" in 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 l'istruzione "Esegui istruzione" in eval(), viene visualizzato questo errore. Se lo script include un commento //# sourceURL, il relativo 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 a eseguire l'istruzione "Esegui istruzione", "Esegui fino all'uscita" o riprendi l'esecuzione. Tuttavia, questo errore continua a essere visualizzato finché l'esecuzione rimane nell'ambito dello script dinamico. Una volta 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 componenti aggiuntivi e alle app web. L'accesso multiplo o l'accesso a più Account Google contemporaneamente non è supportato per Apps Script, i componenti aggiuntivi o le app web.

  • Se apri l'editor di Apps Script mentre hai eseguito l'accesso a più di un account, Google ti chiede di scegliere l'account con cui vuoi procedere.

  • 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

Visita la nostra pagina di assistenza per porre domande o segnalare bug.