2013-06-18 15 views
7

Po uruchomieniu skryptu aplikacji google z arkusza google, jeśli jeden z google apis jest nieprawidłowo używany, na górze arkusza kalkulacyjnego wyświetlany jest czerwony błąd "butterbar". Ta wiadomość zwykle zawiera informacje przydatne dla twórcy skryptu (komunikat o błędzie z apletu google, np. "Współrzędne lub wymiary zakresu są nieprawidłowe."), Ale niekoniecznie dla użytkownika arkusza kalkulacyjnego (tłumaczenie z prawdziwego zdarzenia może zrobić, aby go rozwiązać).Jak przesłać niestandardowy komunikat o błędzie ze skryptów aplikacji Google?

Przeszukałem numer UiApp api documentation, ale nie widziałem sposobu dostosowania tego komunikatu. Czy można rzucić własny komunikat o błędzie?

Odpowiedz

18

Jak każdy javascript, można użyć:

try { 
    ... 
} 
catch (error) { 
    throw new Error("More meaningful error."); 
{ 

Istnieje numerous examples tego w użyciu, nawet jeśli pytania nie są dokładnie do Ciebie.

Moja osobista opinia jest taka, że ​​najlepiej sprawdza się dane wejściowe do funkcji i rzuca na nie błędy (np. this answer), zamiast łapać błędy z wezwań serwisowych. Odpowiedni czas użycia polecenia try..catch będzie wtedy, gdy nie masz praktycznego sposobu sprawdzania poprawności parametrów, jak w przypadku this answer.

+0

Dzięki! Nie wiedziałem, że niestandardowy wyjątek zastąpiłby tekst z zapisem maskującym, który jest dokładnie tym, czego chciałem. Jak już powiedziałeś, wcześniejsza kontrola w celu sprawdzenia poprawności parametrów przekazywanych do interfejsu API to dokładnie to, co planowałem zrobić. –

+1

@Mogsdad, jest to bardzo pomocne, ale dla funkcji zainicjowanych na serwerze. Jednak jeśli ta sama funkcja zostanie wywołana z google.script.run, zgłoszony błąd zostanie zarejestrowany w konsoli. Czy istnieje sposób, aby ominąć to i nadal wyświetlać wiadomość na pasku masła? – chibis

+0

@chibis, gdy skrypt jest wywoływany przez google.script.run, otrzymuje własną instancję wykonawczą. Oto, co myślę, bez próbowania ... "Pasek" butterbar "jest częścią interfejsu użytkownika prezentowanego użytkownikowi skryptu lub kontenera, który jest kolejną instancją wykonawczą i nie jest dostępny dla instancji google.script.run. Mimo to brzmi to jak pytanie, które powinno być samo w sobie, więc śmiało i spytaj! – Mogsdad

-1

Możesz spróbować rzucić okiem na klasę Base, która daje możliwość dodania okna alertu lub innych okien dialogowych do interakcji z użytkownikiem aplikacji, jeśli jest ona powiązana z arkuszem kalkulacyjnym (na przykład msgBox()). Dla DocumentApp użyj klasy Ui do interakcji z jej interfejsem.

Nigdy nie próbowałem, ale jeśli użyjesz konstrukcji try ... catch z instrukcją rzutowania, może również działać.

Cheers

Nicolas

2

Oto najlepszy sposób przekazania danych ze skryptu do komunikatu o błędzie. Najpierw ustaw globalną zmienną obiekt do przechowywania danych potrzebnych do obsługi błędów. Następnie zapisz dane do tego obiektu w sekcji każdej z funkcji: try{}. Wreszcie w catch(e) wywołaj funkcję errHandler, która przejdzie obiekt danych błędu. Zobacz poniższy kod: code.gs.

var onErrObj = {} 
function myFunction(){ 

try{ 
    // function code goes here; 
    // add more elements to onErrObj as desired; 
}catch(e){ 
     onErrObj['data1'] = 'someData'; 
     onErrObj['data'] = 'some Other Data'; 
     errHandler(e,'myFunction'); 
} 

function errHandler(e,strFunc){ 
     var message = e.message+'\n in file: '+e.fileName+' on line: '+e.lineNumber; 
     var sendto = '[email protected]'; 
     var subject = 'My App encountered an error occured in '+strFunc; 
     var errProps = JSON.stringify(this.onError); 
     message = subject+'\n'+message+'\n onError: '+errProps; 
     GmailApp.sendEmail(sendto, subject, message); 
} 
Powiązane problemy