3. diel - Google Apps Script - Jednoduché a inštalované spúšťače
V minulej lekcii, Google Apps Script - Prvé spustenie funkcie , sme si prvýkrát spustili svoju funkciu. Funkcia si v Google Apps Script môžeme pomenovať ako chceme (samozrejme pri dodržaní základných pravidiel). Existuje ale niekoľko názvov funkcií, ktoré Apps Script používa špeciálnym spôsobom. V tejto chvíli nás budú zaujímať len dve z nich a to:
onOpen()
- vykoná sa pri otvorení tabuľky, dokumentu alebo prezentácie - jej použitie sme si už ukázali v minulých lekciáchonEdit()
- vykoná sa vo chvíli, keď používateľ v tabuľke vykoná nejakú zmenu. Buď zmení obsah niektoré bunky, alebo napríklad vloží nový riadok.
Obe funkcie patrí medzi takzvané jednoduché spúšťače (triggery) a majú rad špeciálnych vlastností, ale aj obmedzenia. Jednou z týchto vlastností je, že nevyžadujú autorizáciu. Užívateľ teda nemusí ich vykonanie povoľovať, ako sme to videli v minulej lekcii.
Obmedzenia triggerov
Aby takáto neautorizovaná funkcie nemohla vykonávať žiadne nekalej činnosti, musia mať pomerne prísne obmedzenia toho, čo smie vykonávať. Tieto obmedzenia sú nasledujúce:
- musí byť súčasťou tabuľky, dokumentu alebo prezentácie, funkcie sa nespustí v samostatnom skriptu
- nespustí sa v prípade, že máme k dokumentu alebo tabuľke len práva na čítanie alebo komentovanie
- nesmie využívať služby, ktoré vyžadujú autorizáciu, napríklad nemôže odoslať e-mail
- môže pracovať s dokumentom alebo tabuľkou, ku ktorej je pripojená, ale nemôže meniť žiadne iné dokumenty alebo tabuľky
- maximálna doba behu je 30 sekúnd
Príklady využitia funkcie onOpen ()
Môžeme vytvoriť menu pre spúšťanie funkcií, ako sme si ukázali na začiatku lekcie.
Ďalej môžeme nastaviť aktuálny bunku na konkrétne miesto v tabuľke. Ak
napríklad zadávame údaje do tabuľky každý mesiac na iný list, môže nám
funkcia onOpen()
vybrať podľa dátumu konkrétnej list tabuľky a
presunúť sa na prvý voľný riadok pod už vloženými údajmi. Drobnosť,
ktorá nám ale môže ušetriť každý deň trošku času.
Túto zjednodušenú variantu výbere konkrétneho miesta v tabuľke si hneď
ukážeme. Môžete si vytvoriť novú tabuľku, alebo si jednoducho upravte
funkciu onOpen()
na nasledujúce tvar:
function onOpen() { var sheet = SpreadsheetApp.getActiveSheet(); var cell = sheet.getRange(3,1).activateAsCurrentCell(); }
Pozrime sa, čo by mala funkcie vykonávať. Prvý riadok vyberie aktívny hárok tabuľky. Teda tej tabuľky, ku ktorej je skript pripojený a ktorú máme práve otvorenú.
Na druhom riadku najprv pomocou sheet.getRange(3,1)
vyberieme na
liste bunku na treťom riadku a v prvom stĺpci, inak povedané bunku
A3.
Akonáhle máme bunku vybranú, priamo ju nastavíme ako aktívny bunku
metódou activateAsCurrentCell()
. Inými slovami funkcie
onOpen()
by mala v tabuľke vybrať bunku A3, ako
by sme ju vybrali my sami ručne.
Skript si vyskúšame. Prepnite sa z editora skriptov späť do tabuľky a znova ju načítajte, treba klávesom F5. Všimnite si, že karta s otvoreným editorom skriptov sa automaticky zavrela.
Počkajte, až sa tabuľka načíta, a skutočne je vybratá bunka
A3, zatiaľ čo normálne je po otvorení tabuľky aktívna
bunka A1. Funkcia onOpen()
skutočne zafungovala a
nebolo potrebné jej spustenie autorizovať.
Inštalované spúšťače
Možno vás napadne, či je možné pri otvorení tabuľky spúšťať aj inak pomenovanú funkciu. Možné to samozrejme je, ale spustenie inak pomenované funkcie už patrí medzi tzv. Inštalované spúšťače.
Tie musíme vždy autorizovať, ale zároveň sa ich použitím zbavíme niektorých obmedzení, ktoré platia pre jednoduché spúšťače.
Príklad
Ukážeme si jednoduchý príklad. Napíšeme si funkciu, ktorá nám pošle e-mail vždy, keď niekto naši tabuľku otvorí. Funkcia môže vyzerať napríklad 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 editore skriptov z menu vyberieme voľbu Upraviť - Spúšťače aktuálneho projektu. Otvorí sa nám nová záložka, jej adresa začína https://script.google.com a je to miesto, kde môžeme zistiť a nastavovať veľa vecí o všetkých svojich skriptoch. Na tejto stránke je Google nazýva projekty.
Pretože sme sa na stránku dostali z editora skriptov, máme už vybraný konkrétny projekt a prehľad jeho spúšťačov. Žiadny spúšťač zatiaľ nemáme, takže klikneme vpravo dole na tlačidlo Pridať spúšťač a v paneli, ktorý sa objaví, si nastavme voľby podľa nasledujúceho obrázku:
Na záver klikneme na Uložiť.
Pretože už nejde o jednoduchý spúšťač, musíme jeho fungovanie
autorizovať. Autorizáciu si Google vynúti sám, ihneď sa vám otvorí okno
pre výber účtu, pod ktorým má spúšťač bežať. Postup autorizácie je
úplne rovnaký ako sme si ukázali v minulej
lekcii, teda nasleduje výber účtu, varovanie, že aplikáciu Google
neskontroloval, zoznam práv, ktoré skriptu povoľujete a nakoniec povolenie
behu skriptu. Okná zmizne a v zozname sa objaví nový spúšťač, ktorý sa
bude spúšťať pri každom otvorení tabuľky a bude volať funkciu
tabulka_otevrena()
.
Teraz si skúste tabuľku znova načítať. Po jej otvorení by sa mala
spustiť funkcie tabulka_otevrena()
a vám by do vášho Gmailu
mala doraziť správa, že ste tabuľku otvorili vy. No, asi to nie je tak
úplne prekvapujúca správa, že?
Zdieľanie tabuľky
Máte ešte ďalšie Gmailový účet, alebo kolegu, kamaráta, ktorý ho má? Môžete mu skúsiť tabuľku nasdílet a nechať ho, aby ju otvoril. Čo presne sa teraz stane?
Spustí sa funkcia tabulka_otevrena()
a hoci tabuľku otvoril
váš kamarát, funkcia sa spustí pod vašim účtom, pretože pre váš účet
bol jej beh povolený. Funkcia prebehne a vám rovnako ako predtým dorazí
e-mail. Trochu prekvapením bude jeho obsah, text e-mailu totiž bude
Tvoju tabuľku práve otvoril a nič ďalšieho, e-mail
človeka, ktorý tabuľku otvoril, sa nedozviete.
Dôvodom je to, že váš kamarát len otvoril tabuľku a neprešiel žiadnou
autorizáciou ako vy pri zakladaní spúšťače. On jednoducho nikde nepovolil,
že skript smie zisťovať jeho e-mailovú adresu a preto riadok skriptu
Session.getActiveUser().getEmail()
vráti prázdny reťazec.
Trochu iná situácia by bola, ak by ste používali firemné verziu Google Suite a váš aj kolegův účet patrili medzi firemné účty, potom by skript kolegův e-mail zistil aj bez jeho autorizácie.
V budúcej lekcii, Google Apps Script - Časové spúšťače , sa budeme venovať časovým spúšťačom.