Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

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ách
  • onEdit() - 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:

Založenie nového spúšťače - Google API

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

Spúšťač je vytvorený - Google API

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.


 

Predchádzajúci článok
Google Apps Script - Prvé spustenie funkcie
Všetky články v sekcii
Google API
Preskočiť článok
(neodporúčame)
Google Apps Script - Časové spúšťače
Článok pre vás napísal Jan Hora
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se poslední 4 roky věnuje programování pro Google Suite.
Aktivity