Operatorer och identifierare i Power Apps

Gäller appar: Arbetsyteappar Modellbaserade program

En del av de här operatorerna är beroende av författarens språk. Mer information om språksupport i arbetsyteappar finns i Globala program.

Symbol Type Exempel Description
'...' Identifierare Kontonamn Identifierare som innehåller specialtecken, inklusive blanksteg, omges av enkla offerter
"..." Textsträng "Hello, World" Textsträngar omges av dubbla citattecken
$"..." Stränginterpolering $"Dear {FirstName}," Formeln är inbäddad i en textsträng
. Egenskapsväljaren Slider1.Value
Color.Red
Acceleration.X
Extraherar en egenskap från en tabell, kontroll, signal eller uppräkning. För bakåtkompatibilitet kan ! också användas.
.
[språkberoende]
Decimaltecken 1,23 Avgränsare mellan heltal och fraktioner av ett tal. Tecknet beror på språket.
( ) Parenteser Filter(T, A < 10)

(1 + 2) * 3
Framtvingar prioritetsordning och grupperar underuttryck i ett större uttryck
+ Aritmetiska operatorer 1 + 2 Tillägg
-   2 – 1 Subtraktion och tecken
*   2 * 3 Multiplikation
/   2 / 3 Division (Se även Mod-funktionen)
^   2 ^ 3 Exponentiering som motsvarar Power-funktionen
%   20 % Procentsats (motsvarar "* 1/100")
= Jämförelseoperatorer Pris = 100 Lika med
>   Pris > 100 Större än
>=   Pris >= 100 Större än eller lika med
<   Pris < 100 Mindre än
<=   Pris <= 100 Mindre än eller lika med
<>   Pris <> 100 Inte lika med
& Operator för strängsammanfogning "hello" & " " & "world" Får flera strängar att se sammanhängande ut
&& eller And Logiska operatorer Price < 100 && Slider1.Value = 20
eller Price < 100 And Slider1.Value = 20
Logisk konjunktion som motsvarar funktionen And
|| eller Or   Price < 100 || Slider1.Value = 20 eller Price < 100 Or Slider1.Value = 20 Logisk disjunktion som motsvarar funktionen Or
! eller Not   ! (Pris < 100) eller Not (pris < 100) Logisk negation som motsvarar funktionen Not
exactin Medlemskapsoperatorer Gallery1.selected exactin SavedItems Som tillhör en samling eller en tabell
exactin   "Windows" exactin “För att visa fönster i Windows-operativsystemet...” Delsträngstest (skiftlägeskänsligt)
i   Gallery1.Selected i SavedItems Som tillhör en samling eller en tabell
i   "The" i "Tangentbordet och bildskärmen..." Delsträngstest (skiftlägesokänsligt)
@ Disambigueringsoperator MyTable[@fieldname] Fältdisambiguering
@   [@MyVariable] Global disambiguering
,
[språkberoende]
Listavgränsare If( X < 10, "Low", "Good" )
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Avgränsar:
  • argument i funktionsanrop
  • fält i en post
  • poster i en tabell
Detta tecken beror på språket.
;
[språkberoende]
Formellänkning Collect(T, A); Navigate(S1, "") Separata funktionsanrop i beteendeegenskaper. Länkningsoperatorn beror på språket.
Som Som operatör AllCustomers som kund Åsidosätter ThisItem och ThisRecord i galleri- och postomfattningsfuktioner. Som är användbart för att ge ett bättre, specifikt namn och är särskilt viktigt i de kapslade scenarierna.
Själv Self-operator Self.Fill Ger åtkomst till egenskaperna för den aktuella kontrollen
Överordnad Överordnad operator Parent.Fill Åtkomst till egenskaperna för en kontrollcontainer
ThisItem ThisItem-operator ThisItem.FirstName Åtkomst till fälten för ett galleri eller en Form-kontrollen
ThisRecord ThisRecord-operator ThisRecord.FirstName Åtkomst till hela posten och enskilda fält i posten i ForAll, Sum, With och andra postomfattningsfunktioner. Kan åsidosättas med Som operatör.

Kommentar

Operatorn @ kan även användas för att verifiera postobjektets typ mot en datakälla. Till exempel: Collect(coll,Account@{'Account Number: 1111')

operatorerna in och exactin

Använd operatörerna in och exactin för att hitta en sträng i en datakälla, som en samling eller en importerad tabell. In-operatorn identifierar matchningar oavsett skiftläge och exactin-operatorn identifierar bara matchningar om skiftläget är detsamma. Här är ett exempel:

  1. Skapa eller importera en samling med namnet Lager och visa den i ett galleri, enligt beskrivningen i den första proceduren i Visa bilder och text i ett galleri.

  2. Ställ in galleriets egenskap Items på följande formel:
    Filter(Inventory, "E" in ProductName)

    Galleriet visar alla produkter utom Callisto, eftersom namnet på den här produkten är den enda som inte innehåller den angivna bokstaven.

  3. Ändra galleriets egenskap Items till den här formeln:
    Filter(Inventory, "E" exactin ProductName)

    Galleriet visar bara Europa, eftersom det bara är det namnet som innehåller bokstaven som du angav i det skiftläget du angav.

ThisItem, ThisRecord och Som operatörer

Några kontroller och funktioner använder formler för enskilda poster i en tabell. Använd något av följande om du vill referera till en enskild post i en formel:

Operator Gäller för Beskrivning
ThisItem Gallery-kontroll
Edit form-kontroll
Display form-kontroll
Standardnamnet för den aktuella posten i kontrollen Gallery eller Form.
ThisRecord ForAll, Filter, With, Sum och other postomfattnings-funktioner Standardnamnet för den aktuella posten i ForAll och andra postomfattningsfunktioner.
Somnamn Gallery-kontroll
ForAll, Filter, With, Sum och andra postomfattningsfunktioner
Definierar ett namn för den aktuella posten, vilket ersätter standardnamnet ThisItem eller ThisRecord. Använd Som för att göra formler lättare att förstå och åtgärda tvetydighet när du kapslar.

ThisItem-operator

Till exempel i följande kontroll för Gallery anges egenskapen Items till datakällan Anställda (t.ex. tabellen Anställda som inkluderas med Northwind Traders exemplet):

Employees

Anställda visas i ett galleri.

Det första objektet i galleriet är en mall som replikeras för varje medarbetare. I mallen använder formeln för bilden ThisItem för att referera till det aktuella objektet:

ThisItem.Picture

Formel för bilden av en anställd.

På samma sätt använder formeln för namnet även ThisItem:

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

Formel för för- och efternamn på en anställd.

ThisRecord-operator

ThisRecord används i funktioner som har en postomfattning. Vi kan t.ex. använda funktionen Filter med galleriets egenskap Items för att endast visa förnamn som börjar på M:

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

Filtrera de anställda baserat på namn med ThisRecord.

ThisRecord är valfri och underförstådd genom att använda fälten direkt, t.ex. i det här fallet kunde vi ha skrivit:

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

Även om det är valfritt kan användning av ThisRecord göra formler lättare att förstå och kan krävas i tvetydiga situationer där ett fältnamn också kan vara ett relationsnamn. ThisRecord är valfritt medan ThisItem alltid krävs.

Använd ThisRecord för att referera till hela posten med Patch, Collect och andra postomfattningsfunktioner. Följande formel anger till exempel statusen för alla inaktiva medarbetare till aktiv:

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

Som operator

Använd Som operator om du vill namnge en post i en galleri- eller postomfattningsfunktion och åsidosätta standardnamnet ThisItem eller ThisRecord. Att namnge posten kan göra dina formler lättare att förstå och kan krävas i kapslade situationer för att få tillgång till poster i andra omfattningar.

Du kan t.ex. ändra egenskapen Items i vårt galleri om du vill använda Som för att identifiera att vi arbetar med en medarbetare:

Employees As Employee

Galleri med anställda, som använder As-operatören.

Formlerna för bilden och namnet justeras för att använda det här namnet för den aktuella posten:

Employee.Picture

Bild av en anställd som använder namnet Anställd med As-operatören.

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

För- och efternamn på en anställd som använder namnet Anställd med As-operatören.

As kan också användas med postomfattningsfunktioner för att ersätta standardnamnet ThisRecord. Vi kan använda det här exemplet för att förtydliga posten som vi arbetar med:

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

När du kapslar in gallerier och postomfattningsfunktioner refererar ThisItem och ThisRecord alltid till den innersta omfattningen lämnar poster i yttre omfattningar otillgängliga. Använd Som för att tillgängliggöra alla postomfattningar genom att ge alla ett unikt namn.

Med den här formeln skapas till exempel ett schackmönster som en textsträng genom att kapsla två ForAll-funktioner:

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
)

Att ange en Label-kontrolls egenskap Text till denna formel visar:

Schackbrädetext visas i en label-kontroll.

Låt oss packa upp vad som händer här:

  • Vi börjar med att iterera en namnlös tabell med åtta numrerade poster från funktionen Sequence. Denna loop gäller för varje rad på brädet, som vanligtvis kallas för rang, så vi ger den detta namn.
  • För varje rad itererar vi en annan namnlös tabell med åtta kolumner, och vi ger det allmänna namnet Fil.
  • Om Rank.Value + File.Value är ett udda tal, får fyrkanten ett X, annars en punkt. Den här delen av formeln refererar till båda ForAll-loopar, vilket möjliggörs genom att använda operatorn Som.
  • Concat används två gånger, först för att sätta samman kolumnerna och sedan raderna med ett Char(10) för att skapa en ny rad.

Ett liknande exempel är möjligt med kapslade Gallery-kontroller i stället för ForAll-funktioner. Vi börjar med det vertikala galleriet för Rang. Den här gallerikontrollen har följande objekt-formel:

Sequence(8) as Rank

Illustration av det yttre galleriet som ger Rank-iteration.

I det här galleriet placerar vi ett horisontellt galleri för filen, som replikeras för varje rang, med en Itemsegenskap som är:

Sequence(8) as File

Illustration av det inre galleriet som tillhandahåller filiterationen.

I det här galleriet lägger vi slutligen till en Label-kontroll som ska replikeras för varje fil och varje rang. Vi gör så att det fyller hela utrymmet och använder egenskapen Fill för att ange färgen med formeln:

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

Label-kontroll inom de två gallerierna som ger schackbrädet alternerande färger.

Self- och Parent-operatorer

Det finns tre sätt att referera till en kontroll och dess egenskaper i en formel:

Metod Beskrivning
Efter kontrollnamn Du kan referera till alla kontroller med namn var som helst ifrån inom programmet.

Exempel: Label1.Fill refererar till egenskapen Fill för den kontroll vars namn är Label1.
Self-operator Det är ofta praktiskt att referera till en annan egenskap i samma kontroll när du skriver en formel. I stället för att använda en absolut referens efter namn är det enklare och smidigare att använda en relativ referens till en self. Self-operator ger enkel åtkomst till den aktuella kontrollen.

Till exempel refererar Self.Fill till den aktuella kontrollens fyllningsfärg.
Parent-operator Vissa kontroller är värdar för andra kontroller, t.ex. kontrollerna Screen och Gallery. Värdkontrollen för kontrollerna inom den kallas för överordnad. På samma sätt som Self-operator, ger Parent-operator en enkel relativ referens till Container-kontroll.

Till exempel refererar Parent.Fill till egenskapen Fill i den kontroll som är behållare för den aktuella kontrollen..

Self och Parent är operatorer och inte egenskaper för själva kontrollerna. Referera till Parent.Parent, Self.Parent eller Parent.Self stöds inte.

Namn på identifierare

Namnen på variabler, datakällor, kolumner och andra objekt kan innehålla Unicode.

Använd enkla citattecken runt ett namn som innehåller blanksteg eller specialtecken.
Använd två enda citat tillsammans för att representera en enda offert i namnet. För namn som inte innehåller specialtecken krävs inga enskilda offerter.

Här är några exempel på kolumnnamn som kan uppstå i en tabell och hur de representeras i en formel:

Kolumnnamn i databas Kolumnreferens i en formel
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Namn med blanksteg 'Name with spaces'
Namn med dubbla citattecken 'Name with "double" quotes'
Namn med enkla citattecken 'Name with ''single'' quotes'
Namn med @ at-tecken 'Name with an @ at sign'

Dubbla citattecken används för att Ange textsträngar.

Visningsnamn och logiska namn

Vissa datakällor, t.ex. SharePoint och Microsoft Dataverse har två olika namn som refererar till samma tabell eller datakolumn:

  • Logiskt namn – Ett namn som garanterat är unikt ändras inte efter att det har skapats, som vanligtvis inte tillåter blanksteg eller andra specialtecken, och som inte är lokaliserat till olika språk. På grund av detta kan namnet vara kryptiskt. Dessa namn används av professionella utvecklare. Till exempel cra3a_customfield. Namnet kan också kallas schemanamn eller endast namn.

  • Visningsnamn – Ett namn som är användarvänligt och avsett att visas av slutanvändare. Det här namnet kanske inte är unikt, kan ändras över tid, kan innehålla blanksteg och eventuella Unicode-tecken och kan lokaliseras till olika språk. Motsvarande exemplet ovan kan visningsnamnet vara ett anpassat fält med blanksteg mellan orden.

Eftersom visningsnamn är lättare att förstå kan du välja om du vill att arbetsyteappar ska föreslå alternativ och inte föreslå logiska namn. Logiska namn föreslås inte, men de kan fortfarande användas om de typas indirekt.

Anta till exempel att du har lagt till ett anpassat fält i en tabell i Dataverse. Ett logiskt namn tilldelas av systemet som du endast kan ändra när du skapar fältet. Resultatet skulle se ut ungefär så här:

Kontotabell med anpassat fält tillagt, visar ett visningsnamn

När du redigerar en referens till ett fält med konton kommer förslaget att användas som "anpassat fält", eftersom det är visningsnamnet. Enskilda offerter måste användas eftersom följande namn har ett blanksteg:

Studioformelfält som visar förslag på fältnamn på konton med visningsnamnet 'Anpassat fält' markerat.

När du har valt förslaget visas "anpassat fält" i formelfältet och data hämtas:

Studioformelfält som visar visningsnamnet 'Anpassat fält' för fältet.

Även om det inte föreslås kan vi också använda det logiska namnet för det här fältet. Detta resulterar i att samma data hämtas. Enskilda offerter krävs inte eftersom det här namnet inte innehåller blanksteg eller specialtecken:

Studioformelfält som visar användningen av det logiska namnet cr5e3_customfield för fältet.

I bakgrunden upprätthålls en mappning mellan de visningsnamn som visas i formler och de underliggande logiska namnen. Eftersom logiska namn måste användas för att interagera med datakällan används den här mappningen för att konvertera från det aktuella visningsnamnet till det logiska namnet automatiskt och det är det som visas i nätverkstrafiken. Mappningen används också för att konvertera tillbaka till logiska namn för att växla till nya visningsnamn, till exempel om ett visningsnamn ändras eller en tillverkare på ett annat språk redigerar programmet.

Kommentar

Logiska namn översätts inte när ett program flyttas mellan miljöer. För Dataverse systemtabell- och fältnamn bör detta inte vara några problem eftersom logiska namn är konsekventa i alla miljöer. Alla anpassade fält, t.ex. cra3a_customfield i det här exemplet ovan, kan dock ha olika miljöprefix (cra3a i det här fallet). Visningsnamn är lämpliga eftersom de kan matchas mot visningsnamn i den nya miljön.

Namndisambiguering

Eftersom visningsnamnen inte är unika kan samma visningsnamn visas mer än en gång i samma tabell. När detta inträffar läggs det logiska namnet till i slutet av visningsnamn inom parentes för ett av namnen som står i konflikt. Bygger på exemplet ovan, om det fanns ett andra fält med samma visningsnamn av anpassat fält med ett logiskt namn på cra3a_customfieldalt då visas förslagen:

Studioformelfält som visar användningen av det logiska namnet cr5e3_customfieldalt för att tydliggöra de två versionerna av

Tvetydiga namnsträngar läggs till i andra situationer där namnkonflikter uppstår, till exempel namnen på tabell, alternativ och andra Dataverse objekt.

Disambigueringsoperator

Vissa funktioner skapar postområden för att få åtkomst till fälten i tabellen när posterna bearbetas, t.ex. Filter, AddColumns och Sum. Fältnamn som lagts till med postområdet åsidosätter samma namn från andra ställen i programmet. När det händer så kan du fortfarande komma åt värden från utanför omfattningsposten med disambigueringsoperatorn @:

  • Om du vill komma åt värden från kapslade postområden använder du operatorn @ med namnet på den tabell som bearbetas, och med hjälp av följande mönster:
    Table[@FieldName]
  • Om du vill komma åt globala värden, som datakällor, samlingar och kontextvariabler, använder du mönstret [@ObjectName] (utan tabellbeteckning).

Mer information och exempel finns i postomfång.