Body zdarma Java týden
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

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

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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.

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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

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

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.


 

 

Článek pro vás napsal Jan Hora
Avatar
Jak se ti líbí článek?
1 hlasů
Autor se poslední 4 roky věnuje programování pro Google Suite.
Předchozí článek
Google Apps Script - První spuštění funkce
Všechny články v sekci
Google API
Miniatura
Následující článek
Google Apps Script - Časové spouštěče
Aktivity (6)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!