Nawet najbardziej doświadczeni deweloperzy rzadko od razu piszą poprawny kod, dlatego rozwiązywanie problemów jest ważną częścią procesu programowania. W tej sekcji omówimy kilka technik, które pomogą Ci znaleźć, zrozumieć i debugować błędy w skryptach.
Komunikaty o błędach
Gdy skrypt napotka błąd, wyświetli się komunikat o błędzie. Komunikatowi towarzyszy numer wiersza, który służy do rozwiązywania problemów. Występują 2 podstawowe rodzaje błędów wyświetlanych w ten sposób: błędy składniowe i błędy czasu wykonywania.
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 komunikat o błędzie:
Brak ) po liście argumentów. (wiersz 4)
Tego typu błędy są zwykle łatwe do rozwiązania, ponieważ można je szybko znaleźć i mają zwykle proste przyczyny. Nie możesz zapisać pliku zawierającego błędy składni, co oznacza, że w Twoim projekcie zapisywany jest tylko prawidłowy kod.
Błędy w czasie wykonywania
Te błędy są spowodowane nieprawidłowym użyciem funkcji lub klasy i mogą zostać wykryte dopiero po uruchomieniu skryptu. Na przykład ten kod powoduje błąd czasu wykonywania:
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 prawidłowo sformatowany, ale podczas wywoływania funkcji MailApp.sendEmail
przekazujemy wartość „john” jako adres e-mail. Ponieważ nie jest to prawidłowy adres e-mail, podczas uruchamiania skryptu pojawia się ten błąd:
Nieprawidłowy e-mail: jan (wiersz 5)
Rozwiązywanie tych błędów jest trudniejsze, ponieważ dane przekazywane do funkcji nie są często zapisane w kodzie, ale 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 wskazuje, że został przekroczony dzienny limit danego działania. Ten błąd może się pojawić na przykład wtedy, gdy wysyłasz zbyt wiele e-maili w ciągu jednego dnia. Limity są ustawiane na różnych poziomach dla kont użytkowników indywidualnych, kont domen i kont premierowych. Mogą być one zmienione w dowolnym momencie bez wcześniejszego powiadomienia przez 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.
Te błędy mogą mieć kilka przyczyn:
- 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 ma odpowiadającego mu komunikatu o błędzie. Spróbuj debugować skrypt, aby zobaczyć, czy uda Ci się zdiagnozować problem.
- Wystąpił błąd w Google Apps Script, który powoduje ten błąd. Instrukcje dotyczące wyszukiwania i przesyłania raportów o błędach znajdziesz w artykule Błędy. Zanim zgłosisz nowy błąd, sprawdź, czy inni użytkownicy nie zgłosili go wcześniej.
Aby wykonać tę czynność, musisz się zalogować.
Ten błąd oznacza, że skrypt nie ma wymaganych uprawnień do uruchomienia. Gdy skrypt jest uruchamiany w Edytorze skryptów lub z niestandardowego elementu menu, użytkownikowi wyświetla się okno autoryzacji. Jednak gdy skrypt jest uruchamiany z pobudki, osadzony na stronie Witryny Google lub uruchamiany jako usługa, nie można wyświetlić okna dialogowego 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 autoryzować skrypt.
Ten błąd jest często spowodowany przez wyzwalacze, które są aktywowane, zanim użytkownik je autoryzował. Jeśli nie masz dostępu do projektu skryptu (ponieważ błąd występuje na przykład w przypadku używanego przez Ciebie dodatku), możesz zazwyczaj autoryzować skrypt, używając ponownie tego dodatku. Jeśli wyzwalacz nadal powoduje ten błąd, możesz go usunąć, wykonując te czynności:
- Po lewej stronie projektu Apps Script kliknij Aktywatory .
- Po prawej stronie reguły, którą chcesz usunąć, kliknij Więcej > Usuń aktywator.
Możesz też usunąć problemowe wyzwalacze dodatku, odinstalowując dodatek.
Odmowa dostępu: DriveApp lub zasada domeny wyłączyła aplikacje innych firm na Dysku
Administratorzy domen Google Workspace mogą wyłączyć interfejs Drive API w swojej domenie, co uniemożliwi użytkownikom instalowanie i korzystanie z aplikacji Dysku Google. To ustawienie uniemożliwia też użytkownikom korzystanie z dodatków do Apps Script, które korzystają z usługi Dysk lub zaawansowanej usługi Dysk (nawet jeśli skrypt został autoryzowany przed wyłączeniem interfejsu Drive API przez administratora).
Jeśli jednak dodatek lub aplikacja internetowa korzystająca z usługi Dysk jest opublikowana do instalacji w całej domenie i jest zainstalowana przez administratora dla niektórych lub wszystkich użytkowników w domenie, skrypt działa dla tych użytkowników, nawet jeśli interfejs API Dysku 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 zostało wysłane w odpowiedzi na połączenie z numeru 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 zostanie wysłane, kolejne wywołania funkcji User.getEmail()
zwracają tylko „"”.
Istnieje kilka sposobów rozwiązania tego problemu w zależności od trybu autoryzacji, w którym działa skrypt. Tryb autoryzacji jest dostępny w funkcjach wywoływanych jako właściwość authMode
parametru e
event.
- W kolumnie
AuthMode.FULL
możesz zamiast tego użyć kolumnySession.getEffectiveUser()
. - W
AuthMode.LIMITED
sprawdź, czy właściciel zatwierdził skrypt. - W innych trybach autoryzacji nie używaj żadnej z tych metod.
- Jeśli jesteś klientem Google Workspace i po raz pierwszy widzisz to ostrzeżenie dotyczące instalowanego reguły, sprawdź, czy reguła działa jako użytkownik w Twojej organizacji.
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 kod biblioteki i wklej go do skryptu, a potem usuń zależność od biblioteki.
- Skopiuj skrypt biblioteki i wdrożyć go jako bibliotekę na swoim koncie. 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. Kod błędu Not_Found
Ten komunikat o błędzie oznacza jedno z tych zdarzeń:
- Rozmieszczona wersja skryptu została usunięta. Aby zaktualizować wdrożony skrypt, zapoznaj się z artykułem Edytowanie wdrożenia z wersjami.
- Wersja biblioteki używana przez skrypt została usunięta. Aby sprawdzić, której biblioteki brakuje, obok jej nazwy kliknij > Otwórz w nowej karcie. Brakująca biblioteka wyświetla komunikat o błędzie. Po znalezieniu biblioteki, którą chcesz zaktualizować, wykonaj jedną z tych czynności:
- Zaktualizuj bibliotekę, aby użyć innej wersji. Zobacz Aktualizowanie biblioteki.
- Usuń usunięte biblioteki z projektu skryptu i kodu. Więcej informacji znajdziesz w artykule Usuwanie biblioteki.
Więcej
- 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 skrypt, zaktualizuj w nim bibliotekę podrzędną do wersji, która już istnieje.
- Zaktualizuj bibliotekę, aby używać innej wersji. Zobacz Aktualizowanie biblioteki.
- Usuń bibliotekę z projektu skryptu i kodu. Zobacz Usuwanie biblioteki.
Błąd 400: invalid_scope podczas wywoływania interfejsu Google Chat API w przypadku usługi zaawansowanej
Jeśli napotkasz błąd Error 400: invalid_scope
z komunikatem Some requested scopes cannot be shown
, oznacza to, że w pliku appsscript.json
projektu Apps Script nie masz określonych żadnych zakresów autoryzacji. W większości przypadków Apps Script automatycznie określa zakresy uprawnień potrzebne do działania skryptu, ale jeśli używasz zaawansowanej usługi Chat, musisz ręcznie dodać do pliku manifestu projektu Apps Script zakresy uprawnień, których używa skrypt. Zobacz Ustawianie zakresów jednoznacznych.
Aby naprawić błąd, dodaj odpowiednie zakresy autoryzacji do pliku appsscript.json
projektu Apps Script jako element tablicy oauthScopes
. Aby na przykład wywołać metodę spaces.messages.create
, dodaj:
"oauthScopes": [
"https://www.googleapis.com/auth/chat.messages.create"
]
UrlFetch nie może wywoływać adresu <URL> ze względu na ustawienia administratora
Administratorzy Google Workspace mogą włączyć listę dozwolonych w konsoli administracyjnej, aby kontrolować, do których domen zewnętrznych masz dostęp za pomocą Apps Script.
Aby naprawić ten błąd, poproś administratora o dodanie adresu URL do listy dozwolonych.
Debugowanie
Nie wszystkie błędy powodują wyświetlenie komunikatu o błędzie. Może wystąpić błąd, który nie jest widoczny na pierwszy rzut oka, a kod jest technicznie prawidłowy i może być wykonany, ale wyniki nie są zgodne z oczekiwaniami. Poniżej znajdziesz kilka strategii radzenia sobie z takimi sytuacjami i dalszego sprawdzania skryptu, który nie działa zgodnie z oczekiwaniami.
Logowanie
Podczas debugowania często warto zapisywać informacje podczas wykonywania projektu skryptu. Google Apps Script ma 2 metody rejestrowania informacji: usługę rejestrowania w chmurze oraz prostsze usługi rejestrowania i konsoli, które są wbudowane w edytorze Apps Script.
Więcej informacji znajdziesz w przewodniku dotyczącym logowania.
Error Reporting
Wyjątki występujące z powodu błędów czasu wykonywania 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 zgłaszania błędów, 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 tworzy jego zapis, w tym dzienniki Cloud. Te rekordy mogą Ci pomóc zrozumieć, jakie akcje wykonał skrypt.
Aby wyświetlić wykonania skryptu w projekcie Apps Script, po lewej stronie kliknij Uruchomienia
.Sprawdzam stan usługi Apps Script
Chociaż zdarza się to rzadko, czasami w przypadku niektórych usług Google Workspace (takich jak Gmail czy Dysk) występują tymczasowe problemy, które mogą prowadzić do przerw w działaniu usługi. 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 nastąpiła awaria usługi Google Workspace, otwórz Panel stanu Google Workspace. Jeśli wystąpiła awaria, możesz poczekać, aż zostanie rozwiązana, lub uzyskać dodatkową pomoc 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 uruchomić go 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 się zatrzyma, wyświetla wartość każdej zmiennej w danym momencie, co pozwala Ci sprawdzać działanie skryptu bez konieczności dodawania wielu instrukcji logowania.
Dodawanie punktu przerwania
Aby dodać punkt przełamania, najedź kursorem na numer wiersza, do którego chcesz go dodać. Po lewej stronie numeru linii kliknij kółko. Na ilustracji poniżej widać przykład punktu przerwania dodanego do skryptu:
Uruchamianie skryptu w trybie debugowania
Aby uruchomić skrypt w trybie debugowania, u góry edytora kliknij Debugowanie.
Zanim skrypt uruchomi wiersz z punktem przerwania, wstrzyma się i wyświetli tabelę z informacjami o debugowaniu. Za pomocą tej tabeli możesz sprawdzać dane, np. wartości parametrów i informacje przechowywane w obiektach.
Aby kontrolować sposób uruchamiania skryptu, u góry panelu Debuger użyj przycisków „Wejdź”, „Wejdź po przejściu” i „wyjdź”. 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 logujesz się na kilka kont Google jednocześnie, możesz mieć problemy z dostępem do dodatków i aplikacji internetowych. Logowanie się na wiele kont (korzystanie z kilku kont Google jednocześnie) nie jest obsługiwane w przypadku projektów Apps Script, dodatków i aplikacji internetowych.
Jeśli otworzysz edytor Apps Script, będąc zalogowanym na więcej niż 1 konto, Google poprosi Cię o wybranie konta, na którym chcesz kontynuować.
Jeśli otworzysz aplikację internetową lub dodatek i napotkasz problemy z jednoczesnym korzystaniem z kilku kont, wypróbuj jeden z tych sposobów:
- Wyloguj się ze wszystkich kont Google i zaloguj się tylko na to, na którym znajduje się dodatek lub aplikacja internetowa, do której chcesz uzyskać dostęp.
- Otwórz okno incognito w Google Chrome lub podobne okno przeglądania prywatnego i zaloguj się na konto Google zawierające dodatek lub aplikację internetową, do których 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ą pojawić się problemy, które wymagają dodatkowej pomocy. Informacje o tym, gdzie można zadawać pytania i zgłaszać błędy, znajdziesz na stronie pomocy.