Operatori e identificatori in Power Apps

Si applica a: App canvas App basate su modello

Alcuni di questi operatori dipendono dalla lingua dell'autore. Per ulteriori informazioni sul supporto della lingua nelle app canvas, vedi App globali.

Simbolo Tipo Esempio Descrizione
'...' Identificatore 'Nome account' Gli identificatori che contengono caratteri speciali, inclusi gli spazi, sono racchiusi tra virgolette singole
"..." Stringa di testo "Salve gente" Le stringhe di testo sono racchiuse tra virgolette
$"..." Interpolazione di stringa $"Dear {FirstName}," Formule incorporate in una stringa di testo
. Selezione di proprietà Slider1.Value
Color.Red
Acceleration.X
Estrae una proprietà da una tabella, controllo, segnale o enumerazione. Per la compatibilità con le versioni precedenti, è anche possibile usare !.
.
[dipendente dalla lingua]
Separatore decimale 1.23 Separatore tra le parti intere e frazionarie di un numero. Il carattere dipende dalla lingua.
( ) Parentesi Filter(T, A < 10)

(1 + 2) * 3
Impone l'ordine di precedenza e raggruppa le sottoespressioni in un'espressione più ampia
+ Operatori aritmetici 1 + 2 Addizione
-   2 - 1 Sottrazione e segno
*   2 * 3 Moltiplicazione
/   2 / 3 Divisione (vedi anche la funzione Mod)
^   2 ^ 3 Elevamento a potenza, equivalente alla funzione Power
%   20% Percentuale (equivalente a "* 1/100")
= Operatori di confronto Price = 100 Uguale a
>   Price > 100 Maggiore di
>=   Price >= 100 Maggiore di o uguale a
<   Price < 100 Minore di
<=   Price <= 100 Minore di o uguale a
<>   Price <> 100 Diverso da
& Operatore di concatenazione di stringhe "hello" & " " & "world" Più stringhe appaiono come una stringa continua
&& o And Operatori logici Price < 100 && Slider1.Value = 20
oppure Price < 100 And Slider1.Value = 20
Congiunzione logica, equivalente alla funzione And
|| oppure Or   Price < 100 || Slider1.Value = 20 or Price < 100 Or Slider1.Value = 20 Disgiunzione logica, equivalente alla funzione Or
. oppure Not   !(Price < 100) oppure Not (Price < 100) Negazione logica, equivalente alla funzione Not
exactin Operatori di appartenenza Gallery1.Selected exactin SavedItems Appartenenza a un raccolta o a una tabella
exactin   "Windows" exactin “To display windows in the Windows operating system...” Test di sottostringa (maiuscole/minuscole)
in   Gallery1.Selected in SavedItems Appartenenza a un raccolta o a una tabella
in   "The" in "The keyboard and the monitor..." Test di sottostringa (senza distinzione tra maiuscole/minuscole)
@ Operatore di risoluzione ambiguità MyTable[@fieldname] Risoluzione ambiguità di campo
@   [@MyVariable] Risoluzione ambiguità globale
,
[dipendente dalla lingua]
Separatore di elenco If( X < 10, "Low", "Good" )
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Separa:
  • argomenti nelle chiamate di funzione
  • campi in un record
  • record in una tabella
Il carattere dipende dalla lingua.
;
[dipendente dalla lingua]
Concatenamento di formule Collect(T, A); Navigate(S1, "") Separata chiamate di funzioni nelle proprietà del comportamento. L'operatore di concatenazione dipende dalla lingua.
Come Operatore As AllCustomers As Customer Sostituisce ThisItem e ThisRecord nelle raccolte e nelle funzioni di ambito del record. As è utile per fornire un nome migliore e specifico ed è particolarmente importante negli scenari annidati.
Me stesso Operatore Self Self.Fill Accesso alle proprietà del controllo corrente
Parent Operatore Parent Parent.Fill Accesso alle proprietà di un contenitore di controlli
ThisItem Operatore ThisItem ThisItem.FirstName Accesso ai campi di un controllo Gallery o form
ThisRecord Operatore ThisRecord ThisRecord.FirstName Accesso al record completo e ai singoli campi del record all'interno di ForAll, Sum, With e altre funzioni dell'ambito del record. Può essere sostituito dall'operatore As.

Nota

L'operatore @ può essere utilizzato anche per convalidare il tipo dell'oggetto record rispetto a un origine dati. Ad esempio, Collect(coll,Account@{'Account Number: 1111')

Operatori in ed exactin

Usa gli operatori in e exactin per trovare una stringa in un'origine dati, ad esempio una raccolta o una tabella importata. L'operatore in identifica le corrispondenze indipendentemente dalle maiuscole/minuscole e l'operatore exactin identifica le corrispondenze solo se l'uso delle maiuscole è uguale. Ecco un esempio:

  1. Crea o importa una raccolta denominata Inventory e visualizzala in una raccolta, come illustrato nella prima procedura relativa alla visualizzazione di immagini e testo in una raccolta.

  2. Imposta la proprietà Items della raccolta su questa formula:
    Filter(Inventory, "E" in ProductName)

    La raccolta include tutti i prodotti tranne Callisto perché il nome del prodotto è l'unico che non contiene la lettera specificata.

  3. Cambia la proprietà Items della raccolta su questa formula:
    Filter(Inventory, "E" exactin ProductName)

    La raccolta riporta solo Europa perché solo questo nome contiene la lettera specificata in base all'uso di maiuscole/minuscole specificato.

Operatori ThisItem, ThisRecord e As

Alcuni controlli e funzioni applicano le formule ai singoli record di una tabella. Per fare riferimento al singolo record in una formula, utilizza una delle seguenti opzioni:

Operatore Si applica a Descrizione
ThisItem Controllo Gallery
Controllo Edit form
Controllo Display form
Il nome predefinito per il record corrente in un controllo raccolta o modulo.
ThisRecord ForAll, Filter, With, Sum e altre funzioni di ambito del record Il nome predefinito per il record corrente in ForAll e altre funzioni di ambito del record.
Asname Controllo Gallery
ForAll, Filter, With, Sum e altre funzioni di ambito del record
Definisce a nome per il record corrente, sostituendo i predefiniti ThisItem o ThisRecord. Usa As per rendere le formule più facili da capire e risolvere l'ambiguità durante la nidificazione.

Operatore ThisItem

Ad esempio, nel seguente controllo Gallery, la proprietà Items è impostata sull'origine dati Dipendenti (come la tabella Dipendenti inclusa con l'esempio Northwind Traders):

Employees

Dipendenti mostrati in una raccolta.

Il primo elemento nella raccolta è un modello che viene replicato per ogni dipendente. Nel modello la formula per l'immagine usa ThisItem per fare riferimento all'elemento corrente:

ThisItem.Picture

Formula per l'immagine di un dipendente.

Allo stesso modo, anche la formula per il nome usa ThisItem:

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

Formula per il nome e il cognome di un dipendente.

Operatore ThisRecord

ThisRecord è usato nelle funzioni che hanno un ambito del record. Ad esempio, possiamo usare la funzione Filter con la proprietà Items della raccolta per mostrare solo i nomi che iniziano con M:

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

Filtraggio dei dipendenti in base al nome, utilizzando ThisRecord.

ThisRecord è facoltativo e implicito utilizzando direttamente i campi, ad esempio, in questo caso, avremmo potuto scrivere:

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

Sebbene facoltativo, l'utilizzo di ThisRecord può rendere le formule più facili da capire e può essere richiesto in situazioni ambigue in cui un nome di campo può anche essere un nome di relazione. ThisRecord è opzionale mentre ThisItem è sempre obbligatorio.

Usa ThisRecord per fare riferimento all'intero record con Patch, Collect e altre funzioni dell'ambito del record. Ad esempio, la seguente formula imposta lo stato di tutti i dipendenti inattivi su attivo:

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

Operatore As

Utilizza l'operatore As per denominare un record in una raccolta o una funzione di ambito del record, ignorando il valore predefinito ThisItem o ThisRecord. L'assegnazione di un nome al record può semplificare la comprensione delle formule e può essere necessario in situazioni nidificate per accedere ai record in altri ambiti.

Ad esempio, puoi modificare la proprietà Items della raccolta per utilizzare As per identificare che stiamo lavorando con un dipendente:

Employees As Employee

Raccolta di dipendenti, utilizzando l'operatore As.

Le formule per l'immagine e il nome vengono modificate per utilizzare questo nome per il record corrente:

Employee.Picture

Immagine di un dipendente che utilizza il nome del dipendente impostato con l'operatore As.

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

Nome e cognome di un dipendente utilizzando il nome del dipendente impostato con l'operatore As.

As può essere utilizzato anche con le funzioni di ambito del record per sostituire il nome predefinito ThisRecord. Possiamo applicarlo al nostro esempio precedente per chiarire il record con cui stiamo lavorando:

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

Quando si annidano raccolte e funzioni di ambito del record ThisItem e ThisRecord fanno sempre riferimento all'ambito più interno, lasciando i record negli ambiti esterni non disponibili. Usa As per rendere disponibili tutti gli ambiti del record assegnando a ciascuno un nome univoco.

Ad esempio, questa formula produce un modello scacchiera come stringa di testo nidificando due funzioni 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
)

L'impostazione della proprietà Text di un controllo Label su questa formula visualizza:

Testo della scacchiera mostrato in un controllo label.

Spieghiamo ciò che sta accadendo qui:

  • Iniziamo scorrendo una tabella senza nome di 8 record numerati dalla funzione Sequence. Questo ciclo è per ogni riga della scheda, che viene comunemente chiamata rank e quindi gli diamo questo nome.
  • Per ogni riga, scorriamo un'altra tabella senza nome di 8 colonne e diamo il nome comune File.
  • Se Rank.Value + File.Value è un numero dispari, il quadrato ottiene una X, altrimenti un punto. Questa parte della formula fa riferimento a entrambi i cicli ForAll, reso possibile utilizzando l'operatore As.
  • Concat viene usato due volte, prima per assemblare le colonne e poi le righe, con un Char (10) inserito per creare una nuova riga.

Un esempio simile è possibile con i controlli Gallery nidificati invece delle funzioni ForAll. Cominciamo con la raccolta verticale per rank. Questo controllo gallery avrà un formula Items di:

Sequence(8) as Rank

Illustrazione della raccolta esterna che fornisce l'iterazione di rank.

All'interno di questa raccolta, inseriremo una raccolta orizzontale per File che verrà replicato per ogni rank, con una proprietà Items di:

Sequence(8) as File

Illustrazione della raccolta interna che fornisce l'iterazione di file.

E infine, all'interno di questa raccolta, aggiungeremo un controllo Label che verrà replicato per ciascun File e Rank. Lo ridimensioneremo per riempire l'intero spazio e useremo la proprietà Fill per fornire il colore con questa formula:

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

Controllo Label all'interno delle due raccolte che fornisce i colori alternati per la scacchiera.

Operatori Self e Parent

Esistono tre modi per fare riferimento a un controllo e alle relative proprietà in una formula:

Metodo Descrizione
Per nome di controllo È possibile fare riferimento a qualsiasi controllo in base al nome da qualsiasi posizione all'interno dell'app.

Ad esempio, Label1.Fill fa riferimento alla proprietà di riempimento del controllo il cui nome è Label1.
Operatore Self Spesso è conveniente fare riferimento a un'altra proprietà dello stesso controllo quando si scrive una formula. Anziché usare un riferimento assoluto per nome, è più facile e portabile usare un riferimento relativo a un self. L'operatore Self fornisce un accesso agevole al controllo corrente.

Ad esempio, Self.Fill fa riferimento al colore di riempimento del controllo corrente.
Operatore Parent Alcuni controlli ospitano altri controlli, come ad esempio i controlli Screen e Gallery. Il controllo ospite dei controlli in esso contenuti viene definito controllo parent. Come l'operatore Self, l'operatore Parent fornisce un semplice riferimento relativo al controllo del contenitore.

Ad esempio, Parent.Fill fa riferimento alla proprietà di riempimento del controllo che è il contenitore del controllo corrente.

Self e Parent sono operatori e non proprietà dei controlli stessi. Il riferimento a Parent.Parent, Self.Parent o Parent.Self non è supportato.

Nomi di identificatore

I nomi di variabili, origini dati, colonne e altri oggetti possono contenere qualsiasi Unicode.

Usa le virgolette singole per racchiudere un nome che contiene uno spazio o un altro carattere speciale.
Utilizza due virgolette singole per rappresentare una singola virgoletta nel nome. I nomi che non contengono caratteri speciali non richiedono virgolette singole.

Ecco alcuni esempi di nomi di colonne che potresti incontrare in una tabella e come sono rappresentati in una formula:

Nome di colonna in un database Riferimento alla colonna in una formula
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Nome con spazi 'Name with spaces'
Nome con virgolette "doppie" 'Name with "double" quotes'
Nome con virgolette "singole" 'Name with ''single'' quotes'
Nome con un segno @ 'Name with an @ at sign'

Le virgolette doppie sono usate per designare le stringhe di testo.

Nomi visualizzati e nomi logici

Alcune origini dati come SharePoint e Microsoft Dataverse hanno due nomi diversi per fare riferimento alla stessa tabella o colonna di dati:

  • Nome logico - Un nome che è garantito per essere univoco, non cambia dopo essere stato creato, di solito non consente spazi o altri caratteri speciali e non è localizzato in lingue diverse. Di conseguenza, il nome può essere criptico. Questi nomi sono utilizzati da sviluppatori professionisti. Per esempio, cra3a_customfield. Questo nome può anche essere definito come nome dello schema o solo nome.

  • Nome visualizzato - Nome facile da usare e destinato a essere visto dagli utenti finali. Questo nome potrebbe non essere univoco, potrebbe cambiare nel tempo, contenere spazi e qualsiasi carattere Unicode e potrebbe essere localizzato in diverse lingue. Corrispondente all'esempio precedente, il nome visualizzato potrebbe essere Campo personalizzato con lo spazio tra le parole.

Poiché i nomi visualizzati sono più facili da comprendere, le app canvas li suggeriscono come scelte e non suggeriscono i nomi logici. Sebbene i nomi logici non siano suggeriti, possono comunque essere utilizzati se digitati indirettamente.

Ad esempio, immagina di aver aggiunto un Campo personalizzato a una tabella in Dataverse. Viene assegnato dal sistema un nome logico che puoi modificare solo durante la creazione del campo. Il risultato è simile al seguente:

Tabella dei conti con campo personalizzato aggiunto, che mostra un nome visualizzato di

Quando si crea un riferimento a un campo di Account, il suggerimento verrà creato per usare 'Custom Field' poiché questo è il nome visualizzato. Le virgolette singole devono essere utilizzate perché questo nome contiene uno spazio:

Barra della formula di Studio che mostra suggerimenti per i nomi dei campi di Account con il nome visualizzato 'Custom Field' evidenziato.

Dopo aver selezionato il suggerimento, nella barra della formula viene visualizzato 'Custom Field' e vengono recuperati i dati:

Barra della formula di Studio che mostra l'uso del nome visualizzato 'Custom Field' per il campo.

Sebbene non sia suggerito, possiamo anche usare il nome logico per questo campo. Ciò comporterà il recupero degli stessi dati. Non sono richieste virgolette singole poiché questo nome non contiene spazi o caratteri speciali:

Barra della formula di Studio che mostra l'uso del nome logico cr5e3_customfield per il campo.

Dietro le quinte, viene mantenuta una mappatura tra i nomi visualizzati nelle formule e i nomi logici sottostanti. Poiché i nomi logici devono essere utilizzati per interagire con l'origine dati, questa mappatura viene utilizzata per convertire automaticamente dall'attuale nome visualizzato al nome logico e questo è ciò che viene visualizzato nel traffico di rete. Questo mapping viene anche utilizzato per riconvertire in nomi logici per passare a nuovi nomi visualizzati, ad esempio, se un nome visualizzato cambia o un produttore in una lingua diversa modifica l'app.

Nota

I nomi logici non vengono tradotti quando si sposta un'app tra ambienti. Per la tabella di sistema e i nomi di campo Dataverse, questo non dovrebbe essere un problema poiché i nomi logici sono coerenti tra gli ambienti. Ma qualsiasi campo personalizzato, come ad esempio cra3a_customfield in questo esempio, può avere un prefisso di ambiente diverso (cra3a in questo caso). I nomi visualizzati sono preferiti in quanto possono essere confrontati con i nomi visualizzati nel nuovo ambiente.

Risoluzione ambiguità di nome

Poiché i nomi visualizzati non sono univoci, lo stesso nome visualizzato potrebbe apparire più di una volta nella stessa tabella. Quando ciò accade, il nome logico verrà aggiunto alla fine del nome visualizzato tra parentesi per uno o più nomi in conflitto. Basandoci sull'esempio sopra, se esistesse un secondo campo con lo stesso nome visualizzato Custom Field con un nome logico di cra3a_customfieldalt, i suggerimenti mostrerebbero:

Barra della formula di Studio che mostra l'uso del nome logico cr5e3_customfieldalt per chiarire le due versioni di

Le stringhe di disambiguazione dei nomi vengono aggiunte in altre situazioni in cui si verificano conflitti di nomi, come i nomi di tabelle, scelte e altri elementi di Dataverse.

Operatore di risoluzione ambiguità

Alcune funzioni creano scope di record per accedere ai campi della tabella durante l'elaborazione di ogni record, ad esempio Filter, AddColumns e Sum. I nomi di campo aggiunti con l'ambito di record eseguono l'override degli stessi nomi da qualsiasi altra posizione nell'app. In questo caso, puoi comunque accedere ai valori dall'esterno dell'ambito di record con l'operatore di risoluzione ambiguità @:

  • Per accedere ai valori da ambiti dei record nidificati, usa l'operatore @ con il nome della tabella su cui si opera usando il pattern seguente:
    Table[@FieldName]
  • Per accedere ai valori globali, ad esempio origini dati, raccolte e variabili di contesto, usa il pattern [@ObjectName] (senza una definizione di tabella).

Per altre informazioni ed esempi, vedi gli ambiti dei record.