Rozwiązywanie problemów

Nawet najbardziej doświadczony deweloper rzadko zapisuje kod prawidłowo za pierwszym razem, dlatego rozwiązywanie problemów jest istotnym elementem procesu programowania. W tej sekcji omówimy niektóre techniki, które pomogą Ci znajdować, analizować i debugować błędy w skryptach.

Komunikaty o błędach

Jeśli skrypt napotka błąd, wyświetli się komunikat o błędzie. Wyświetlanemu komunikatowi towarzyszy numer wiersza używany do rozwiązywania problemów. Tak wyświetlają się 2 podstawowe rodzaje błędów: błędy składni i błędy w czasie działania.

Błędy składniowe

Błędy składni są spowodowane przez pisanie kodu niezgodnego z gramatyką JavaScriptu, a błędy są wykrywane, gdy tylko próbujesz zapisać skrypt. Na przykład ten fragment kodu zawiera błąd składni:

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);
}

W tym problemie ze składnią brakuje znaku ) na końcu czwartego wiersza. Gdy spróbujesz zapisać skrypt, pojawi się ten błąd:

Brak znaku ) za listą argumentów. (wiersz 4)

Tego typu błędy można zwykle łatwo naprawić, ponieważ są wykrywane od razu i zwykle mają proste przyczyny. Nie można zapisać pliku, który zawiera błędy składni, co oznacza, że w projekcie będzie zapisany tylko prawidłowy kod.

Błędy w czasie wykonywania

Te błędy wynikają z nieprawidłowego użycia funkcji lub klasy. Można je wykryć dopiero po uruchomieniu skryptu. Na przykład ten kod powoduje błąd w czasie działania:

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);
}

Kod jest poprawnie sformatowany, ale przy wywołaniu funkcji MailApp.sendEmail przekazujemy wartość „jan” dla adresu e-mail. To nie jest prawidłowy adres e-mail, więc przy uruchamianiu skryptu pojawia się ten błąd:

Nieprawidłowy e-mail: jan (wiersz 5)

Problemy z tymi błędami są jednak trudniejsze, ponieważ często dane przekazywane do funkcji nie są zapisywane w kodzie, lecz pobierane z arkusza kalkulacyjnego, formularza lub innego zewnętrznego źródła danych. Skorzystanie z podanych niżej metod debugowania może Ci pomóc w znalezieniu przyczyny tych błędów.

Typowe błędy

Poniżej znajduje się lista najczęstszych błędów i ich przyczyn.

Usługa została wywołana zbyt wiele razy: <action name>

Ten błąd oznacza, że dla danego działania przekroczono dzienny limit. Ten błąd może się pojawić na przykład wtedy, gdy wysyłasz zbyt wiele e-maili jednego dnia. Limity dla kont indywidualnych, domen i kont premium są ustalane na różnych poziomach i mogą ulec zmianie w dowolnym momencie bez uprzedniego powiadomienia Google. Limity dotyczące różnych działań możesz sprawdzić w dokumentacji dotyczącej limitów Apps Script.

Serwer jest niedostępny lub Wystąpił błąd serwera, spróbuj ponownie.

Oto kilka możliwych przyczyn tych błędów:

  • Serwer lub system Google są tymczasowo niedostępne. Zaczekaj chwilę i spróbuj jeszcze raz uruchomić skrypt.
  • W skrypcie występuje błąd, dla którego nie wyświetla się odpowiedni komunikat o błędzie. Spróbuj debugować skrypt, aby zobaczyć, czy uda Ci się zdiagnozować problem.
  • Wystąpił błąd w Skryptach aplikacji Google, który powoduje ten błąd. Instrukcje dotyczące wyszukiwania i zgłaszania błędów znajdziesz w artykule Błędy. Przed zgłoszeniem nowego błędu sprawdź, czy ktoś już go zgłosił.

Do wykonania tej czynności wymagana jest autoryzacja.

Ten błąd oznacza, że skrypt nie ma autoryzacji wymaganej do uruchomienia. Po uruchomieniu skryptu w edytorze skryptów lub z poziomu niestandardowego elementu menu użytkownikowi wyświetla się okno autoryzacji. Jeśli jednak skrypt jest uruchamiany z reguły, umieszczony na stronie w Witrynach Google lub jako usługa, okno dialogowe nie jest wyświetlane i wyświetla się ten błąd.

Aby autoryzować skrypt, otwórz edytor skryptów i uruchom dowolną funkcję. Pojawi się prośba o autoryzację projektu skryptu. Jeśli skrypt zawiera nowe nieautoryzowane usługi, musisz ponownie go autoryzować.

Ten błąd jest często spowodowany przez reguły, które uruchamiają się, zanim użytkownik je autoryzuje. Jeśli nie masz dostępu do projektu skryptu (np. dlatego, że błąd występuje np. w przypadku dodatku, którego używasz), zazwyczaj możesz autoryzować skrypt, korzystając z dodatku. Jeśli reguła będzie się nadal uruchamiać i będzie powodować ten błąd, możesz je usunąć w ten sposób:

  1. Po lewej stronie projektu Apps Script kliknij Aktywatory .
  2. Po prawej stronie reguły, którą chcesz usunąć, kliknij Więcej > Usuń aktywator.

Problematyczne aktywatory dodatków możesz też usunąć, odinstalowując dodatek.

Odmowa dostępu: DriveApp lub zasada domeny wyłączyła aplikacje innych firm na Dysku

Administratorzy Google Workspace domen mogą wyłączyć w swoich domenach interfejs Drive API, co uniemożliwia użytkownikom instalowanie i używanie aplikacji Dysku Google. To ustawienie uniemożliwia też użytkownikom korzystanie z dodatków Apps Script, które korzystają z usługi Dysk lub zaawansowanej usługi Dysku (nawet jeśli skrypt został autoryzowany przed wyłączeniem interfejsu Drive API przez administratora).

Jeśli jednak dodatek lub aplikacja internetowa wykorzystująca usługę Dysk został opublikowany na potrzeby instalacji w całej domenie i został zainstalowany przez administratora dla niektórych lub wszystkich użytkowników w domenie, to skrypt będzie działać u tych użytkowników, nawet jeśli interfejs Drive API jest w domenie wyłączony.

Skrypt nie ma uprawnień do pobierania tożsamości aktywnego użytkownika.

Wskazuje, że skrypt nie ma dostępu do tożsamości ani adresu e-mail aktywnego użytkownika. To ostrzeżenie jest wynikiem wywołania Session.getActiveUser(). Może też być wynikiem wywołania Session.getEffectiveUser(), jeśli skrypt działa w trybie autoryzacji innym niż AuthMode.FULL. Jeśli to ostrzeżenie jest sygnalizowane, kolejne wywołania User.getEmail() zwracają tylko „”.

W zależności od trybu autoryzacji, w którym działa skrypt, można rozwiązać ten problem na kilka sposobów. Tryb autoryzacji jest widoczny w wywoływanych funkcjach jako właściwość authMode eparametru zdarzenia.

Brak biblioteki

Jeśli dodasz do skryptu popularną bibliotekę, może pojawić się komunikat o błędzie z informacją, że jej brakuje, mimo że biblioteka jest wymieniona jako zależność dla skryptu. Przyczyną może być to, że zbyt wiele osób korzysta jednocześnie z biblioteki. Aby uniknąć tego błędu, wypróbuj jedno z tych rozwiązań:

  • Skopiuj i wklej kod biblioteki do skryptu i usuń zależność biblioteki.
  • Skopiuj skrypt biblioteki i wdróż go jako bibliotekę ze swojego konta. Pamiętaj, aby zaktualizować zależność w pierwotnym skrypcie do nowej biblioteki, a nie biblioteki publicznej.

Wystąpił błąd z powodu brakującej wersji biblioteki lub wersji wdrożenia. Nie znaleziono kodu błędu

Ten komunikat o błędzie oznacza jedną z następujących sytuacji:

  • Wdrożona wersja skryptu została usunięta. Informacje o tym, jak zaktualizować wdrożoną wersję skryptu, znajdziesz w sekcji Edytowanie wdrożenia z wersjami.
  • Wersja biblioteki używanej przez skrypt została usunięta. Aby sprawdzić, której biblioteki brakuje, obok jej nazwy kliknij Więcej > Otwórz w nowej karcie. Jeśli brakuje biblioteki, pojawia się komunikat o błędzie. Gdy znajdziesz bibliotekę, którą musisz zaktualizować, wykonaj jedną z tych czynności:
  • Skrypt biblioteki używanej przez skrypt zawiera inną bibliotekę, która korzysta z usuniętej wersji. Wykonaj jedną z tych czynności:
    • Jeśli masz uprawnienia do edycji biblioteki używanej w skrypcie, zaktualizuj bibliotekę dodatkową w tym skrypcie do istniejącej wersji.
    • Zaktualizuj bibliotekę, aby użyć innej wersji. Zobacz Aktualizowanie biblioteki.
    • Usuń bibliotekę z projektu skryptu i kodu. Więcej informacji znajdziesz w artykule Usuwanie biblioteki.

Error 400: invalid_scope podczas wywoływania interfejsu Google Chat API za pomocą usługi zaawansowanej

Jeśli zobaczysz Error 400: invalid_scope z komunikatem o błędzie Some requested scopes cannot be shown, oznacza to, że nie zostały określone żadne zakresy autoryzacji w pliku appsscript.json projektu Apps Script. W większości przypadków Apps Script automatycznie określa zakresy, których potrzebuje skrypt, ale gdy używasz usługi zaawansowanej Google Chat, musisz ręcznie dodać zakresy autoryzacji używane przez skrypt do pliku manifestu projektu Apps Script. Zobacz Ustawianie jawnych zakresów.

Aby naprawić ten błąd, dodaj odpowiednie zakresy autoryzacji do pliku appsscript.json projektu Apps Script w tablicy oauthScopes. Aby na przykład wywołać metodę spaces.messages.create, dodaj ten fragment kodu:

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

Debugowanie

Nie wszystkie błędy powodują wyświetlenie komunikatu o błędzie. Może wystąpić bardziej subtelny błąd związany z prawidłowym technicznie kodem i możliwością wykonania, ale wyniki nie są zgodne z oczekiwaniami. Oto kilka strategii radzenia sobie z takimi sytuacjami i dalszego badania skryptu, który nie działa w oczekiwany sposób.

Logowanie

Podczas debugowania często warto rejestrować informacje w ramach wykonywania projektu skryptu. Google Apps Script udostępnia 2 metody rejestrowania informacji: usługę logowania w chmurze oraz bardziej podstawowe usługi Loggera i konsoli, które są dostępne w edytorze Apps Script.

Więcej informacji znajdziesz w przewodniku dotyczącym logowania.

Raportowanie błędów

Wyjątki spowodowane przez błędy środowiska wykonawczego są automatycznie rejestrowane za pomocą usługi Google Cloud Error Reporting. Ta usługa umożliwia wyszukiwanie i filtrowanie komunikatów o wyjątkach tworzonych przez projekt skryptu.

Aby uzyskać dostęp do usługi Error Reporting, zapoznaj się z artykułem Wyświetlanie logów Cloud i raportów o błędach w konsoli Google Cloud Platform.

Uruchomienia

Za każdym razem, gdy uruchamiasz skrypt, Apps Script rejestruje wykonanie, w tym logi Cloud. Te rekordy mogą pomóc Ci zrozumieć, jakie działania wykonał Twój skrypt.

Aby wyświetlić wykonania skryptu w projekcie Apps Script, po lewej stronie kliknij Uruchomienia .

Sprawdzam stan usługi Apps Script

Chociaż rzadko występują w konkretnych usługach Google Workspace (takich jak Gmail czy Dysk), występują przejściowe problemy, które mogą prowadzić do przerw w działaniu usług. W takim przypadku projekty Apps Script, które wchodzą w interakcje z tymi usługami, mogą nie działać zgodnie z oczekiwaniami.

Aby sprawdzić, czy nie doszło do przerwy w działaniu usługi Google Workspace, otwórz panel stanu Google Workspace. Jeśli występuje przerwa w działaniu usługi, poczekaj na rozwiązanie problemu lub poszukaj dodatkowej pomocy w Centrum pomocy Google Workspace lub w dokumentacji znanych problemów z Google Workspace.

Korzystanie z debugera i punktów przerwania

Aby znaleźć problemy w skrypcie, możesz go uruchomić w trybie debugowania. W trybie debugowania skrypt jest wstrzymywany po dotarciu do punktu przerwania, czyli wiersza zaznaczonego w skrypcie, który Twoim zdaniem może zawierać problem. Gdy skrypt wstrzyma działanie skryptu, wyświetla wartość każdej zmiennej w danym momencie, co pozwala badać wewnętrzne działanie skryptu bez konieczności dodawania wielu instrukcji logowania.

Dodaj punkt przerwania

Aby dodać punkt przerwania, najedź kursorem na numer wiersza wiersza, do którego chcesz go dodać. Kliknij kółko po lewej stronie numeru wiersza. Poniższy obraz przedstawia przykład punktu przerwania dodanego do skryptu:

Dodaj punkt przerwania

Uruchamianie skryptu w trybie debugowania

Aby uruchomić skrypt w trybie debugowania, u góry edytora kliknij Debuguj.

Zanim skrypt uruchomi wiersz z punktem przerwania, wstrzyma się i wyświetli tabelę z informacjami o debugowaniu. Możesz użyć tej tabeli do badania danych takich jak wartości parametrów czy informacje przechowywane w obiektach.

Aby sterować sposobem uruchamiania skryptu, u góry panelu Debuger użyj przycisków „Wejdź”, „Wejdź po przejściu” i „wyjście”. Dzięki nim można uruchamiać skrypt po jednym wierszu i sprawdzać, jak wartości zmieniają się w czasie.

Problemy z wieloma kontami Google

Jeśli zalogujesz się na kilka kont Google jednocześnie, możesz mieć problem z dostępem do dodatków i aplikacji internetowych. Wielokrotne logowanie i jednoczesne logowanie na kilka kont Google nie jest obsługiwane w przypadku Apps Script, dodatków ani aplikacji internetowych.

  • Gdy otworzysz edytor Apps Script po zalogowaniu się na więcej niż 1 konto, Google poprosi Cię o wybranie konta, którego chcesz użyć.

  • Jeśli po otwarciu aplikacji internetowej lub dodatku występują problemy z wielokrotnym logowaniem, wypróbuj jedno z tych rozwiązań:

    • Wyloguj się ze wszystkich kont Google i zaloguj się tylko na to, które zawiera odpowiedni dodatek lub aplikację internetową.
    • Otwórz okno incognito w Google Chrome lub odpowiadające mu okno przeglądania prywatnego i zaloguj się na konto Google z dodatkiem lub aplikacją internetową, do której chcesz uzyskać dostęp.

Uzyskiwanie pomocy

Debugowanie problemu za pomocą wymienionych powyżej narzędzi i technik może rozwiązać wiele problemów, ale mogą wystąpić problemy, które wymagają dodatkowej pomocy. Na naszej stronie pomocy znajdziesz informacje o miejscach, w których można zadawać pytania i zgłaszać błędy.