Návod jak postavit řešení od nuly
Předpoklady: M365 účet s přístupem k SharePoint a Power Automate
Čas: ~4–6 hodin první nastavení
Proč to děláme
Pokud opakovaně posíláš stejné nebo podobné emaily různým lidem s různými parametry, je to ideální kandidát na automatizaci. Místo ručního vyplňování šablon a hledání adres pokaždé znovu – vyplníš jeden formulář a systém se postará o zbytek.
Základní princip: databáze + logika + odesílání.
1. Nejdřív si popište proces
Než začneš cokoliv stavět, odpověz si na tyto otázky:
- Kolik různých emailů posíláš?
- Kdo jsou příjemci – jsou vždy stejní, nebo se mění?
- Co se v emailech mění pokaždé? (datum, jméno, číslo…)
- Odkud má email odcházet? (osobní vs. sdílená schránka)
Díky tomu víš co budeš ukládat do databáze a jak složitá bude logika.
2. Databáze – SharePoint Lists
Celé řešení stojí na třech jednoduchých tabulkách v SharePoint Lists. Fungují jako Excel v cloudu, ale Power Automate s nimi umí přímo pracovat.
Proč tři tabulky?
Každá řeší jinou část problému – oddělujeme kdo (adresáti), co (šablony) a jaké parametry (konkrétní kampaň/případ).
Tabulka 1: Adresáti
Co ukládáme: seznam lidí nebo schránek, kteří dostávají emaily.
Proč: místo abychom adresáty psali pokaždé ručně, máme je jednou uložené. Flow si je samo přečte.
Klíčový sloupec – Role: říká flow, jaký email daná osoba dostane. Pokud víc lidí dostává stejný email, mají stejnou roli.
Klíčový sloupec – JeStaly (Ano/Ne): přepínač. Odškrtneš = flow tuto osobu přeskočí, aniž bys mazal záznam.
Tip: sloupec Role nastav jako typ Volba (Choice) s předdefinovanými hodnotami – zabraňuje překlepům, které by způsobily, že email nedojde.
Tabulka 2: Šablony
Co ukládáme: texty emailů s placeholdery místo konkrétních hodnot.
Proč: text emailu se nemění, mění se jen pár hodnot uvnitř. Šablonu napíšeš jednou a pak ji flow vždy doplní správnými daty.
Jak fungují placeholdery: všude kde se mění hodnota napíšeš {{NazevPromenne}} – bez háčků, bez mezer. Flow tento řetězec najde a nahradí skutečnou hodnotou.
Klíčový sloupec – ProRoli: propojení se sloupcem Role v Adresáti. Říká flow: tento email patří lidem s touto rolí.
Klíčový sloupec – Telo: musí být typ Více řádků textu s RTF (Rich text). Jinak se text usekne na 255 znacích.
⚠️ Gotcha: SharePoint RTF editor ukládá znaky
{a}jako HTML kódy ({a}). Proto flow musí nejdřív tyto kódy dekódovat, než hledá placeholdery. Více v části 4.
Jak vložit HTML formátování: v editoru klikni na Vrátit se ke klasickému prostředí → tam použij formátovací tlačítka nebo vlož přes Ctrl+Shift+V.
Tabulka 3: Formulář / záznamy
Co ukládáme: konkrétní parametry pro každý případ (datum, jméno, číslo, ad hoc emailové adresy…).
Proč: tady kolegyně/uživatel zadává proměnné hodnoty pro daný případ. Každý nový řádek = jedno spuštění flow.
Sloupce: jeden sloupec pro každou proměnnou hodnotu, která se bude dosazovat do šablon. Název sloupce = název placeholderu (bez závorek).
Ad hoc adresáti: pokud se někteří příjemci mění případ od případu (např. kontaktní osoba na konkrétní fakultě), přidej pro ně samostatné sloupce s emailovou adresou.
SharePoint automaticky zobrazí tuto tabulku jako formulář – uživatel klikne + Nová položka a vyplní pole.
3. Flow v Power Automate – základní logika
Flow je automatizovaný recept: „Když nastane X, udělej Y, pak Z.“ Skládá se z bloků – každý blok je jedna akce. Bloky se propojují a předávají si data.
Přejdi na make.powerautomate.com → + Vytvořit → Automatizovaný tok cloudu.
⚠️ Flow vytvoř pod servisním/sdíleným účtem, ne osobním. Pokud uživatel odejde ze společnosti, flow musí dál fungovat.
Krok 1: Trigger (spouštěč)
Trigger je první blok – říká flow kdy se má spustit. Bez triggeru flow nikdy nic neudělá.
Pro testování: vyber Ručně aktivovat tok – spustíš ho kdykoliv tlačítkem v Power Automate. Nemusíš nic vyplňovat do formuláře, jen klikneš a flow běží.
Pro produkci: vyber SharePoint – Při vytvoření položky → vybereš svůj SharePoint web a tabulku s formulářem. Od teď flow hlídá tuto tabulku – přibyde nový řádek → flow se automaticky spustí a všechny hodnoty z toho řádku má k dispozici.
Krok 2: Načtení dat (3× Získat položky)
Flow teď potřebuje přečíst data ze všech tří tabulek. Přidej tři akce SharePoint – Získat položky za sebou – po jedné pro každou tabulku.
Šablony:
- Načti všechny šablony emailů
- Top Count nastav na 20 (nebo víc než máš šablon) – výchozí limit je 100, ale je dobré ho vždy nastavit explicitně
Adresáti:
- Načti jen aktivní záznamy – do pole Filtrovat dotaz napiš
JeStaly eq 1 - Top Count nastav na 500
- Filtr funguje jako WHERE v SQL – vrátí jen řádky kde JeStaly = 1 (= Ano)
Formulář:
- Načti jen poslední záznam – Top Count = 1
- Do pole Seřadit podle napiš
Created desc– tím dostaneš nejnovější záznam první - Výsledkem je jeden konkrétní případ s parametry (datum, jméno, adresy…)
Každá akce Získat položky vrátí pole (array) záznamů. Výsledek se jmenuje
value– na to se budeme odkazovat v dalších krocích.
Krok 3: Proměnné pro email
Před tím než začneme procházet šablony, musíme si připravit dvě proměnné – budeme do nich ukládat sestavený text emailu.
Přidej dvě akce Inicializovat proměnnou:
- Název:
EmailPredmet, Typ: Řetězec, Hodnota: prázdná - Název:
EmailTelo, Typ: Řetězec, Hodnota: prázdná
Co je proměnná: dočasné úložiště pro hodnotu. Funguje jako pojmenovaná krabička – dáš do ní hodnotu a pak ji kdekoli v flow použiješ přes její název.
⚠️ Inicializovat proměnnou NESMÍ být uvnitř cyklu – Power Automate to neumožňuje a flow selže. Proměnné inicializuj vždy před cyklem.
4. Cyklus přes šablony a dosazení hodnot
Krok 4: Cyklus (Použít na všechny)
Přidej akci Použít na všechny – do vstupního pole vyber value z akce Získat položky (Šablony).
Co cyklus dělá: projde každou šablonu jednu po druhé a pro každou provede všechny akce uvnitř. Máš 7 šablon → cyklus proběhne 7×, pokaždé s jinou šablonou jako „aktuální položkou“.
Aktuální šablonu v cyklu čteš přes items('Použít_na_všechny')?['NazevSloupce'].
Krok 5: Sestavení textu emailu (Nastavit proměnnou + replace)
Uvnitř cyklu přidej dvě akce Nastavit proměnnou – pro EmailPredmet a EmailTelo. Do pole Hodnota klikni na záložku fx (Výraz) a vlož replace() výraz.
Co replace() dělá: prohledá text a nahradí všechny výskyty hledaného řetězce novým řetězcem. Takto funguje:
replace(zdrojovy_text, co_hledat, čím_nahradit)
Příklad – nahradí {{Jmeno}} skutečným jménem:
replace(
items('Použít_na_všechny')?['Telo'],
'{{Jmeno}}',
'Jana Nováková'
)
Protože máš víc placeholderů, vnořuješ replace() do sebe – výstup jednoho je vstupem dalšího:
replace(replace(
items('Použít_na_všechny')?['Telo'],
'{{Jmeno}}', first(body('Formulár')?['value'])?['Jmeno']),
'{{Datum}}', first(body('Formulár')?['value'])?['Datum'])
first(body('NazevAkce')?['value']) vezme první (a jediný) záznam z výsledku Získat položky – Formulář.
Proč coalesce(): pokud je pole v formuláři prázdné, Power Automate vrátí null. replace() s null selže s chybou. coalesce() ošetří null – pokud je hodnota null, použije náhradní text:
coalesce(first(body('Formulár')?['value'])?['Jmeno'], 'nespecifikováno')
Proč dekódování HTML entit na začátku: SharePoint RTF editor ukládá { jako { a } jako }. replace() hledá {{Jmeno}} ale v textu najde {{Jmeno}} – neshoda, placeholder se nenahradí. Proto první tři replace() tyto kódy převedou zpátky na normální znaky:
replace(replace(replace(
items('Použít_na_všechny')?['Telo'],
'{', '{'),
'}', '}'),
':', ':'),
... <- teprve tady přijdou replace() pro placeholdery
5. Směrování – kdo dostane jaký email
Krok 6: Přepínač (Switch)
Uvnitř cyklu, hned za Nastavit proměnnou, přidej akci Přepínač. Do pole Na vlož výraz, který přečte hodnotu ProRoli aktuální šablony.
Co Přepínač dělá: podívá se na jednu hodnotu a podle ní vybere jednu z předem definovaných cest (Case větví). Funguje jako křižovatka – každá šablona má svoji ProRoli a flow podle ní zvolí správnou cestu k odeslání.
Každá Case větev obsahuje:
- podmínku Rovná se – hodnotu ProRoli (např.
vedeni) - akce pro odeslání emailu správným adresátům
Výchozí větev (Default): záchytná síť pro případ neznámé role. Nech ji prázdnou nebo přidej notifikaci o chybě.
Krok 7a: Fixní adresáti (Case s cyklem)
Pokud adresáti pro danou roli jsou vždy stejní (máš je uložené v tabulce Adresáti), uvnitř Case větve:
- Získat položky (tabulka Adresáti) s filtrem
Role eq 'nazev_role'→ vrátí všechny lidi s touto rolí. Přejmenuj akci (tři tečky → Přejmenovat) aby bylo jasné co dělá. - Použít na všechny (vnořený cyklus) – vstup:
valuez předchozí akce → projde každého adresáta - Odeslat e-mail uvnitř vnořeného cyklu – Komu:
item()?['Email'](email aktuálního adresáta v cyklu)
Proč vnořený cyklus: lidí se stejnou rolí může být víc (např. vedení má 3 členy). Cyklus zajistí, že každý dostane email zvlášť.
Krok 7b: Proměnliví adresáti (Case bez cyklu)
Pokud se adresát mění případ od případu a uživatel ho zadává do formuláře, uvnitř Case větve přidej přímo Odeslat e-mail bez cyklu:
- Komu:
first(body('NazevAkceFormulare')?['value'])?['EmailObjednatele']
Je to jeden konkrétní email přečtený přímo z formuláře – žádný cyklus nepotřebuješ.
6. Odeslání emailu
Vždy používej akci Office 365 Outlook – Odeslat e-mail ze sdílené poštovní schránky (V2).
⚠️ Neplést s „Odeslat e-mail (V2)“ – ta posílá z osobního účtu. Musí být verze ze sdílené schránky.
Pole:
- Původní adresa poštovní schránky: adresa sdílené schránky (pro testování použij vlastní)
- Komu: email adresáta (z cyklu nebo z formuláře)
- Předmět: proměnná EmailPredmet
- Text: proměnná EmailTelo
7. Testování
- V tabulce Adresáti nastav dočasně jako email u každé role svůj testovací email – ať nepošleš testovací maily skutečným lidem
- Do tabulky Formulář přidej testovací záznam s fiktivními daty
- Spusť flow ručně → Testovat → Ručně → Spustit tok
- Zkontroluj historii: Power Automate → Moje toky → detail → Historie spuštění – zelená = OK, červená = klikni pro detail chyby
- Ověř v emailu: placeholdery nahrazeny, formátování správné, email přišel ze správné schránky
8. Časté chyby
| Problém | Příčina | Řešení |
|---|---|---|
| Placeholder se nenahradí | SharePoint RTF kóduje { jako { | Přidat dekódovací replace() na začátek výrazu |
| Chyba „cannot be nested in foreach“ | Inicializovat proměnnou je uvnitř cyklu | Přesunout ven z cyklu, uvnitř použít Nastavit proměnnou |
| Chyba „third parameter is Null“ | Pole v formuláři je prázdné | Obalit hodnotu do coalesce(hodnota,'nespecifikováno') |
| Flow vrací jen 100 záznamů | Výchozí limit je 100 | Nastavit Top Count na 500 nebo více |
| Interní název sloupce neodpovídá | SharePoint přejmenovává sloupce interně | Zkontrolovat v dynamickém obsahu |
| Flow přestalo fungovat po odchodu kolegy | Flow patřilo osobnímu účtu | Vždy vytvářet pod servisním/sdíleným účtem |

