IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 3 - Google Apps Script - Jednoduché a instalované spouštěče

V minulé lekci, Google Apps Script - První spuštění funkce, jsme si poprvé spustili svou funkci.

Funkce si v Google Apps Scriptu můžeme pojmenovat jak chceme (samozřejmě při dodržení základních pravidel). Existuje ale několik názvů funkcí, které Apps Script používá speciálním způsobem. V tuto chvíli nás budou zajímat jen dvě z nich a to:

  • onOpen() - provede se při otevření tabulky, dokumentu nebo prezentace - její použití jsme si již ukázali v minulých lekcích
  • onEdit() - provede se ve chvíli, kdy uživatel v tabulce provede nějakou změnu. Buď změní obsah některé buňky, nebo třeba vloží nový řádek.

Obě funkce patří mezi takzvané jednoduché spouštěče (triggery) a mají řadu speciálních vlastností, ale i omezení. Jednou z těchto vlastností je, že nevyžadují autorizaci. Uživatel tedy nemusí jejich vykonání povolovat, jako jsme to viděli v minulé lekci.

Omezení triggerů

Aby taková neautorizovaná funkce nemohla provádět žádné nekalé činnosti, musí mít poměrně přísná omezení toho, co smí vykonávat. Tato omezení jsou následující:

  • musí být součástí tabulky, dokumentu nebo prezentace, funkce se nespustí v samostatném skriptu
  • nespustí se v případě, že máme k dokumentu nebo tabulce jen práva pro čtení nebo komentování
  • nesmí využívat služby, které vyžadují autorizaci, například nemůže odeslat e-mail
  • může pracovat s dokumentem nebo tabulkou, ke které je připojena, ale nemůže měnit žádné jiné dokumenty nebo tabulky
  • maximální doba běhu je 30 vteřin

Příklady využití funkce onOpen()

Můžeme vytvořit menu pro spouštění funkcí, jak jsme si ukázali na začátku lekce.

Dále můžeme nastavit aktuální buňku na konkrétní místo v tabulce. Pokud například zadáváme údaje do tabulky každý měsíc na jiný list, může nám funkce onOpen() vybrat podle data konkrétní list tabulky a přesunout se na první volný řádek pod již vloženými údaji. Drobnost, která nám ale může ušetřit každý den trošku času.

Tuto zjednodušenou variantu výběru konkrétního místa v tabulce si hned ukážeme. Můžete si vytvořit novou tabulku, nebo si jednoduše upravte funkci onOpen() na následující tvar:

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var cell = sheet.getRange(3,1).activateAsCurrentCell();
}

Podívejme se, co by měla funkce provádět. První řádek vybere aktivní list tabulky. Tedy té tabulky, ke které je skript připojen a kterou máme právě otevřenou.

Na druhém řádku nejprve pomocí sheet.getRange(3,1) vybereme na listu buňku na třetím řádku a v prvním sloupci, jinak řečeno buňku A3.

Jakmile máme buňku vybranou, přímo ji nastavíme jako aktivní buňku metodou activateAsCurrentCell(). Jinými slovy funkce onOpen() by měla v tabulce vybrat buňku A3, jako bychom ji vybrali my sami ručně.

Skript si vyzkoušíme. Přepněte se z editoru skriptů zpět do tabulky a znovu ji načtěte, třeba klávesou F5. Všimněte si, že karta s otevřeným editorem skriptů se automaticky zavřela.

Počkejte, až se tabulka načte, a skutečně je vybraná buňka A3, zatímco normálně je po otevření tabulky aktivní buňka A1. Funkce onOpen() skutečně zafungovala a nebylo potřeba její spuštění autorizovat.

Instalované spouštěče

Možná vás napadne, jestli je možné při otevření tabulky spouštět i jinak pojmenovanou funkci. Možné to samozřejmě je, ale spuštění jinak pojmenované funkce již patří mezi tzv. instalované spouštěče.

Ty musíme vždy autorizovat, ale zároveň se jejich použitím zbavíme některých omezení, která platí pro jednoduché spouštěče.

Příklad

Ukážeme si jednoduchý příklad. Napíšeme si funkci, která nám pošle e-mail vždy, když někdo naši tabulku otevře. Funkce může vypadat třeba takto:

function tabulka_otevrena() {
  var user_email = Session.getActiveUser().getEmail();
  GmailApp.sendEmail('[email protected]', 'Tabulka otevřena', 'Tvou tabulku právě otevřel ' + user_email);
}

V editoru skriptů z menu vybereme volbu Upravit - Spouštěče aktuálního projektu. Otevře se nám nová záložka, její adresa začíná https://script.google.com a je to místo, kde můžeme zjistit a nastavovat spoustu věcí o všech svých skriptech. Na této stránce je Google nazývá projekty.

Protože jsme se na stránku dostali z editoru skriptů, máme již vybraný konkrétní projekt a přehled jeho spouštěčů. Žádný spouštěč zatím nemáme, takže klikneme vpravo dole na tlačítko Přidat spouštěč a v panelu, který se objeví, si nastavme volby podle následujícího obrázku:

Založení nového spouštěče - Google API

Na závěr klikneme na Uložit.

Protože již nejde o jednoduchý spouštěč, musíme jeho fungování autorizovat. Autorizaci si Google vynutí sám, ihned se vám otevře okno pro výběr účtu, pod kterým má spouštěč běžet. Postup autorizace je úplně stejný jako jsme si ukázali v minulé lekci, tedy následuje výběr účtu, varování, že aplikaci Google nezkontroloval, seznam práv, která skriptu povolujete a nakonec povolení běhu skriptu. Okna zmizí a v seznamu se objeví nový spouštěč, který se bude spouštět při každém otevření tabulky a bude volat funkci tabulka_otevrena().

Spouštěč je vytvořen - Google API

Nyní si zkuste tabulku znovu načíst. Po jejím otevření by se měla spustit funkce tabulka_otevrena() a vám by do vašeho Gmailu měla dorazit zpráva, že jste tabulku otevřeli vy. No, asi to není tak úplně překvapivá zpráva, že?

Sdílení tabulky

Máte ještě další Gmailový účet, nebo kolegu, kamaráda, který ho má? Můžete mu zkusit tabulku nasdílet a nechat ho, aby ji otevřel. Co přesně se teď stane?

Spustí se funkce tabulka_otevrena() a přestože tabulku otevřel váš kamarád, funkce se spustí pod vaším účtem, protože pro váš účet byl její běh povolen. Funkce proběhne a vám stejně jako předtím dorazí e-mail. Trochu překvapením bude jeho obsah, text e-mailu totiž bude Tvou tabulku právě otevřel a nic dalšího, e-mail člověka, který tabulku otevřel, se nedozvíte.

Důvodem je to, že váš kamarád jen otevřel tabulku a neprošel žádnou autorizací jako vy při zakládání spouštěče. On jednoduše nikde nepovolil, že skript smí zjišťovat jeho e-mailovou adresu a proto řádek skriptu Session.getActiveUser().getEmail() vrátí prázdný řetězec.

Trochu jiná situace by byla, pokud byste používali firemní verzi Google Suite a váš i kolegův účet patřily mezi firemní účty, pak by skript kolegův e-mail zjistil i bez jeho autorizace.

V příští lekci, Google Apps Script - Časové spouštěče, se budeme věnovat časovým spouštěčům.


 

Předchozí článek
Google Apps Script - První spuštění funkce
Všechny články v sekci
Google API
Přeskočit článek
(nedoporučujeme)
Google Apps Script - Časové spouštěče
Článek pro vás napsal Jan Hora
Avatar
Uživatelské hodnocení:
15 hlasů
Autor se poslední 4 roky věnuje programování pro Google Suite.
Aktivity