Operátory a identifikátory
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.
Operátory v Microsoft Power Fx jsou popsány níže. Některé z těchto operátorů jsou závislé na jazyce autora. Další informace najdete v tématu Globální aplikace.
Symbol | Typ | Syntaxe | Popis |
---|---|---|---|
. | Výběr vlastnosti | Posuvník1.Hodnota Color.Red |
Extrahuje vlastnost z tabulky, ovládacího prvku nebo výčtu. Pro zpětnou kompatibilitu lze použít také !. |
. jazykově závislý |
Oddělovač desetinných míst | 1.23 | Oddělovač mezi celou a zlomkovou částí čísla. Znak závisí na jazyku. |
( ) | Závorky | Filtr(T, A < 10) (1 + 2) * 3 |
Vynucuje přednosti a seskupuje dílčí výrazy do větších výrazů. |
+ | Aritmetické operátory | 1 + 2 | Součet |
- | 2:1 | Odčítání a znaménko | |
* | 2 * 3 | Násobení | |
/ | 2/3 | Dělení (viz také funkce Mod) | |
^ | 2 ^ 3 | Umocnění, odpovídá funkci Power | |
% | 20 % | Procento (odpovídá "* 1/100") | |
= | Operátory porovnání | Cena = 100 | Rovno |
> | Cena > 100 | Je větší než | |
>= | Cena >= 100 | Větší než nebo rovno | |
< | Cena < 100 | Je menší než | |
<= | Cena <= 100 | Menší než nebo rovno | |
<> | Cena <> 100 | Nikoli rovno | |
& | Operátor spojení řetězců | "ahoj" & " " & "svět" | Zobrazí více řetězců tak, aby vypadaly souvisle. |
&& nebo A | Logické operátory | Cena < 100 && Posuvník 1. Hodnota = 20 nebo Cena < 100 And Slider1.Value = 20 |
Logická konjunkce, odpovídá funkci And |
|| nebo Nebo | Cena < 100 || Posuvník1.Hodnota = 20 nebo Cena < 100 Nebo Posuvník1.Hodnota = 20 | Logická disjunkce, odpovídá funkci Or | |
. nebo Not | !(Cena < 100) nebo Ne (Cena < 100) | Logická negace, odpovídá funkci Not | |
exaktní | Provozovatelé členství | Galerie 1. Vybráno přesně v SavedItems | Patřící do kolekce nebo tabulky |
exaktní | "Windows" přesně v "Zobrazení oken v operačním systému Windows..." | Test podřetězců (rozlišování velkých a malých písmen) | |
v | Galerie 1. Vybráno v SavedItems | Patřící do kolekce nebo tabulky | |
v | "The" v "Klávesnici a monitor..." | Test podřetězců (rozlišování velkých a malých písmen) | |
@ | Disambiguační operátor | MyTable[@fieldname] | Mnohoznačnost polí |
@ | [@Moje proměnná] | Globální mnohoznačnost | |
, [zavislý na jazyku] |
Oddělovač seznamu | If(X < 10, "Nízký", "Dobrý") { X: 12, Y: 32 } [1, 2, 3] |
Odděluje: Tento znak závisí na jazyku. |
; [zavislý na jazyku] |
Řetězení vzorců | Collect(T, A); Navigovat (S1, "") | Volání funkcí můžete oddělit ve vlastnostech chování. Operátor řetězení závisí na jazyku. |
Jak | Jako operátor | AllCustomers jako zákazník | Přepíše ThisItem a ThisRecord v galeriích a zaznamená funkce rozsahu. Jak je užitečný pro poskytnutí lepšího, konkrétního názvu a je zvláště důležitý ve vnořených scénářích. |
Já | Vlastní provozovatel | Self.Fill | Poskytuje přístup k vlastnostem aktuálního ovládacího prvku |
nadřazený | nadřazený operátor | Parent.Fill | Přístup k vlastnostem kontejneru ovládacího prvku |
TatoPoložka | Operátor ThisItem | ThisItem.FirstName | Přístup k polím ovládacího prvku Galerie nebo Formulář |
Tento záznam | Operátor ThisItem | ThisRecord.FirstName | Přístup k úplnému záznamu a jednotlivým polím záznamu uvnitř funkce ForAll, Sum, With a dalších funkcí rozsahu záznamu. Lze přepsat pomocí operátoru As. |
operátory in a exactin
Operátory in a exactin použijte k vyhledání řetězce ve zdroji dat, jako je například kolekce nebo importovaná tabulka. Operátor in identifikuje shody bez ohledu na malá a velká písmena a operátor exactin identifikuje pouze takové shody, které mají stejná velká a malá písmena. Tady je příklad:
Naimportujte nebo vytvořte kolekci s názvem Inventory a zobrazte ji v galerii podle popisu v prvním postupu v článku o zobrazení obrázků a textů v galerii.
Nastavte vlastnost Items galerie na tento vzorec:
Filtr (Inventář, "E" v ProductName)Galerie zobrazí všechny produkty, kromě produktu Callisto, protože název tohoto produktu jako jediný neobsahuje vámi zadané písmeno.
Změňte vlastnost Items galerie na tento vzorec:
Filtr (inventář, "E" přesně v názvu produktu)Galerie zobrazí pouze produkt Europa, protože jako jediný obsahuje vámi zadané písmeno velké E.
Operátory ThisItem, ThisRecord a As
Několik ovládacích prvků a funkcí aplikuje vzorce na jednotlivé záznamy tabulky. Chcete-li odkazovat na jednotlivý záznam ve vzorci, použijte jednu z následujících možností:
Operátor | Platí pro | Popis |
---|---|---|
TatoPoložka | Galerie řízení Upravit formulář řízení Zobrazit formulář řízení |
Výchozí název aktuálního záznamu v ovládacím prvku Gallery nebo formulář. |
Tento Záznam | ForAll, Filtr, S, Součet a další rozsah záznamu funkcí | Výchozí název aktuálního záznamu ve funkci ForAll a ostatních funkcích rozsahu záznamu. |
Jak jméno | Galerie řízení Pro všechny, Filtr, S, Součet a další funkce rozsahu záznamu |
Definuje název pro aktuální záznam, čímž nahrazuje výchozí ThisItem nebo ThisRecord. Funkci As použijte pro usnadnění porozumění vzorcům a vyřešení dvojznačnosti při vnoření. |
Operátor ThisItem
V následujícím ovládacím prvku Gallerie je například vlastnost Items nastavena na zdroj dat Zaměstnanci (jako je entita Zaměstnance obsažená v ukázce Northwind Traders):
Employees
První položka v galerii je šablona, která je replikována pro každého zaměstnance. Vzorec pro obrázek v šabloně používá ThisItem k odkazování na aktuální položku:
ThisItem.Picture
Podobně používá vzorec pro název také ThisItem:
ThisItem.'First Name' & " " & ThisItem.'Last Name'
Operátor ThisRecord
ThisRecord se používá ve funkcích, které mají rozsah záznamu. Můžeme například použít funkci Filter s vlastností Items galerie, aby se zobrazila pouze křestní jména začínající na M:
Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )
ThisRecord je volitelný a předpokládá se přímým použitím polí, například v tomto případě bychom mohli napsat:
Filter( Employees, StartsWith( 'First Name', "M" ) )
I když je použití funkce ThisRecord volitelné, může usnadnit porozumění vzorců a může být potřeba v nejednoznačných situacích, kdy název pole může být také název vztahu. ThisRecord je volitelný, zatímco ThisItem je vždy povinný.
Funkci ThisRecord použijte k odkazování na celý záznam s funkcemi rozsahu Patch, Collect a dalšími funkcemi rozsahu záznamu. Například následující vzorec nastaví stav pro všechny neaktivní zaměstnance na aktivní:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees,
Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )
Operátor As
Použijte operátor As k pojmenování záznamu v galerii nebo funkci rozsahu záznamu, čímž se přepíše výchozí ThisItem nebo ThisRecord. Pojmenování záznamu může usnadnit pochopení vašich vzorců a ve vnořených situacích může být vyžadováno pro přístup k záznamům v jiných oblastech.
Například můžete upravit vlastnost Items naší galerie k použití As pro určení, že pracujeme se zaměstnancem:
Employees As Employee
Vzorce pro obrázek a jméno jsou upraveny tak, aby používaly tento název pro aktuální záznam:
Employee.Picture
Employee.'First Name' & " " & Employee.'Last Name'
As lze také použít s funkcemi rozsahu záznamů k nahrazení výchozího názvu ThisRecord. Můžeme to použít pro náš předchozí příklad k objasnění záznamu, se kterým pracujeme:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees As Employee,
Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )
Při vnoření galerií a funkcí rozsahu záznamu ThisItem a ThisRecord vždy odkazuje na nejvnitřnější rozsah, takže záznamy ve vnějším rozsahu nejsou k dispozici. Použití As ke zpřístupnění všech rozsahů záznamů tím, že každému z nich přidáte jedinečný název.
Tento vzorec například vytvoří šachovnici jako textový řetězec vnořením dvou funkcí ForAll:
Concat(
ForAll( Sequence(8) As Rank,
Concat(
ForAll( Sequence(8) As File,
If( Mod(Rank.Value + File.Value, 2) = 1, " X ", " . " )
),
Value
) & Char(10)
),
Value
)
Nastavení vlastnosti Text ovládacího prvku Label na tento vzorec:
Pojďme se podívat, co se zde děje:
- Začneme iterací nepojmenované tabulky 8 číslovaných záznamů z funkce Sequence. Tato smyčka je pro každou řadu desky, která se běžně označuje jako Pořadí, takže ji takto nazveme.
- Pro každý řádek iterujeme další nepojmenovanou tabulku 8 sloupců a dáme jí společný název Soubor.
- Pokud je Rank.Value + File.Value liché číslo, druhá mocnina vrátí X, jinak tečku. Tato část vzorce odkazuje na obě smyčky ForAll, což je možné díky operátoru As.
- Concat se používá dvakrát, nejprve k sestavení sloupců a poté řádků, přičemž a Char(10) vytvoří nový řádek.
Podobný příklad je možný s vnořenými ovládacími prvky Gallery namísto funkcí ForAll. Začněme vertikální galerií pro Pořadí. Tento ovládací prvek galerie bude mít vzorec Položky, který bude vypadat takto:
Sequence(8) as Rank
V této galerii umístíme horizontální galerii pro Soubor, která bude replikována pro každé Pořadí, s vlastností Items:
Sequence(8) as File
A konečně v této galerii přidáme ovládací prvek Label, který bude replikován pro každý Soubor a každé Pořadí. Změníme velikost tak, aby vyplnila celý prostor a použila vlastnost Fill pro poskytnutí barvy s tímto vzorcem:
If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )
Operátory Self a Parent
Existují tři způsoby, jak odkazovat na ovládací prvek a jeho vlastnosti v rámci vzorce:
Způsob | Popis |
---|---|
Podle názvu ovládacího prvku | Kdekoli v aplikaci můžete odkazovat na jakýkoli ovládací prvek prostřednictvím jeho názvu. Například Label1.Fill odkazuje na vlastnost výplně ovládacího prvku, jehož název je Label1. |
Vlastní provozovatel | Při psaní vzorce je často vhodné odkazovat na jinou vlastnost stejného ovládacího prvku. Namísto použití absolutního odkazu na název je jednodušší a přenosnější použít relativní odkaz na jeden prvek Self. Operátor Self poskytuje přístup k vlastnostem aktuálního ovládacího prvku. Například Self.Fill odkazuje na barvu výplně aktuálního ovládacího prvku. |
nadřazený operátor | Některé ovládací prvky jsou hostiteli dalších ovládacích prvků, například Screen a Gallery. Hostující ovládací prvek nazýváme nadřazený prvek pro prvky, které obsahuje.. Stejně jako operátor Self i operátor Parent poskytuje snadný relativní odkaz na ovládací prvek kontejneru. Například Parent.Fill odkazuje na vlastnost výplně ovládacího prvku, který je kontejnerem pro aktuální ovládací prvek. |
Self a nadřazený jsou operátory a nikoli vlastnosti samotných ovládacích prvků. Při odkazování na Parent.Parent není Self.Parent nebo Parent.Self podporován.
Názvy identifikátorů
Názvy proměnných, zdroje dat, sloupce a další objekty mohou obsahovat libovolný Unicode.
Použijte jednoduché uvozovky kolem názvu, který obsahuje mezeru nebo jiný speciální znak.
Dvě jednoduché uvozovky představují jednu jednoduchou uvozovku v názvu. Jména, která neobsahují speciální znaky, nevyžadují jednoduché uvozovky.
Zde je několik příkladů názvů sloupců, s nimiž se můžete v tabulce setkat, a jak jsou reprezentovány ve vzorci:
Název sloupce v databázi | Odkaz na sloupec ve vzorci |
---|---|
SimpleName | SimpleName |
NameWith123Numbers | NameWith123Numbers |
Název s mezerami | 'Name with spaces' |
Název s dvojitými uvozovkami | 'Name with "double" quotes' |
Název s jednoduchými uvozovkami | 'Name with ''single'' quotes' |
Název se znakem @ at | 'Name with an @ at sign' |
Dvojité uvozovky se používají k označení textového řetězce.
Zobrazovaná jména a logická jména
Některé zdroje dat, například SharePoint a Microsoft Dataverse mají dva různé názvy, které odkazují na stejnou tabulku nebo sloupec dat:
Logické jméno - Název, který je zaručeně jedinečný, po vytvoření se nemění, obvykle nepovoluje mezery ani jiné speciální znaky a není lokalizován do různých jazyků. V důsledku toho může být název nesrozumitelný. Tyto názvy používají profesionální vývojáři. Například cra3a_customfield. Tento název může být také označován jako název schématu nebo prostě název.
zobrazované jméno - Název, který je uživatelsky přívětivý a je určen pro koncové uživatele. Tento název nemusí být jedinečný, může se časem měnit, může obsahovat mezery a jakýkoli znak Unicode a může být lokalizován do různých jazyků. V souladu s výše uvedeným příkladem může být zobrazované jméno Vlastní pole s mezerou mezi slovy.
Protože zobrazované názvy jsou srozumitelnější, Power Fx je navrhne k výběru místo logických názvů. Ačkoli logická jména nejsou navrhována, mohou být stále použita, pokud jsou zadána nepřímo.
Představte si například, že jste přidali Vlastní pole k entitě v Dataverse. Systém vám přiřadí logické jméno, které můžete upravit pouze při vytváření pole. Výsledek by vypadal podobně jako:
Při vytváření odkazu na pole Účtů bude návrh použít Vlastní pole, protože se jedná o zobrazované jméno. Je nutné použít jednoduché uvozovky, protože tento název obsahuje mezeru:
Po výběru návrhu se na liště vzorců zobrazí „Vlastní pole“ a data se načtou:
Ačkoli to není navrhováno, mohli bychom také použít logické jméno pro toto pole. To povede k načtení stejných dat. Nejsou vyžadovány žádné uvozovky, protože tento název neobsahuje mezery ani speciální znaky:
Za scénami je udržováno mapování mezi zobrazovanými jmény ve vzorcích a základními logickými jmény. Protože k interakci se zdroji dat musí být použita logická jména, používá se toto mapování k automatickému převodu z aktuálního zobrazovaného jména na logické jméno a to je vidět v síťovém provozu. Toto mapování se také používá k převodu zpět na logická jména a přepnutí na nové zobrazované názvy, například pokud se zobrazované jméno změní nebo tvůrce v jiném jazyce upraví aplikaci.
Poznámka:
Při přesunu aplikace mezi prostředími nejsou logická jména přeložena. Pro systémovou entitu a názvy polí Dataverse by to neměl být problém, protože logická jména jsou v různých prostředích konzistentní. Ale jakákoli vlastní pole, například cra3a_customfield v tomto příkladu výše může mít jinou předponu prostředí (cra3a v tomto případě). Zobrazované názvy jsou upřednostňovány, protože mohou být porovnány se zobrazovanými názvy v novém prostředí.
Mnohoznačnost názvu
Protože zobrazované názvy nejsou jedinečné, může se stejný zobrazované jméno objevit ve stejné entitě vícekrát. Pokud k tomu dojde, bude logické jméno přidáno na konec zobrazovaného jména v závorce pro jedno z více konfliktních jmen. Na základě výše uvedeného příkladu, pokud existuje druhé pole se stejným zobrazovaným jménem Vlastního pole s logickým názvem cra3a_customfieldalt, návrh pak ukáže:
Řetězce pro odstranění mnohoznačnosti názvů jsou přidány v jiných situacích, ve kterých dochází ke konfliktům jmen, jako jsou názvy entit, sady možností a jiných položek Dataverse.
Operátor mnohoznačnosti
Některé funkce vytvářejí při zpracovávání jednotlivých záznamů obory záznamů pro přístup k polím tabulky. Jedná se například o Filter, AddColumns a Sum. Názvy polí přidané prostřednictvím oboru záznamů přepíší stejné názvy v aplikaci pocházející odjinud. Pokud k tomu dojde, můžete k hodnotám mimo obor záznamů nadále přistupovat pomocí operátoru mnohoznačnosti @:
- Pro přístup k hodnotám z vnořených oborů záznamů použijte operátor @ s názvem tabulky, se kterou se pracuje, a to podle tohoto vzoru:
Tabulka[@Název pole] - Pro přístup ke globálním hodnotám, jako jsou zdroje dat, kolekce a kontextové proměnné, použijte vzor [@NázevObjektu] (bez označení tabulky).
Další informace a příklady najdete v diskuzi o oborech záznamů.