Operatorer og identifikatorer i Power Apps

Gjelder: Lerretsapper Modelldrevne apper

Noen av disse operatorene er avhengige av språket til forfatteren. Hvis du vil ha mer informasjon om språkstøtte i lerretsapper, kan du se Globale apper.

Symbol Type Eksempel Beskrivelse
'...' Identifikator 'Account Name' Identifikatorer som inneholder spesialtegn, inkludert mellomrom, står i enkle anførselstegn
"..." Tekststreng "Hello, World" Tekststrenger står i doble anførselstegn
$"..." Strenginterpolasjon $"Dear {FirstName}," Formler som er innebygd i en tekststreng
. Valg av egenskap Slider1.Value
Color.Red
Acceleration.X
Henter en egenskap fra en tabell, kontroll, et signal eller en opplisting. For bakoverkompatibilitet kan du også bruke !.
.
[språkavhengig]
Desimalskilletegn 1.23 Skilletegn mellom hele tall og delvise tall. Tegnet er avhengig av språket.
( ) Parenteser Filter(T, A < 10)

(1 + 2) * 3
Fremtvinger prioritert rekkefølge, og grupperer deluttrykk i et større uttrykk
+ Aritmetiske operatorer 1 + 2 Addisjon
-   2–1 Subtraksjon og tegn
*   2 * 3 Multiplikasjon
/   2 / 3 Divisjon (se også Mod-funksjonen)
^   2 ^ 3 Eksponentiering, tilsvarer Power-funksjonen
%   20% Prosent (tilsvarer "* 1/100")
= Sammenligningsoperatorer Price = 100 Er lik
>   Price > 100 Større enn
>=   Price >= 100 Større enn eller lik
<   Price < 100 Mindre enn
<=   Price <= 100 Mindre enn eller lik
<>   Price <> 100 Ikke lik
& Operator for sammenslåing av streng "hello" & " " & "world" Gjør at flere strenger vises kontinuerlig
&& eller And Logiske operatorer Price < 100 && Slider1.Value = 20
eller Price < 100 And Slider1.Value = 20
Logisk forbindelse, tilsvarer And-funksjonen
|| eller Or   Price < 100 || Slider1.Value = 20 eller Price < 100 Or Slider1.Value = 20 Logisk disjunksjon, tilsvarer Or-funksjonen
! eller Not   !(Price < 100) eller Not (Price < 100) Logisk negasjon, tilsvarer Not-funksjonen
exactin Medlemskapsoperatorer Gallery1.Selected exactin SavedItems Tilhører en samling eller en tabell
exactin   "Windows" exactin “To display windows in the Windows operating system...” Delstreng-test (skiller mellom små og store bokstaver)
om   Gallery1.Selected in SavedItems Tilhører en samling eller en tabell
om   "The" in "The keyboard and the monitor..." Delstreng-test (skiller ikke mellom små og store bokstaver)
@ Tvetydighetsoperator MyTable[@fieldname] Felttvetydighet
@   [@MyVariable] Global tvetydighet
,
[språkavhengig]
Listeskilletegn If( X < 10, "Low", "Good" )
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Skiller: Dette tegnet er avhengig av språket.
;
[språkavhengig]
Formelsammenkjeding Collect(T, A); Navigate(S1, "") Skiller aktivering av funksjoner i egenskaper for virkemåte. Sammenkjedingsoperatoren er avhengig av språket.
Som Som operator AllCustomers som kunde Overstyrer ThisItem og ThisRecord i gallerier og funksjoner for oppføringsomfang. As er nyttig for å gi et bedre, spesifikt navn og er spesielt viktig i nestede scenarier.
Selv Self-operatoren Self.Fill Tilgang til egenskapene for den gjeldende kontrollen
Overordnet Overordnet operator Parent.Fill Tilgang til egenskapene for en kontrollbeholder
ThisItem ThisItem-operatoren ThisItem.FirstName Tilgang til felter i en Gallery- eller form-kontroll
ThisRecord ThisRecord-operatoren ThisRecord.FirstName Tilgang til den fullstendige oppføringen og enkeltfelt i oppføringen i ForAll, Sum, With og andre funksjoner for oppføringsomfang. Kan overstyres med As-operatoren.

Merk

Operatoren @ kan også brukes til å validere oppføringsobjekttypen mot en datakilde. Eksempel: Collect(coll,Account@{'Account Number: 1111')

in- og exactin-operatorer

Bruk operatorene in og exactin til å finne en streng i en datakilde, for eksempel en samling eller en importert tabell. in-operatoren identifiserer treff uavhengig av bokstavtype, og exactin-operatoren identifiserer treff bare hvis de samme store bokstavene er i bruk. Her er et eksempel:

  1. Opprett eller importer en samling kalt Beholdning, og vis den i et galleri, som den første prosedyren i Vis bilder og tekst i et galleri beskriver.

  2. Angi Items-egenskapen for galleriet til denne formelen:
    Filter(Inventory, "E" in ProductName)

    Galleriet viser alle produktene bortsett fra Callisto. Det er fordi navnet er det eneste produktet som ikke inneholder bokstaven du oppgav.

  3. Endre Items-egenskapen for galleriet til denne formelen:
    Filter(Inventory, "E" exactin ProductName)

    Galleriet viser bare Europa fordi navnet er det eneste som inneholder bokstaven du oppgav i det angitte tilfellet.

Operatorene ThisItem, ThisRecord og As

Noen få kontroller og funksjoner bruker formler på enkeltoppføringer i en tabell. Hvis du vil referere til den enkelte oppføringen i en formel, bruker du ett av følgende:

Operator Gjelder følgende Beskrivelse
ThisItem Galleri-kontroll
Edit form-kontroll
Display form-kontroll
Standardnavnet på den gjeldende oppføringen i en Gallery-kontroll eller en skjemakontroll.
ThisRecord ForAll, Filter, With, Sum og andre funksjoner for oppføringsomfang Standardnavnet på den gjeldende oppføringen i ForAll og andre funksjoner for oppføringsomfang.
Somnavn Gallery-kontroll
ForAll, Filter, With, Sum og andre funksjoner for oppføringsomfang
Definerer et navn for den gjeldende oppføringen, og erstatter standard ThisItem eller ThisRecord. Bruk As til å gjøre formler enklere å forstå og løse tvetydigheter ved nesting.

ThisItem-operatoren

I Gallery-kontrollen nedenfor er for eksempel Items-egenskapen satt til Ansatte-datakilden (for eksempel Ansatte-tabellen inkludert med Northwind Traders-eksemplet):

Employees

Ansatte vist i et galleri.

Det første elementet i galleriet er en mal som blir replikert for hver ansatt. I malen bruker formelen for bildet ThisItem til å referere til det gjeldende elementet:

ThisItem.Picture

Formel for bildet av en ansatt.

På samme måte bruker også formelen for navnet ThisItem:

ThisItem.'First Name' & " " & ThisItem.'Last Name'

Formel for for- og etternavn til en ansatt.

ThisRecord-operatoren

ThisRecord brukes i funksjoner som har et oppføringsomfang. Vi kan for eksempel bruke Filter-funksjonen med Items-egenskapen i galleriet til bare å vise fornavn som begynner på M:

Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )

Filtrere de ansatte basert på navn, ved hjelp av ThisRecord.

ThisRecord er valgfritt og implisitt ved å bruke feltene direkte, for eksempel i dette tilfellet kan vi ha skrevet:

Filter( Employees, StartsWith( 'First Name', "M" ) )

Selv om det er valgfritt, kan du ved hjelp av ThisRecord gjøre det enklere å forstå formler, og det kan være nødvendig i tvetydige situasjoner der et feltnavn også kan være et relasjonsnavn. ThisRecord er valgfritt, mens ThisItem er alltid obligatorisk.

Bruk ThisRecord til å referere til hele oppføringen med Patch, Collect og andre funksjoner for oppføringsomfang. Følgende formel setter for eksempel statusen for alle inaktive ansatte til aktiv:

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees,
              Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )

As-operatoren

Bruk As-operatoren til å gi navn til en oppføring i et galleri eller en funksjon for oppføringsomfang, som overstyrer standard ThisItem eller ThisRecord. Når du navngir oppføringen, kan det bli enklere å forstå formlene, og dette kan være nødvendig i nestede situasjoner for å få tilgang til oppføringer i andre omfang.

Du kan for eksempel endre Items-egenskapen i galleriet for å bruke As til å identifisere at vi arbeider med en ansatt:

Employees As Employee

Galleri over ansatte ved hjelp av As-operatoren.

Formlene for bildet og navnet justeres til å bruke dette navnet på den gjeldende oppføringen:

Employee.Picture

Bilde av en ansatt som bruker ansattnavnet angitt med As-operatoren.

Employee.'First Name' & " " & Employee.'Last Name'

For- og etternavn på en ansatt som bruker ansattnavnet angitt med As-operatoren.

As kan også brukes med funksjoner for oppføringsomfang til å erstatte standardnavnet ThisRecord. Vi kan bruke dette i det forrige eksemplet til å tydeliggjøre oppføringen vi arbeider med:

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees As Employee,
              Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )

Når du nester gallerier og funksjoner for oppføringsomfang, refererer ThisItem og ThisRecord alltid til det innerste omfanget, noe som fører til at oppføringer i ytre omfang ikke er tilgjengelige. Bruk As til å gjøre alle oppføringsomfang tilgjengelige ved å gi hvert unikt navn.

Denne formelen gir for eksempel et rutemønster som en tekststreng ved å neste to ForAll-funksjoner:

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
)

Angi en Label-kontrolls Text-egenskapen til denne formelen viser:

Rutemønstertekst vist i en etikettkontroll.

La oss forklare det som skjer her:

  • Vi starter med å gjenta en tabell uten navn med åtte nummererte oppføringer fra Sequence-funksjonen. Denne løkken er for hver rad i mønsteret, noe som vanligvis kalles Rangering, så vi gir den dette navnet.
  • For hver rad gjentar vi en ny tabell uten navn med 8 kolonner, og vi gir den fellesnavnet Fil.
  • Hvis Rank.Value + File.Value er et oddetall, får kvadratet en X, ellers en prikk. Denne delen av formelen refererer til begge ForAll-løkkene, som er mulig ved hjelp av As-operatoren.
  • Concat brukes to ganger, først til å sette sammen kolonnene og deretter radene, med et Char(10) kalt for å opprette en ny linje.

Et lignende eksempel er mulig med nestede Gallery-kontroller i stedet for ForAll-funksjoner. La oss starte med det loddrette galleriet for Rangering. Denne gallerikontrollen vil ha Items-formelen:

Sequence(8) as Rank

Illustrasjon av det ytre galleriet som gir Rangering-gjentakelsen.

I dette galleriet skal vi plassere et vannrett galleri for Fil, som blir replikert for hver Rangering, med en Items-egenskap på:

Sequence(8) as File

Illustrasjon av det indre galleriet som gir Fil-gjentakelsen.

Til slutt i dette galleriet skal vi legge til en Label-kontroll som vil bli replikert for hver Fil og hver Rangering. Vi skalerer det slik at det fyller hele plassen, og bruker Fill-egenskapen til å angi fargen med denne formelen:

If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )

Label-kontroll i de to galleriene som inneholder de skiftende fargene for rutemønsteret.

Operatorene Self og Parent

Det finnes tre måter å referere til en kontroll og egenskapene på i en formel:

Metode Beskrivelse
Etter navn på kontroll Alle kontroller henvises til ved navn fra hvor som helst i appen.

For eksempel refererer Label1.Fill til fill-egenskapen til kontrollen med navnet Label1.
Self-operatoren Det er ofte nyttig å referere til en annen egenskap for den samme kontrollen når du skriver en formel. I stedet for å bruke en absolutt referanse med navn er det enklere og mer bærbart å bruke en relativ referanse til seg selv. Self-operatoren gir enkel tilgang til den gjeldende kontrollen.

For eksempel refererer Self.Fill til fyllfargen for den gjeldende kontrollen.
Parent-operatoren Noen kontroller er verter for andre kontroller, for eksempel kontrollene Screen og Gallery. Vertskontrollen for kontrollene inni kalles parent. I likhet med Self-operatoren, gir Parent-operatoren en enkel relativ referanse til container-kontrollen.

For eksempel refererer Parent.Fill til fill-egenskapen for kontrollen som er beholderen for den gjeldende kontrollen.

Self og Parent er operatorer og ikke egenskaper på selve kontrollene. Referering til Parent.Parent, Self.Parent eller Parent.Self støttes ikke.

ID-navn

Navnene på variabler, datakilder, kolonner og andre objekter kan inneholde Unicode.

Bruk enkle anførselstegn rundt et navn som inneholder et mellomrom eller et annet spesialtegn.
Bruk to enkle anførselstegn sammen for å representere ett anførselstegn i navnet. Navn som ikke inneholder spesialtegn, krever ikke enkle anførselstegn.

Her er noen eksempler på kolonne som kan være i en tabell, og hvordan de representeres i en formel:

Kolonnenavn i en database Kolonnereferanse i en formel
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Navn med mellomrom 'Name with spaces'
Navn med "doble" anførselstegn 'Name with "double" quotes'
Navn med 'enkle' anførselstegn 'Name with ''single'' quotes'
Navn med et @-krøllalfategn 'Name with an @ at sign'

Doble anførselstegn brukes til å angi tekststrenger.

Visningsnavn og logiske navn

Noen datakilder, for eksempel SharePoint og Microsoft Dataverse, har to forskjellige navn som refererer til samme tabell eller kolonne med data:

  • Logisk navn – Et navn som er garantert å være unikt, ikke endres etter at det er opprettet, tillater vanligvis ikke mellomrom eller andre spesialtegn, og ikke er lokalisert på ulike språk. Dette fører til at navnet kan være kryptisk. Disse navnene brukes av profesjonelle utviklere. For eksempel cra3a_customfield. Dette navnet kan også referere til som skjemanavn eller bare navn.

  • Visningsnavn – Et navn som er brukervennlig, og som er ment å skulle ses av sluttbrukere. Dette navnet er kanskje ikke unikt, kan endres over tid, kan inneholde mellomrom og eventuelle Unicode-tegn, og kan oversettes til andre språk. Visningsnavnet, som i eksemplet over, kan være et egendefinert felt med mellomrom mellom ordene.

Siden visningsnavn er enklere å forstå, vil lerretsapper foreslå dem som valg og ikke foreslå logiske navn. Selv om logiske navn ikke foreslås, kan du likevel bruke dem ved å skrive dem inn direkte.

La oss for eksempel si at du har lag til et Egendefinert felt i en tabell i Dataverse. Et logisk navn blir tilordnet for deg av systemet og kan bare endres når du oppretter feltet. Resultatet vil se omtrent slik ut:

Tabellen Forretningsforbindelser der Egendefinert felt er lagt til og visningsnavnet «Egendefinert felt» og det logiske navnet «cr5e3_customfield».

Når du redigerer en referanse til et forretningsforbindelsesfelt, vises et forslag om å bruke 'Custom Field' siden det er visningsnavnet. Enkle anførselstegn må brukes fordi dette navnet inneholder et mellomrom:

Studio-formellinje som viser forslag til feltnavn for forretningsforbindelser med det visningsnavn 'Custom Field' uthevet.

Når du har valgt forslaget, vises 'Custom Field' på formellinjen, og dataene hentes:

Studio-formellinje som viser bruk av visningsnavnet 'Custom Field' for feltet.

Selv om det ikke foreslås, kan vi også bruke det logiske navnet for dette feltet. Det vil føre til at de samme dataene hentes. Enkle anførselstegn er ikke nødvendig fordi dette navnet ikke inneholder mellomrom eller spesialtegn:

Studio-formellinje som viser bruk av det logiske navnet cr5e3_customfield for feltet.

I bakgrunnen opprettholdes en tilordning mellom visningsnavnene i formler og de underliggende logiske navnene. Siden logiske navn må brukes til å samhandle med datakilden, brukes denne tilordningen til å konvertere fra gjeldende visningsnavn til det logiske navnet automatisk, og det er det som ses i nettverkstrafikken. Denne tilordningen brukes også til å konvertere tilbake til logiske navn for å bytte til nye visningsnavn, for eksempel hvis et visningsnavn endres eller en produsent på et annet språk redigerer appen.

Merk

Logiske navn oversettes ikke når en app flyttes mellom miljøer. Når det gjelder Dataverse-systemtabellen og -feltnavn skal ikke dette være et problem siden logiske navn er konsekvente på tvers av miljøer. Eventuelle egendefinerte felt, for eksempel cra3a_customfield i eksemplet over, kan ha et annet miljøprefiks (cra3a i dette tilfellet). Visningsnavn foretrekkes fordi de kan sammenlignes med visningsnavn i det nye miljøet.

Navnetvetydighet

Siden visningsnavn ikke er unike, kan det samme visningsnavnet vises flere ganger i samme tabell. Når dette skjer, blir det logiske navnet lagt til på slutten av visningsnavn i parentes for ett av flere av navnene som er i konflikt med hverandre. Med utgangspunkt i eksemplet over, hvis det var et annet felt med samme visningsnavnet Custom Field med logisk navn cra3a_customfieldalt, vil forslaget vise:

Studio-formellinje som viser bruken av det logiske navnet cr5e3_customfieldalt for å skille de to versjonene av

Entydighetsstrenger for navn legges til i andre situasjoner der navnekonflikter oppstår, for eksempel navnene på tabeller, valg og andre Dataverse-elementer.

Tvetydighetsoperator

Noen funksjoner oppretter oppføringsområder for å få tilgang til feltene i tabellen under behandling av hver oppføring, som Filter, AddColumns og Sum. Feltnavnene som ble lagt til ved bruk av postområdet, overstyrer de samme navnene fra andre steder i appen. Når dette skjer, får du fremdeles tilgang til verdiene som er utenfor postområdet ved bruk av @-tvetydighetsoperatoren:

  • For å få tilgang til verdiene fra nestede postområder, bruker du @-operatoren med navnet på tabellen som behandles, ved bruk av dette mønsteret:
    Table[@FieldName]
  • Hvis du vil ha tilgang til globale verdier, som datakilder, samlinger og kontekstvariabler, bruker du mønsteret [@ObjectName] (uten en tabellangivelse).

Hvis du vil ha mer informasjon og eksempler, kan du se postområder.