Rozwiązywanie problemów

Nawet najbardziej doświadczony programista rzadko pisze kod za pierwszym razem, dlatego rozwiązywanie problemów jest ważną częścią procesu programowania. W tej sekcji omówimy kilka technik, które mogą pomóc w wykrywaniu, interpretowaniu i debugowaniu błędów w skryptach.

Komunikaty o błędach

Gdy skrypt napotka błąd, wyświetli się komunikat o błędzie. Do wiadomości dołączono wiersz z numerem służącym do rozwiązywania problemów. Wyświetlamy w ten sposób 2 podstawowe typy błędów: błędy składni i błędy środowiska wykonawczego.

Błędy składniowe

Błędy składni są powodowane przez napisanie kodu niedostosowanego do gramatyki JavaScriptu. Błędy są wykrywane natychmiast po zapisaniu skryptu. 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);
}

Problem ze składnią dotyczy brakującego znaku ) na końcu czwartego wiersza. Gdy spróbujesz zapisać skrypt, pojawi się następujący błąd:

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

Tego typu błędy są zazwyczaj łatwe do naprawienia, ponieważ są wykrywane natychmiast i zwykle mają proste przyczyny. Nie można zapisać pliku, który zawiera błędy składniowe, co oznacza, że w projekcie zostanie zapisany tylko prawidłowy kod.

Błędy w czasie wykonywania

Błędy te są spowodowane nieprawidłowym użyciem funkcji lub klasy i można je wykryć dopiero po uruchomieniu skryptu. Na przykład ten kod powoduje błąd środowiska wykonawczego:

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 podczas wywołania funkcji MailApp.sendEmail przekazujemy wartość „john” w polu adresu e-mail. Ponieważ nie jest to prawidłowy adres e-mail, podczas uruchamiania skryptu zgłasza ten błąd:

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

To, co utrudnia rozwiązywanie tych błędów, polega na tym, że często dane przekazywane do funkcji nie są zapisywane w kodzie, ale pobierane z arkusza kalkulacyjnego, formularza lub innego zewnętrznego źródła danych. W znalezieniu przyczyny tych błędów można skorzystać z podanych niżej metod debugowania.

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 przekroczono dzienny limit dla danego działania. Ten błąd może się pojawić np. wtedy, gdy wysyłasz zbyt wiele e-maili w ciągu jednego dnia. Limity są ustalane na różnych poziomach dla kont klientów indywidualnych, domen i kont premium i mogą ulec zmianie w dowolnym momencie bez uprzedniego powiadomienia Google. Limity dla różnych działań znajdziesz w dokumentacji limitów Apps Script.

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

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

  • Serwer lub system Google są tymczasowo niedostępne. Zaczekaj chwilę i spróbuj ponownie uruchomić skrypt.
  • W skrypcie występuje błąd, który nie odpowiada odpowiedniemu komunikatowi o błędzie. Zdebuguj skrypt i zobacz, czy możesz wyodrębnić problem.
  • W Google Apps Script występuje błąd, który powoduje ten błąd. Instrukcje wyszukiwania i wypełniania raportów o błędach znajdziesz w artykule Błędy. Zanim zgłosisz nowy błąd, sprawdź, czy inni już go zgłosili.

Ta czynność wymaga autoryzacji.

Ten błąd oznacza, że skrypt nie ma uprawnień wymaganych do uruchomienia. Po uruchomieniu skryptu w edytorze skryptów lub opcji menu niestandardowego użytkownikowi wyświetla się okno autoryzacji. Jeśli jednak skrypt jest uruchamiany z poziomu wyzwalacza, umieszczony na stronie w Witrynach Google lub działa jako usługa, nie można wyświetlić okna dialogowego i jest wyświetlany ten komunikat o błędzie.

Aby autoryzować skrypt, otwórz edytor skryptów i uruchom dowolną funkcję. Pojawi się prośba o autoryzację, dzięki której będzie można autoryzować projekt 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 (ponieważ błąd występuje np. w przypadku używanego dodatku), zazwyczaj możesz autoryzować skrypt, używając go ponownie. Jeśli reguła nadal się uruchamia i powoduje ten błąd, możesz ją usunąć, wykonując te czynności:

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

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

Odmowa dostępu: DyskApp lub Zasady domeny wyłączają aplikacje Dysku innych firm

Administratorzy Google Workspace domen mogą wyłączyć w ich domenie interfejs Drive API, co uniemożliwia użytkownikom instalowanie aplikacji Dysku Google i korzystanie z nich. To ustawienie uniemożliwia też użytkownikom korzystanie z dodatków Apps Script, które korzystają z usługi Dysku lub zaawansowanej usługi Dysku (nawet jeśli skrypt został autoryzowany, zanim administrator wyłączył interfejs Drive API).

Jeśli jednak dodatek lub aplikacja internetowa korzystająca z usługi Dysk zostanie opublikowana dla instalacji w całej domenie i zostanie zainstalowana przez administratora dla niektórych lub wszystkich użytkowników w domenie, skrypt będzie działać u tych użytkowników, nawet jeśli interfejs Drive API jest wyłączony w domenie.

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

Wskazuje, że skrypt nie ma dostępu do tożsamości i adresu e-mail aktywnego użytkownika. To ostrzeżenie jest wynikiem wywołania metody Session.getActiveUser(). Może to być też 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 „”.

Istnieje kilka sposobów rozwiązania tego problemu w zależności od trybu autoryzacji używanego skryptu. Tryb autoryzacji jest ujawniany przez funkcje uruchamiane jako właściwość authMode parametru zdarzenia e.

Brak biblioteki

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

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

Wystąpił błąd z powodu brakującej wersji biblioteki lub wersji wdrożenia. Kod błędu: Not_Found

Ten komunikat o błędzie oznacza jedną z tych sytuacji:

  • Wdrożona wersja skryptu została usunięta. Aby zaktualizować wdrożoną wersję skryptu, zapoznaj się z sekcją Edytowanie wdrożenia z obsługą wersji.
  • Wersja biblioteki, której używa skrypt, została usunięta. Aby sprawdzić, której biblioteki brakuje, obok jej nazwy kliknij Więcej > Otwórz w nowej karcie. W braku biblioteki wyświetla 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, której używa Twój skrypt, zaktualizuj bibliotekę dodatkową w tym skrypcie do istniejącej wersji.
    • Zaktualizuj bibliotekę, aby użyć innej wersji. Przeczytaj sekcję Aktualizowanie biblioteki.
    • Usuń bibliotekę z projektu skryptu i kodu. Zobacz Usuwanie biblioteki.

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

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

Aby naprawić ten błąd, dodaj odpowiednie zakresy autoryzacji do pliku appsscript.json projektu Apps Script jako część tablicy oauthScopes. Aby na przykład wywoływać metodę spaces.messages.create, dodaj ten kod:

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

Debugowanie

Nie wszystkie błędy powodują wyświetlenie komunikatu o błędzie. Czasem może występować subtelny błąd, który oznacza, że kod jest technicznie prawidłowy i można go wykonać, ale wyniki nie są zgodne z Twoimi oczekiwaniami. Oto kilka strategii radzenia sobie w takich sytuacjach i dokładniejszej analizy skryptu, który nie działa w oczekiwany sposób.

Logowanie

Podczas debugowania często pomocne jest rejestrowanie informacji w trakcie wykonywania projektu skryptu. Google Apps Script udostępnia 2 metody rejestrowania informacji: usługę logowania w chmurze oraz bardziej podstawowe usługi rejestrowania i konsol, które są wbudowane w edytor Apps Script.

Więcej informacji znajdziesz w przewodniku po rejestrowaniu.

Raportowanie błędów

Wyjątki związane z błędami środowiska wykonawczego są automatycznie rejestrowane za pomocą usługi Google Cloud Error Reporting. Ta usługa umożliwia wyszukiwanie i filtrowanie wiadomości o wyjątkach utworzonych przez projekt skryptu.

Aby uzyskać dostęp do usługi Error Reporting, przeczytaj sekcję o wyświetlaniu logów i raportów o błędach Cloud w konsoli Google Cloud Platform.

Uruchomienia

Za każdym razem, gdy uruchamiasz skrypt, Apps Script rejestruje jego wykonanie wraz z logami Cloud. Rekordy te ułatwiają określenie, jakie działania były wykonywane przez skrypt.

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

Sprawdzam stan usługi Apps Script

Czasami jednak w określonych usługach Google Workspace (np. Gmailu czy Dysku) występują tymczasowe problemy, które mogą prowadzić do przerw w ich działaniu. W takim przypadku projekty Apps Script, które wchodzą w interakcję z tymi usługami, mogą nie działać zgodnie z oczekiwaniami.

Aby sprawdzić, czy 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, aż zostanie rozwiązany, lub poszukaj dodatkowej pomocy w Centrum pomocy Google Workspace lub dokumentacji znanych problemów z Google Workspace.

Korzystanie z debugera i punktów przerwania

Aby zlokalizować problemy w skrypcie, możesz go uruchomić w trybie debugowania. Gdy uruchamiasz skrypt w trybie debugowania, skrypt zostaje wstrzymany, gdy dotrze do punktu przerwania, który jest wierszem wyróżnionym w skrypcie, który Twoim zdaniem może powodować problemy. Po wstrzymaniu skryptu wyświetla wartość każdej zmiennej w danym momencie, co pozwala badać jego wewnętrzne działanie bez konieczności dodawania wielu instrukcji logowania.

Dodaj punkt przerwania

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

Dodaj punkt przerwania

Uruchamianie skryptu w trybie debugowania

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

Przed uruchomieniem skryptu skrypt z punktem przerwania wstrzymuje działanie i wyświetla tabelę z informacjami na potrzeby debugowania. Za pomocą tej tabeli możesz badać dane, takie jak wartości parametrów czy informacje przechowywane w obiektach.

Aby sterować uruchamianiem skryptu, u góry panelu Debugger użyj przycisków „Wejdź”, „Krok ponad” i „Wyjdź”. Pozwalają uruchamiać skrypt po jednym wierszu i sprawdzać, jak wartości zmieniają się w czasie.

Problemy z używaniem wielu kont Google

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

  • Jeśli otworzysz edytor Apps Script po zalogowaniu się na więcej niż jedno konto, Google poprosi Cię o wybranie konta, z którego chcesz korzystać.

  • Jeśli otworzysz aplikację internetową lub dodatek i wystąpią problemy z wielokrotnym logowaniem, wypróbuj jedno z tych rozwiązań:

    • Wyloguj się ze wszystkich kont Google i zaloguj się tylko na to, na którym jest zainstalowany dodatek lub aplikacja internetowa, z której chcesz korzystać.
    • Otwórz w Google Chrome okno incognito lub jego odpowiednik w trybie prywatnym i zaloguj się na konto Google, na którym znajduje się dodatek lub aplikacja internetowa, z której chcesz korzystać.

Uzyskiwanie pomocy

Debugowanie problemu za pomocą narzędzi i technik wymienionych powyżej może rozwiązać wiele różnych problemów. Niektóre problemy mogą jednak wymagać dodatkowej pomocy. Informacje o tym, gdzie można zadawać pytania i zgłaszać błędy, znajdziesz na stronie pomocy.