Sdílet prostřednictvím


Proměnné

Poznámka:

Microsoft Power Fx je nový název jazyka vzorců pro aplikace plátna. Práce na těchto článcích stále probíhá, jak extrahujeme jazyk z aplikací plátna, integrujeme jej s ostatními produkty Microsoft Power Platform a zpřístupňujeme jako open source. Začněte v části Přehled jazyka Microsoft Power Fx obsahující úvod do jazyka.

Pokud jste používali jiný programovací nástroj, jako např. Visual Basic nebo JavaScript, možná se ptáte: Kde jsou proměnné? Microsoft Power Fx je trochu jiný a vyžaduje jiný přístup. Místo využití proměnné si při psaní vzorce položte otázku: Co bych udělal(a) v tabulce?

V jiných nástrojích jste asi explicitně provedli výpočet a výsledek uložili do proměnné. Power Fx i Excel ovšem automaticky přepočítávají vzorce, když dojde ke změně vstupních dat, takže obvykle není nutné vytvářet a aktualizovat proměnné. Pokud si tento postup co nejvíce osvojíte, můžete svoji aplikaci snadněji vytvářet a udržovat a vyznat se v ní.

V některých případech budete muset použít proměnné v aplikaci Power Fx, která oproti Excelu má navíc vzorce chování. Tyto vzorce se spustí, když například uživatel klikne nebo klepne na tlačítko. V rámci vzorce chování je často užitečné nastavit proměnnou, která se použije v jiných vzorcích.

Obecně se proměnným vyhýbejte. Ale v některých případech může požadované výsledky přinést jenom proměnná. Proměnné jsou implicitně vytvářeny a psány, když se objevují ve funkcích, které nastavují jejich hodnoty.

Převod Excelu do Power Fx

Aplikace Excel

Pojďme si zopakovat, jak funguje Excel. Buňka může obsahovat hodnotu, jako je číslo nebo řetězec, nebo vzorec, který je založený na hodnotách jiných buněk. Poté, co uživatel zadá do buňky jinou hodnotu, Excel automaticky přepočítá všechny vzorce, které jsou závislé na nové hodnotě. Nemusíte nic programovat, aby to takto fungovalo.

V následujícím příkladu je buňka A3 nastavená na vzorec A1+A2. Pokud se A1 nebo A2 změní, A3 se automaticky přepočítá, aby změnu odrážela. Toto chování nevyžaduje žádné kódování mimo samotný vzorec.

Animace přepočítání součtu dvou čísel v aplikaci Excel.

Excel nemá proměnné. Hodnota buňky, která obsahuje vzorec, se mění podle údajů zadaných ve vzorci, ale neexistuje žádný způsob, jak si výsledek vzorce pamatovat a uložit ho v buňce nebo někde jinde. Pokud změníte hodnotu buňky, může se změnit celá tabulka a všechny dříve vypočtené hodnoty budou ztraceny. Uživatel Excelu můžete kopírovat a vkládat buňky, to je ale ruční práce uživatele, která není se vzorci možná.

Power Fx

Logika, kterou vytvoříte v Power Fx, se chová velmi podobně jako Excel. Místo aktualizování buněk můžete kamkoliv na obrazovce přidat ovládací prvky a pojmenovat je pro použití ve vzorcích.

Například v Power Apps můžete replikovat chování Excelu v aplikaci tak, že přidáte ovládací prvek Popisek s názvem Label1 a dva ovládací prvky Textové zadání s názvem TextInput1 a TextInput2. Pokud pak nastavíte vlastnost Text prvku Label1 na TextInput1.Text + TextInput2.Text, bude vždy automaticky ukazovat součet čísel v TextInput1 a TextInput2.

Výpočet součtu dvou čísel v Power Fx.

Všimněte si, že ovládací prvek Label1 je vybraný a zobrazuje svůj vzorec Text v řádku vzorců v horní části obrazovky. Najdeme tam vzorec TextInput1.Text + TextInput2.Text. Ten vytvoří závislost mezi těmito ovládacími prvky, stejně jako se vytvářejí závislosti mezi buňkami v excelovém sešitu. Změňme hodnotu TextInput1:

Animace výpočtu součtu dvou čísel v Power Fx.

Vzorec pro Label1 se automaticky přepočítá a zobrazuje novou hodnotu.

Vzorce v Power Fx slouží k určení nejen primární hodnoty ovládacího prvku, ale také vlastností, například formátování. V následujícím příkladu vzorec pro vlastnost Color popisku automaticky zobrazí záporné hodnoty červeně. Funkce If by měla být povědomá z Excelu:

If( Value(Label1.Text) < 0, Color.Red, Color.Black )

Animace podmíněného formátování.

Můžete použít vzorce pro nejrůznější scénáře:

  • Pomocí GPS z vašeho zařízení může ovládací prvek mapy zobrazovat vaši aktuální polohu s využitím vzorce, který používá Location.Latitude a Location.Longitude. Když se budete pohybovat, mapa bude vaši polohu automaticky sledovat.
  • Jiní uživatelé můžou aktualizovat zdroje dat. Například jiní členové týmu by mohli aktualizovat položky v seznamu SharePoint. Když aktualizujete zdroj dat, všechny závislé vzorce se automaticky přepočítají, aby odrážely aktualizovaná data. Když budeme v příkladu pokračovat, mohli byste nastavit vlastnost Items galerie na vzorec Filter( SharePointList), který automaticky zobrazí nově vyfiltrovanou sadu záznamů.

Plnění

Použití vzorců k sestavování aplikací má mnoho výhod:

  • Pokud znáte Excel, znáte Power Fx. Model a jazyk vzorce jsou stejné.
  • Pokud jste používali jiné programovací nástroje, představte si, kolik kódu by bylo zapotřebí k provedení těchto příkladů. V jazyce Visual Basic byste museli napsat obslužnou rutinu události pro událost změny u každého ovládacího prvku zadávání textu. Kód k provedení výpočtu v každém z nich je redundantní a mohl by se rozsynchronizovat nebo byste museli napsat společný podprogram. V Power Fx k dosažení toho všeho stačil jeden jednořádkový vzorec.
  • Pokud chcete pochopit, odkud pochází text prvku Label1, víte přesně, kde hledat: vzorec ve vlastnosti Text. Neexistuje jiný způsob, jak ovlivnit text tohoto ovládacího prvku. V tradičním programovacím nástroji by každá obslužná rutina události nebo podprogram mohl změnit hodnotu popisku z kteréhokoliv místa v programu. Proto může být obtížné sledovat, kdy a kde se proměnná změnila.
  • Když uživatel změní posuvník a potom si to rozmyslí, může posuvník změnit zpět na původní hodnotu. A je to, jako by se nikdy nic nezměnilo: Aplikace zobrazuje stejné hodnoty ovládacího prvku jako předtím. Experimentování a dotaz „Co když“ nepřináší žádné následky, stejně jako v Excelu.

Obecně platí, že pokud můžete dosáhnout účinku pomocí vzorce, bude lepší vzorec. Nechte modul vzorců v Power Fx pracovat za vás.

Jak poznat, kdy použít proměnné

Změňme náš jednoduchý sčítač tak, aby fungoval jako starý sčítací stroj s mezisoučtem. Pokud vyberete tlačítko Přidat, přičtete číslo k mezisoučtu. Pokud vyberete tlačítko Vymazat, mezisoučet se vynuluje.

Zobrazit Popis
Aplikace s ovládacím prvkem pro zadávání textu, popiskem a dvěma tlačítky. Po spuštění aplikace je běžný součet 0.

Červený bod představuje prst uživatele v poli pro zadávání textu, kam uživatel zadá 77.
Ovládací prvek pro zadávání textu obsahuje 77 a je stisknuto tlačítko Přidat. Uživatel vybere tlačítko Přidat.
Součet je 77 a je připočteno dalších 77. Hodnota 77 je připočtena k průběžnému součtu.

Uživatel znovu vybere tlačítko Přidat.
Celkově je 154, než bude vymazána. 77 je opět připočtena k průběžnému součtu, což vede k 154.

Uživatel vybere tlačítko Vymazat.
Celková částka je vymazána. Celkový součet se resetuje na 0.

Náš sčítací stroj používá něco, co v Excelu neexistuje: tlačítko. V této aplikaci nemůžete k výpočtu mezisoučtu použít jenom vzorce, protože jeho hodnota závisí na řadě akcí, které uživatel provede. Místo toho se musí mezisoučet zaznamenat a aktualizovat ručně. Většina programovacích nástrojů ukládá tyto informace do proměnné.

Někdy budete proměnnou pro svoji aplikaci potřebovat, aby se chovala požadovaným způsobem. Ale tento přístup má určitá úskalí:

  • Musíte ručně aktualizovat mezisoučet. Automatické přepočítání to za vás neudělá.
  • Mezisoučet už nejde vypočítat na základě hodnot jiných ovládacích prvků. Závisí na tom, kolikrát uživatel vybral tlačítko Přidat a jaká hodnota byla pokaždé v ovládacím prvku zadávání textu. Zadal uživatel 77 a vybral dvakrát Přidat nebo zadal 24 a 130 pro každé sčítané číslo? Když je součet 154, rozdíl nepoznáte.
  • Změny v součtu můžou pocházet z různých cest. V tomto příkladu může součet aktualizovat tlačítko Přidat i Vymazat. Pokud se aplikace nechová očekávaným způsobem, které tlačítko je příčinou problému?

Použití globální proměnné

Abychom vytvořili náš sčítač, vyžadujeme, aby byl mezisoučet v proměnné. Nejjednodušší proměnné pro práci v Power Fx jsou globální proměnné.

Jak globální proměnné fungují:

  • Hodnotu globální proměnné nastavíte funkcí Set. Set( MyVar; 1 ) nastaví globální proměnnou MyVar na hodnotu 1.
  • Globální proměnnou použijete tak, že budete odkazovat na název použitý s funkcí Set. V takovém případě MyVar vrátí 1.
  • Globální proměnné můžou obsahovat libovolnou hodnotu, včetně řetězců, čísel, záznamů a tabulek.

Pojďme přebudovat náš sčítač pomocí globální proměnné:

  1. Přidejte ovládací prvek zadávání textu s názvem TextInput1 a dvě tlačítka pojmenovaná Button1 a Button2.

  2. Nastavte vlastnost Text prvku Button1 na "Add" a nastavte vlastnost Text prvku Button2 na "Clear".

  3. Pokud chcete aktualizovat mezisoučet pokaždé, když uživatel vybere tlačítko Přidat, nastavte jeho vlastnost OnSelect na tento vzorec:

    Set( RunningTotal, RunningTotal + TextInput1.Text )

    Pouhá existence tohoto vzorce zavede RunningTotal jako globální proměnnou, která nese číslo kvůli operátoru +. Můžete odkazovat na RunningTotal kdekoli v aplikaci. Kdykoli uživatel otevře tuto aplikaci, RunningTotal má počáteční hodnotu prázdný.

    Když uživatel poprvé vybere tlačítko Přidat a funkce Set se spustí, RunningTotal se nastaví na hodnotu RunningTotal + TextInput1.

    Vlastnost OnSelect tlačítka Přidat je nastavena na funkci Nastavit.

  4. Pokud chcete nastavit mezisoučet na 0 vždy, když uživatel vybere tlačítko Vymazat, nastavte jeho vlastnost OnSelect na tento vzorec:

    Set( RunningTotal; 0 )

    Vlastnost OnSelect tlačítka Vymazat je nastavena na funkci Nastavit.

  5. Přidejte ovládací prvek Popisek a nastavte jeho vlastnost Text na RunningTotal.

    Tento vzorec se automaticky přepočítá a uživateli se zobrazí hodnota RunningTotal, jak se bude měnit podle tlačítek, která uživatel vybere.

    Vlastnost popisku je nastavena na název proměnné.

  6. Zobrazte si náhled aplikace a máme tu náš sčítač, jak je popsáno výše. Zadejte do textového pole číslo a stiskněte několikrát tlačítko Přidat. Až bude připravení, vraťte se pomocí klávesy Esc zpátky do prostředí pro vytváření.

    Ovládací prvek pro zadávání textu obsahuje hodnotu a popisek obsahuje průběžný součet.

  7. Pokud chcete zobrazit hodnotu naší globální proměnné, vyberte nabídku Soubor a v levém podokně vyberte Proměnné.

    Možnost Proměnné v nabídce Soubor.

  8. Pokud chcete zobrazit všechna místa, kde je naše proměnná definovaná a použitá, vyberte ji.

    Seznam umístění, kde se proměnná používá.

Typy proměnných

Power Fx má dva typy proměnných:

Typ proměnné Obor Description Funkce, které zavádějí
Globální proměnné Aplikace Nejjednodušší na používání. Obsahuje číslo, textový řetězec, logickou hodnotu, záznam, tabulku atd., na které můžete odkazovat z libovolného místa v aplikaci. Set
Kolekce Aplikace Obsahuje tabulku, na kterou se dá odkazovat z libovolného místa v aplikaci. Umožňuje měnit obsah tabulky místo nastavování jako celku. Dá se uložit na místní zařízení pro pozdější použití. Collect
ClearCollect

Při použití v Power Apps existuje třetí typ proměnné:

Typ proměnné Scope Popis Funkce, které zavádějí
Kontextové proměnné Obrazovka Je velmi vhodná k předávání hodnot na obrazovku, podobně jako parametry do procedury v jiných jazycích. Dá se na ni odkazovat jenom z obrazovky. UpdateContext
Navigate

Vytvářejte a odstraňte proměnné

Všechny proměnné se vytvoří implicitně, když se objeví ve funkci Set, UpdateContext, Navigate, Collect nebo ClearCollect. Chcete-li deklarovat proměnnou a její typ, stačí ji zahrnout do kterékoli z těchto funkcí kdekoli v aplikaci. Žádná z těchto funkcí nevytváří proměnné; pouze vyplňují proměnné hodnotami. Proměnné nikdy nedeklarujete explicitně jako v jiném programovacím nástroji a veškeré psaní je implicitní z použití.

Můžete mít například ovládací prvek tlačítko se vzorcem OnSelect, který se rovná Set( X, 1 ). Tento vzorec stanoví X jako proměnnou s typem čísla. X můžete použít ve vzorcích jako číslo a tato proměnná má hodnotu prázdný po otevření aplikace, ale před výběrem tlačítka. Když vyberete tlačítko, dáte X hodnotu 1.

Pokud jste přidali další tlačítko a nastavili jeho vlastnost OnSelect na Set( X, "Hello" ),došlo by k chybě, protože typ (textový řetězec) neodpovídá předchozí hodnotě Set (číslo). Všechny implicitní definice proměnné se musí shodovat v typu. Opět se to všechno stalo, protože jste se zmínili X ve vzorcích, ne proto, že by některá z těchto vzorců skutečně fungovala.

Proměnnou odeberete odebráním všech funkcí Set, UpdateContext, Navigate, Collect nebo ClearCollect, které ji implicitně zavádějí. Bez těchto funkcí proměnná neexistuje. Musíte také odebrat všechny odkazy na proměnnou, protože způsobí chybu.

Životnost a počáteční hodnota proměnné

Všechny proměnné jsou uložené v paměti, když aplikace běží. Po ukončení aplikace dojde ke ztrátě hodnot uchovaných v proměnných.

Obsah proměnné můžete uložit do zdroje dat pomocí funkcí Patch nebo Collect. Hodnoty můžete také uložit do kolekcí na místním zařízení pomocí funkce Uložit data.

Když uživatel otevře aplikaci, všechny proměnné mají počáteční hodnotu prázdný.

Čtení proměnných

K přečtení hodnoty proměnné slouží její název. Proměnnou můžete definovat například pomocí tohoto vzorce:

Set( Radius, 12 )

Potom můžete jednoduše použít Radius všude, kde se dá použít číslo, a bude nahrazen hodnotou 12:

Pi() * Power( Radius, 2 )

Pokud dáte kontextové proměnné stejný název jako globální proměnná nebo kolekci, bude mít přednost kontextová proměnná. Na globální proměnnou nebo kolekci však můžete stále odkazovat, pokud použijete operátor mnohoznačnosti[@Radius].

Použití kontextové proměnné (pouze Power Apps)

Podívejme se, jak by se náš sčítací stroj vytvořil pomocí kontextové proměnné místo globální proměnné.

Jak fungují kontextové proměnné:

  • Kontextové proměnné se implicitně zavádějí a nastavují pomocí funkce UpdateContext nebo Navigate. Když se aplikace spustí, všechny kontextové proměnné mají počáteční hodnotu prázdný.
  • Kontextové proměnné se aktualizují se záznamy. V jiných programovacích nástrojích se běžně používá "=" pro přiřazení, jako v "x = 1". U kontextových proměnných se místo toho použije { x: 1 }. Při použití kontextové proměnné použijte její název přímo bez syntaxe záznamu.
  • Kontextovou proměnnou můžete také nastavit, když zobrazujete obrazovku pomocí funkce Navigate. Pokud si představíte obrazovku jako druh procedury nebo dílčí rutiny, podobá se tento přístup předání parametru v jiných programovacích nástrojích.
  • S výjimkou funkce Navigate jsou kontextové proměnné omezené na kontext jedné obrazovky, což je místo, kde získají svůj název. Mimo tento kontext nejdou použít nebo nastavit.
  • Kontextové proměnné můžou obsahovat libovolnou hodnotu, včetně řetězců, čísel, záznamů a tabulek.

Pojďme přebudovat náš sčítač pomocí kontextové proměnné:

  1. Přidejte ovládací prvek zadávání textu s názvem TextInput1 a dvě tlačítka pojmenovaná Button1 a Button2.

  2. Nastavte vlastnost Text prvku Button1 na "Add" a nastavte vlastnost Text prvku Button2 na "Clear".

  3. Pokud chcete aktualizovat mezisoučet pokaždé, když uživatel vybere tlačítko Přidat, nastavte jeho vlastnost OnSelect na tento vzorec:

    UpdateContext( { RunningTotal: RunningTotal + TextInput1.Text } )

    Pouhá existence tohoto vzorce zavede RunningTotal jako kontextovou proměnnou, která nese číslo kvůli operátoru +. Na RunningTotal můžete odkazovat kdekoli na této obrazovce. Kdykoli uživatel otevře tuto aplikaci, RunningTotal má počáteční hodnotu prázdný.

    Když uživatel poprvé vybere tlačítko Přidat a funkce UpdateContext se spustí, RunningTotal se nastaví na hodnotu RunningTotal + TextInput1.

    Vlastnost OnSelect tlačítka Přidat.

  4. Pokud chcete nastavit mezisoučet na 0 vždy, když uživatel vybere tlačítko Vymazat, nastavte jeho vlastnost OnSelect na tento vzorec:

    UpdateContext( { RunningTotal: 0 } )

    Ještě jednou, UpdateContext se používá se vzorcem UpdateContext( { RunningTotal: 0 } ).

    Vlastnost OnSelect tlačítka Vymazat.

  5. Přidejte ovládací prvek Popisek a nastavte jeho vlastnost Text na RunningTotal.

    Tento vzorec se automaticky přepočítá a uživateli se zobrazí hodnota RunningTotal, jak se bude měnit podle tlačítek, která uživatel vybere.

    Textová vlastnost popisku.

  6. Zobrazte si náhled aplikace a máme tu náš sčítač, jak je popsáno výše. Zadejte do textového pole číslo a stiskněte několikrát tlačítko Přidat. Až bude připravení, vraťte se pomocí klávesy Esc zpátky do prostředí pro vytváření.

    Ovládací prvek Text input zobrazuje hodnotu a popisek zobrazuje průběžný součet.

  7. Hodnotu kontextové proměnné můžete nastavit při přechodu na obrazovku. To je užitečné pro předávání „kontextu“, neboli „parametrů“, z jedné obrazovky na druhou. Tuto techniku demonstrujte tak, že vložíte obrazovku, vložíte tlačítko a nastavíte vlastnost OnSelect na tento vzorec:

    Navigate( Screen1, None, { RunningTotal: -1000 } )

    Vlastnost OnSelect tlačítka.

    Podržte stisknutou klávesu Alt při výběru tohoto tlačítka k zobrazení Screen1 i nastavení kontextové proměnné RunningTotal na -1000.

    Obrazovka 1 je otevřená.

  8. Pokud chcete zobrazit hodnotu kontextové proměnné, vyberte nabídku Soubor a v levém podokně vyberte Proměnné.

    Možnost Proměnné v nabídce Soubor.

  9. Pokud chcete zobrazit místa, kde se vaše kontextová proměnná definuje a používá, vyberte ji.

    Seznam umístění, kde se proměnná používá.

Použití kolekce

Nakonec se podíváme se na vytvoření našeho sčítacího stroje pomocí kolekce. Vzhledem k tomu, že kolekce obsahuje tabulku, která jde snadno upravit, uděláme to tak, aby sčítací stroj uchoval každou zadanou hodnotu na „papírové pásce“.

Jak fungují kolekce:

  • Kolekce se vytvářejí a nastavují pomocí funkce ClearCollect. Můžete místo ní použít funkci Collect, bude ale vyžadovat další proměnnou místo nahrazení té staré.
  • Kolekce je druh zdroje dat – tedy tabulka. Jestliže chcete pracovat s jednou hodnotou v kolekci, použijte funkci First a extrahujte jedno pole z výsledného záznamu. Pokud jste použili jednu hodnotu s funkcí ClearCollect, bude to pole Value jako v tomto příkladu:
    First(VariableName).Value

Vytvořme si náš sčítací stroj pomocí kolekce:

  1. Přidejte ovládací prvek Text input nazvaný TextInput1 a dvě tlačítka s názvem Button1 a Button2.

  2. Nastavte vlastnost Text prvku Button1 na "Add" a nastavte vlastnost Text prvku Button2 na "Clear".

  3. Pokud chcete aktualizovat mezisoučet pokaždé, když uživatel vybere tlačítko Přidat, nastavte jeho vlastnost OnSelect na tento vzorec:

    Collect( PaperTape; TextInput1.Text )

    Pouhá existence tohoto vzorce zavádá PaperTape jako kolekci obsahující tabulku textových řetězců s jedním sloupcem. Můžete odkazovat na PaperTape kdekoli v aplikaci. Kdykoli uživatel otevře tuto aplikaci, PaperTape je prázdná tabulka.

    Když se tento vzorec spustí, přidá novou hodnotu na konec kolekce. Vzhledem k tomu, že přidáváme jednu hodnotu, funkce Collect ji automaticky umístí do jednosloupcové tabulky s názvem sloupce Value, který použijeme později.

    Tlačítko Přidat vlastnosti OnSelect.

  4. Pokud chcete vymazat naši papírovou pásku, když uživatel vybere tlačítko Vymazat, nastavte jeho vlastnost OnSelect na tento vzorec:

    Clear( PaperTape )

    Tlačítko Vymazat vlastnosti OnSelect.

  5. Jestli chcete zobrazit mezisoučet, přidejte popisek a do jeho vlastnosti Text nastavte tento vzorec:

    Sum( PaperTape; Value )

    Popisek vlastnosti Text.

  6. Pokud chcete spustit sčítací stroj, stiskněte klávesu F5, která otevře Náhled, do ovládacího prvku zadání textu zadejte čísla a vyberte tlačítka.

    Ovládací prvek Text input obsahuje hodnotu a popisek obsahuje průběžný součet.

  7. Stisknutím klávesy Esc se vraťte do výchozího pracovního prostoru.

  8. Pokud chcete zobrazit papírovou pásku, vložte ovládací prvek Data table a nastavte jeho vlastnost Items na tento vzorec:

    PaperTape

    V pravém podokně vyberte Upravit pole a pak vyberte Přidat pole, vyberte sloupec Hodnota a pak vyberte Přidat k jeho zobrazení.

    Tabulka dat, která ukazuje hodnoty přidané do kolekce.

  9. Pokud chcete zobrazit hodnoty v kolekci, vyberte v nabídce Soubor možnost Kolekce.

    Náhled kolekce PaperTape.

  10. K ukládání a načítání kolekce přidejte další dva ovládací prvky tlačítka a nastavte jejich vlastnosti Text na Načíst a Uložit. Vlastnost OnSelect tlačítka Načíst nastavte na tento vzorec:

    Clear( PaperTape ); LoadData( PaperTape, "StoredPaperTape", true )

    Nejprve potřebujeme kolekci vymazat, protože funkce LoadData přidá uložené hodnoty na konec kolekce.

    Tlačítko Načíst vlastnosti OnSelect.

  11. Vlastnost OnSelect tlačítka Save nastavte na tento vzorec:

    SaveData( PaperTape; "StoredPaperTape" )

    Tlačítko Uložit vlastnosti OnSelect.

  12. Zobrazte opět náhled stisknutím klávesy F5, zadejte čísla do ovládacího prvku zadání textu a vyberte tlačítka. Vyberte tlačítko Uložit. Zavřete a znovu otevřete aplikaci a vyberte tlačítko Načíst, které znovu načte vaši kolekci.