Debugowanie funkcji niestandardowej w Google Apps Script

Próbuję stworzyć moją pierwszą niestandardową funkcję dla arkusza kalkulacyjnego Google w Apps Script i mam problem z używaniem debuggera.

Pracuję nad custom function demo code z Dokumentacji Google i ustawiłem breakpoint w niestandardowej funkcji drivingDistance(origin, destination), która jest używana w komórce mojego arkusza kalkulacyjnego. Problem, który mam polega na tym, że debugger pokazuje parametry, które są przekazywane do funkcji jako undefined. Zawartość innych zmiennych, które są tworzone podczas wykonywania są wyświetlane poprawnie (o ile nie zależą od parametrów wejściowych).

Zabawne jest to, że chociaż parametry wejściowe są wyświetlane jako niezdefiniowane, obliczenia funkcji odnoszą sukces, więc wydaje się to być problemem debuggera. Niestety problem ten uniemożliwia mi pomyślną naukę tworzenia i debugowania własnego kodu (ponieważ będę musiał pracować ze skomplikowanymi parametrami wejściowymi).

Mam wrażenie, że problem jest związany z po stronie serwera wykonanie skryptu aplikacji, więc próbowałem zalogować parametry wejściowe za pomocą klasy Logger i próbowałem również skopiować te zmienne do nowych zmiennych lokalnych. Ale wszystko co wymyśliłem to undefined.

Kolejną dziwną wskazówką jest to, że typeof z parametrów zwraca String. Ale uzyskanie ich długości powoduje błąd i próba połączenia ich z innym łańcuchem zwraca łańcuch "undefined" (patrz mój zrzut ekranu).

Tutaj wpisz opis obrazka

Szukam spostrzeżeń na temat tego, co dzieje się tutaj.

Author: Rubén, 2013-11-29

1 answers

Debugger prawdopodobnie nie kłamie-jeśli uruchomisz tę funkcję w debuggerze, nie będzie miał żadnych parametrów przekazywanych do niego. Nie martw się jednak, musisz tylko upewnić się, że masz wartości używane do debugowania. Spójrz na Jak mogę przetestować funkcję wyzwalacza w gazie?, który demonstruje techniki, które można zastosować dla funkcji niestandardowych.

Zamiast definiować zdarzenie, które ma zostać przekazane do funkcji, należy podać (lub pobrać z arkusza kalkulacyjnego) wartości dla parametrów.

function test_drivingDistance() {
  // Define a set of test values
  var testSet = [[ 'Washington, DC', 'Seattle, WA' ],
                 [ 'Ottawa, ON', 'Orlando, FL'],
                 [ 'Paris, France', 'Dakar, Senegal']];

  // Run multiple tests
  for (var test in testSet) {
    Logger.log('Test ' + test + ' = ' + drivingDistance(testSet[test][0],testSet[test][1]));
  }

  // Get parameters from sheet
  var TestFromSheet = drivingDistance(ss.getRange('A1').getValue(),ss.getRange('A2').getValue());
}
Rozumiesz. Nadal można ustawić punkty przerwania wewnątrz funkcji lub użyć debugger do wstrzymania wykonania.

Edycja-analiza argumentów

Jakie argumenty odbiera funkcja niestandardowa wywołana z arkusza kalkulacyjnego?

Jesteś ograniczony w tym, co możesz zrobić, aby to debugować, ponieważ debugger nie może być używany do sprawdzania niestandardowej funkcji, gdy jest wywoływany z arkuszy, a ograniczenia zabezpieczeń funkcji niestandardowych blokują rejestrowanie. Może być wystarczające, aby uzyskać zrozumienie argumentu przechodzenia w ogóle. Podczas gdy funkcje javascript mogą mieć nazwane parametry, wszystkie argumenty są przekazywane jako obiekt podobny do tablicy, o nazwie arguments. Ta niestandardowa funkcja zwróci tablicę, która zgłasza otrzymane argumenty. Po wywołaniu z arkusza kalkulacyjnego, każdy argument pojawi się we własnej komórce, zaczynając od komórki, do której wprowadzasz funkcję:

function testArguments(  ) {
  var argArray = [];
  for (var arg in arguments) {
    argArray.push("arguments[" + arg + "] = " + JSON.stringify(arguments[arg]))
  }

  return argArray;
}

Zrzut ekranu

W javascript tak naprawdę nie ma takich typów jak int czy float-po prostu numer. Parametry te pojawią się bez cudzysłowów i będą wyglądały jak liczby. Daty są wyświetlane jako obiekty daty, ale po wydrukowaniu w ten sposób wyświetlane są jako ciągi date-Y. Ciągi mają cudzysłowy.

Funkcja niestandardowa nigdy nie otrzymuje zakresu jako argumentu; gdy podasz parametr zakresu w arkuszu kalkulacyjnym, jego zawartość jest gromadzona w jedno-lub dwuwymiarowej tablicy, a tablica jest argumentem.

 31
Author: Mogsdad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:25