Operators en id's
Notitie
Microsoft Power Fx is de nieuwe naam voor de formuletaal van canvas-apps. Aan deze artikelen wordt gewerkt terwijl we de taal extraheren uit canvas-apps en deze integreren met andere Microsoft Power Platform-producten en het beschikbaar maken als open source. Begin met het Microsoft Power Fx-overzicht voor een inleiding in de taal.
De Microsoft Power Fx-operators worden hieronder beschreven. Sommige van deze operators zijn afhankelijk van de taal van de auteur. Zie Wereldwijde apps voor meer informatie.
Symbool | Type | Syntaxis | Beschrijving |
---|---|---|---|
. | Eigenschapselectie | Schuifregelaar1.Waarde Color.Red |
Hiermee wordt een eigenschap opgehaald uit een tabel, besturingselement of opsomming. Voor achterwaartse compatibiliteit kan ook ! worden gebruikt. |
. taalafhankelijk |
Decimaalteken | 1.23 | Scheidingsteken tussen de hele getallen en fracties van een getal. Welk teken wordt gebruikt, is afhankelijk van de taal. |
( ) | Haakjes | Filter(T, A < 10) (1 + 2) * 3 |
Dwingt een volgorde af en groepeert subexpressies in een grotere expressie |
+ | Rekenkundige operators | 1 + 2 | Optelling |
- | 2 - 1 | Aftrekken en ondertekenen | |
* | 2 * 3 | Vermenigvuldiging | |
/ | 2 / 3 | Delen (zie ook de functie Mod) | |
^ | 2 ^ 3 | Machtsverheffing, vergelijkbaar met de functie Power | |
% | 20% | Percentage (vergelijkbaar met "* 1/100") | |
= | Vergelijkingsoperators | Prijs = 100 | Gelijk aan |
> | Prijs > 100 | Groter dan | |
>= | Prijs >= 100 | Groter dan of gelijk aan | |
< | Prijs < 100 | Kleiner dan | |
<= | Prijs <= 100 | Kleiner dan of gelijk aan | |
<> | Prijs <> 100 | Niet gelijk aan | |
& | Operator voor tekenreekssamenvoeging | "Hallo" & " " & "wereld" | Laat meerdere tekenreeksen weergeven als één doorlopende tekenreeks |
&& of En | Logische operators | Prijs < 100 && Slider1.Waarde = 20 of Prijs < 100 And Slider1.Value = 20 |
Logische combinatie, vergelijkbaar met de functie And |
|| of Of | Prijs < 100 || Slider1.Waarde = 20 of Prijs < 100 Of Slider1.Waarde = 20 | Logische scheiding, vergelijkbaar met de functie Or | |
! of Not | !(Prijs < 100) of Niet (Prijs < 100) | Logische negatie, vergelijkbaar met de functie Not | |
precies | Ledenbeheerders | Galerij1. Geselecteerde exacte opgeslagen items | Lidmaatschap van een verzameling of tabel |
precies | "Windows" exactin "Om vensters in het Windows-besturingssysteem weer te geven..." | Test van subtekenreeks (hoofdlettergevoelig) | |
in | Galerij1.Geselecteerd in opgeslagen items | Lidmaatschap van een verzameling of tabel | |
in | "Het" in "Het toetsenbord en de monitor..." | Test van subtekenreeks (niet hoofdlettergevoelig) | |
@ | Doorverwijzing operator | MijnTabel[@veldnaam] | Ondubbelzinnigheid van velden |
@ | [@MijnVariabele] | Algemene ondubbelzinnigheid | |
, [taalafhankelijk] |
Lijstscheidingsteken | Als(X < 10, "Laag", "Goed") { X: 12, Y: 32 } [ 1, 2, 3 ] |
Scheidt: Welk teken wordt gebruikt, is afhankelijk van de taal. |
; [taalafhankelijk] |
Formulekoppeling | Verzamelen(T, A); Navigeren(S1, "") | Afzonderlijke aanroepen van functies in de gedragseigenschappen. De koppelingsoperator is afhankelijk van de taal. |
Als | Als operator | AllCustomers Als Klant | Overschrijft ThisItem en ThisRecord in galerieën en recordbereikfuncties. Als is handig om een betere, specifieke naam te geven en is vooral belangrijk in geneste scenario's. |
Zelf | Zelf operator | Zelf invullen | Toegang tot eigenschappen van het huidige besturingselement |
bovenliggend | bovenliggend operator | Ouder.Vul | Toegang tot de eigenschappen van een besturingselementcontainer |
Dit item | Dit item operator | DitItem.Voornaam | Toegang tot de velden van het besturingselement Gallery of Form |
DitRecord | Dit item operator | ThisRecord.Voornaam | Toegang tot de volledige record en de afzonderlijke velden van de record binnen ForAll, Sum, With en andere recordbereikfuncties. Kan worden overschreven met de operator As. |
De operators in en exactin
Gebruik de operators in en exactin om een tekenreeks te zoeken in een gegevensbron, zoals een verzameling of een geïmporteerde tabel. Met de operator in zoekt u overeenkomsten, onafhankelijk van het gebruik van hoofdletters, en met de operator exactin worden overeenkomsten gezocht met precies hetzelfde hoofdlettergebruik. Hier volgt een voorbeeld:
Importeer of maak een collectie met de naam Inventory en geef deze weer in een galerie, zoals wordt beschreven in de eerste procedure in Tekst en afbeeldingen weergeven in een galerie.
Stel de eigenschap Items van de galerie in op deze formule:
Filter(Inventaris, "E" in productName)De galerie bevat alle producten behalve Callisto omdat de naam van dat product de enige naam is die niet de letter bevat die u hebt opgegeven.
Stel de eigenschap Items van de galerie in op deze formule:
Filter(Inventaris, "E" exactin productName)In de galerie wordt alleen Europa weergegeven omdat dit de enige naam is die de letter bevat die u hebt opgegeven, met het opgegeven hoofdlettergebruik.
Operators ThisItem, ThisRecord en As
Enkele besturingselementen en functies passen formules toe op afzonderlijke records van een tabel. Gebruik een van de volgende opties om naar de afzonderlijke record in een formule te verwijzen:
Operator | Van toepassing op: | Beschrijving |
---|---|---|
Dit item | Galerij controle Formulier bewerken controle Weergaveformulier controle |
De standaardnaam voor de huidige record in een besturingselement Gallery of Form. |
DitRecord | Voor iedereen, Filter, Met, Som en andere recordbereik functies | De standaardnaam voor de huidige record in ForAll en andere recordbereikfuncties. |
Als naam | Galerij controle ForAll, Filter, With, Sum en andere recordbereikfuncties |
Definieert een naam voor de huidige record, ter vervanging van de standaard ThisItem of ThisRecord. Gebruik As om formules begrijpelijker te maken en onduidelijkheid bij het nesten weg te nemen. |
ThisItem-operator
Zo is bijvoorbeeld in het volgende besturingselement Gallery de eigenschap Items ingesteld op de gegevensbron Medewerkers (zoals de entiteit Medewerkers die is opgenomen in het voorbeeld van Northwind Traders):
Employees
Het eerste item in de galerie is een sjabloon die voor elke medewerker wordt gerepliceerd. In de sjabloon maakt de formule voor de afbeelding gebruik van ThisItem om naar het huidige item te verwijzen:
ThisItem.Picture
Daarnaast gebruikt de formule voor de naam eveneens ThisItem:
ThisItem.'First Name' & " " & ThisItem.'Last Name'
Operator ThisRecord
ThisRecord wordt gebruikt in functies met een recordbereik. Zo kunnen we bijvoorbeeld de functie Filter gebruiken met de eigenschap Items van onze galerie om alleen voornamen weer te geven die beginnen met M:
Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )
ThisRecord is optioneel en wordt geïmpliceerd door de velden direct te gebruiken. In dit geval hadden we bijvoorbeeld het volgende kunnen schrijven:
Filter( Employees, StartsWith( 'First Name', "M" ) )
Hoewel optioneel, kan het gebruik van ThisRecord formules begrijpelijker maken. Bovendien kan het ook nodig zijn in onduidelijke situaties waarin een veldnaam ook een relatienaam kan zijn. ThisRecord is optioneel, terwijl ThisItem altijd vereist is.
Gebruik ThisRecord om naar de hele record te verwijzen met Patch, Collect en andere recordbereikfuncties. Met de volgende formule wordt bijvoorbeeld de status voor alle inactieve medewerkers ingesteld op actief:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees,
Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )
Operator As
Gebruik de operator As om een record een naam te geven in een galerie of recordbereikfunctie, waarbij de standaardwaarde ThisItem of ThisRecord wordt overschreven. Het benoemen van de record kan uw formules begrijpelijker maken en kan in geneste situaties vereist zijn om toegang te krijgen tot records in andere bereiken.
Zo kunt ubijvoorbeeld de eigenschap Items van onze galerie wijzigen om As te gebruiken om vast te stellen dat we met een medewerker werken:
Employees As Employee
De formules voor de afbeelding en naam zijn aangepast om deze naam te gebruiken voor de huidige record:
Employee.Picture
Employee.'First Name' & " " & Employee.'Last Name'
As kan ook worden gebruikt met recordbereikfuncties om de standaardnaam ThisRecord te vervangen. We kunnen dit toepassen op ons vorige voorbeeld om de record waarmee we werken te verduidelijken:
With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
ForAll( InactiveEmployees As Employee,
Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )
Bij het nesten van galerieën en recordbereikfuncties, verwijzen ThisItem en ThisRecord altijd naar het binnenste bereik, waardoor records in de buitenste bereiken niet beschikbaar zijn. Gebruik As om alle recordbereiken beschikbaar te maken door elk een unieke naam te geven.
Deze formule produceert bijvoorbeeld een schaakbordpatroon als een tekenreeks door twee functies ForAll te nesten:
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
)
Bij instelling van een eigenschap Text voor een besturingselement Label in deze formule wordt het volgende weergegeven:
Laten we nader onderzoeken wat hier gebeurt:
- We beginnen met het toepassen van interatie op een naamloze tabel met 8 genummerde records vanuit de functie Sequence. Deze lus is voor elke rij van het bord, die gewoonlijk wordt aangeduid als Positie en dus geven we het deze naam.
- Voor elke rij voeren we iteraties uit voor een andere naamloze tabel met 8 kolommen en geven deze algemene naam File.
- Als Positie.Value + File.Value een oneven getal is, krijgt het vierkant een X, anders een punt. Dit deel van de formule verwijst naar beide lussen ForAll, mogelijk gemaakt door gebruik van de operator As.
- Concat wordt twee keer gebruikt, eerst om de kolommen en vervolgens de rijen samen te stellen, waarbij a Char(10) wordt ingezet om een nieuwe regel te maken.
Een soortgelijk voorbeeld is mogelijk met geneste besturingselementen Gallery in plaats van functies ForAll. Laten we beginnen met de verticale galerie voor de Positie. Dit galeriebesturingselement heeft de volgende formule Items:
Sequence(8) as Rank
Binnen deze galerie plaatsen we een horizontale galerie voor het File, die wordt gerepliceerd voor elke Positie, met de volgende eigenschap Items:
Sequence(8) as File
En tot slot voegen we binnen deze galerie een besturingselement Label toe die wordt gerepliceerd voor elk File en elke Positie. We passen het aan om de hele ruimte te vullen en gebruiken de eigenschap Fill om de kleur te leveren voor deze formule:
If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )
Self-operators en bovenliggende operators
Er zijn drie manieren om binnen een formule naar een besturingselement en de eigenschappen ervan te verwijzen:
Methode | Beschrijving |
---|---|
Met de naam van het besturingselement | Er kan op basis van naam naar alle besturingselementen worden verwezen, waar dan ook in de app. Bijvoorbeeld, Label1.Fill verwijst naar de eigenschap fill van het besturingselement met de naam Label1. |
Zelf operator | Het is vaak handig om bij het schrijven van een formule naar een andere eigenschap van hetzelfde besturingselement te verwijzen. In plaats van een absolute verwijzing op naam te gebruiken, is het gemakkelijker om een relatieve verwijzing naar zichzelf te gebruiken. De operator Self biedt die gemakkelijke toegang tot het huidige besturingselement. Self.Fill verwijst bijvoorbeeld naar de vulkleur van het huidige besturingselement. |
bovenliggend operator | Sommige besturingselementen hosten andere besturingselementen, zoals Screen en Gallery. Het besturingselement dat als host fungeert, wordt ook wel het bovenliggende besturingselement genoemd. Net zoals de operator Self biedt ook de operator Parent een gemakkelijke relatieve verwijzing naar het containerbesturingselement. Parent.Fill verwijst bijvoorbeeld naar de eigenschap fill van het besturingselement dat de container is voor het huidige besturingselement. |
Self en bovenliggend zijn operatoren en geen eigenschappen van de besturingselementen zelf. Verwijzingen naar Parent.Parent, Self.Parent of Parent.Self worden niet ondersteund.
Identifier-namen
De namen van variabelen, gegevensbronnen, kolommen en andere objecten kunnen elk Unicode-teken bevatten.
Plaats een naam die een spatie of ander speciaal teken bevat tussen enkele aanhalingstekens.
Gebruik twee enkele aanhalingstekens samen om een één enkel aanhalingsteken in de naam weer te geven. Namen die geen speciale tekens bevatten, vereisen geen enkele aanhalingstekens.
Hier zijn enkele voorbeeldnamen voor kolommen die u in een tabel kunt tegenkomen, met toelichting op hoe ze worden weergegeven in een formule:
Kolomnamen in een database | Kolomverwijzing in een formule |
---|---|
EenvoudigeNaam | SimpleName |
NaamMet123Cijfers | NameWith123Numbers |
Naam met spaties | 'Name with spaces' |
Naam met "dubbele" aanhalingstekens | 'Name with "double" quotes' |
Naam met 'enkele' aanhalingstekens | 'Name with ''single'' quotes' |
Naam met een @ apenstaartje | 'Name with an @ at sign' |
Dubbele aanhalingstekens worden gebruikt om tekenreeksen aan te wijzen.
Weergavenamen en logische namen
Sommige gegevensbronnen, zoals SharePoint en Microsoft Dataverse, gebruiken twee verschillende namen om te verwijzen naar dezelfde tabel of kolom met gegevens:
Logische naam - Een naam die gegarandeerd uniek is, die niet verandert nadat hij is aangemaakt, die doorgaans geen spaties of andere speciale tekens toestaat en die niet is gelokaliseerd in verschillende talen. Als gevolg hiervan kan de naam cryptisch zijn. Deze namen worden gebruikt door professionele ontwikkelaars. Bijvoorbeeld cra3a_customfield. Deze naam kan ook worden aangeduid als schemanaam of gewoon naam.
weergavenaam - Een naam die gebruiksvriendelijk is en bedoeld is om door eindgebruikers gezien te worden. Deze naam is mogelijk niet uniek, kan in de loop van de tijd veranderen, kan spaties en elk Unicode-teken bevatten en kan naar verschillende talen worden vertaald. Kijkend naar het bovenstaande voorbeeld kan de weergavenaam Aangepast veld zijn met een spatie tussen de woorden.
Aangezien weergavenamen gemakkelijker te begrijpen zijn, stelt Power Fx deze als keuzes en worden geen logische namen voorgesteld. Hoewel logische namen niet worden voorgesteld, kunnen ze toch worden gebruikt als ze indirect worden getypt.
Stel bijvoorbeeld dat u een Aangepast veld hebt toegevoegd aan een entiteit in Dataverse. Het systeem zal u een logische naam toewijzen die u alleen kunt wijzigen bij het maken van het veld. Het resultaat zou er ongeveer zo uitzien:
Bij het schrijven van een verwijzing naar een veld Accounts, wordt de suggestie gedaan om 'Aangepast veld' te gebruiken, aangezien dit de weergavenaam is. De enkele aanhalingstekens moeten worden gebruikt omdat deze naam een spatie bevat:
Na het selecteren van de suggestie wordt 'Aangepast veld' weergegeven in de formulebalk en worden de gegevens opgehaald:
Hoewel dit niet wordt gesuggereerd, kunnen we ook de logische naam voor dit veld gebruiken. Hierdoor worden dezelfde gegevens opgehaald. Er zijn geen enkele aanhalingstekens vereist omdat deze naam geen spaties of speciale tekens bevat:
Achter de schermen wordt een toewijzing bijgehouden tussen de weergavenamen in formules en de onderliggende logische namen. Aangezien logische namen moeten worden gebruikt om te communiceren met de gegevensbron, wordt deze toewijzing gebruikt om automatisch van de huidige weergavenaam naar de logische naam te converteren. Dat is ook wat wordt gezien in het netwerkverkeer. Deze toewijzing wordt ook gebruikt om terug te converteren naar logische namen bij het overschakelen naar nieuwe weergavenamen, bijvoorbeeld als een weergavenaam verandert of een maker in een andere taal de app bewerkt.
Notitie
Logische namen worden niet vertaald wanneer een app wordt verplaatst van de ene omgeving naar de andere. Voor Dataverse-systeementiteit- en veldnamen zou dit geen probleem moeten zijn aangezien logische namen consistent zijn in verschillende omgevingen. Maar alle aangepaste velden, zoals cra3a_customfield in dit voorbeeld hierboven, kunnen een ander omgevingsvoorvoegsel hebben (cra3a in dit geval). Weergavenamen hebben de voorkeur, omdat ze kunnen worden vergeleken met weergavenamen in de nieuwe omgeving.
Naamondubbelzinnigheid
Omdat weergavenamen niet uniek zijn, kan dezelfde weergavenaam meer dan eens voorkomen in dezelfde entiteit. Wanneer dit gebeurt, wordt bij een of meer van de gelijkluidende namen de logische naam tussen haakjes achter de weergavenaam toegevoegd. Voortbouwend op het bovenstaande voorbeeld, als er een tweede veld zou zijn met dezelfde weergavenaam Aangepast veld en de logische naam cra3a_aangepastveldalt, dan zouden de suggesties dit laten zien:
Tekenreeksen voor naamondubbelzinnigheid worden toegevoegd in andere situaties waarin naamconflicten optreden, zoals de namen van entiteiten, optiesets en andere Dataverse-items.
Ondubbelzinnigheidsoperator
Sommige functies maken recordbereiken voor toegang tot de velden van een tabel tijdens het verwerken van elke record, zoals Filter, AddColumns en Sum. Veldnamen waarbij het recordbereik is toegevoegd, overschrijven dezelfde namen elders in de app. Als dit gebeurt, kunt u nog steeds toegang krijgen tot waarden buiten het recordbereik met de operator @ voor ondubbelzinnigheid:
- Als u toegang wilt krijgen tot waarden van geneste recordbereiken, gebruikt u de operator @ met de naam van de tabel die wordt bewerkt met behulp van dit patroon:
Tabel[@Veldnaam] - Als u toegang wilt krijgen tot globale waarden, zoals gegevensbronnen, verzamelingen en contextvariabelen, gebruikt u het patroon [@Objectnaam] (zonder een tabelaanduiding).
Zie recordbereiken voor meer informatie en voorbeelden.