top of page
blog_zahlavi_pozadi_00.jpg

Blog

  • Obrázek autoraJan Hora

Lekce 3 – jednoduché a instalované spouštěče

Aktualizováno: 3. 11. 2020

V minulé lekci 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í jednoduchých 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()

Ve funkci můžeme vytvořit menu pro spouštění funkcí, jak jsme si ukázali ve druhé lekci.

Nebo třeba 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 trochu času.

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 v původní tabulce 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 jsme právě otevřeli.

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ždy při otevření tabulky vybrat buňku A3, jako bychom ji vybrali my sami ručně. A vybere ji vždy na prvním listu tabulky, který je po otevření automaticky aktivní.

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. Skript je opravdu přibalený uvnitř tabulky a nemůžeme ho tudíž upravovat ve chvíli, kdy se tabulka teprve načítá.

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.

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('vas.email@gmail.com', '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.




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().



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.

Pokud máte firemní verzi Google Workspace (dříve G Suite) a vyzkoušíte totéž s kolegou ve firmě, zjistíte, že skript mail zjistil i bez jeho autorizace a zaslal ho na Váš e-mail.


V příští lekci se budeme věnovat časovým spouštěčům.


bottom of page