Condividi tramite


Operatori e identificatori

Nota

Microsoft Power Fx è il nuovo nome per il linguaggio delle formule per le app canvas. Questi articoli sono in fase di elaborazione poiché estraiamo il linguaggio dalle app canvas, lo integriamo con altri prodotti di Microsoft Power Platform e lo rendiamo disponibile come open source. Inizia con la panoramica di Microsoft Power Fx per un'introduzione al linguaggio.

Gli operatori in Microsoft Power Fx verranno descritti più avanti. Alcuni di questi operatori dipendono dalla lingua dell'autore. Per altre informazioni, vedi le informazioni sulle app globali.

Simbolo Tipo Sintassi Descrizione
. Selezione di proprietà Slider1.Valore
Color.Red
Estrae una proprietà da una tabella, controllo o enumerazione. Per la compatibilità con le versioni precedenti, è 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 Filtro(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 Prezzo = 100 Uguale a
>   Prezzo > 100 Maggiore di
>=   Prezzo >= 100 Maggiore di o uguale a
<   Prezzo < 100 Minore di
<=   Prezzo <= 100 Minore di o uguale a
<>   Prezzo <> 100 Diverso da
& Operatore di concatenazione di stringhe "ciao" e " " e "mondo" Più stringhe appaiono come una stringa continua
&& o E Operatori logici Prezzo < 100 && Slider1.Value = 20
oppure Price < 100 And Slider1.Value = 20
Congiunzione logica, equivalente alla funzione And
|| o o   Prezzo < 100 || Slider1.Value = 20 o Prezzo < 100 O Slider1.Value = 20 Disgiunzione logica, equivalente alla funzione Or
. oppure Not   !(Prezzo < 100) o Non (Prezzo < 100) Negazione logica, equivalente alla funzione Not
esatto Operatori di appartenenza Galleria1. Selezionato esattamente in Elementi salvati Appartenenza a un raccolta o a una tabella
esatto   "Windows" esatto "Per visualizzare le finestre nel sistema operativo Windows..." Test di sottostringa (maiuscole/minuscole)
In   Gallery1.Selezionato in Elementi salvati Appartenenza a un raccolta o a una tabella
In   "La" in "La tastiera e il monitor..." Test di sottostringa (senza distinzione tra maiuscole/minuscole)
@ Disambiguazione operatore La mia tabella[@nomecampo] Risoluzione ambiguità di campo
@   [@MiaVariabile] Risoluzione ambiguità globale
,
[dipendente dalla lingua]
Separatore di elenco Se(X < 10, "Basso", "Buono")
{ X: 12, A: 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 Raccogli(T, A); Naviga(S1, "") Separata chiamate di funzioni nelle proprietà del comportamento. L'operatore di concatenazione dipende dalla lingua.
COME Come operatore Tutti i clienti come cliente Sostituisce ThisItem e ThisRecord nelle raccolte e nelle funzioni di ambito del record. COME è utile per fornire un nome migliore e specifico ed è particolarmente importante negli scenari nidificati.
Se stesso Io stesso operatore Auto-riempimento Accesso alle proprietà del controllo corrente
padre padre operatore Genitore.Riempi Accesso alle proprietà di un contenitore di controlli
Questo articolo Questo articolo operatore QuestoElemento.Nome Accesso ai campi di un controllo Gallery o form
QuestoRecord Questo articolo operatore QuestoRecord.Nome 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.

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(Inventario, "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(Inventario, "E" esatto 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
Questo articolo Galleria controllare
Modifica modulo controllare
Modulo di visualizzazione controllare
Il nome predefinito per il record corrente in un controllo raccolta o modulo.
QuestoRecord Per tutti, Filtro, Con, Somma e altro ambito di registrazione funzioni Il nome predefinito per il record corrente in ForAll e altre funzioni di ambito del record.
COME nome Galleria controllare
PerTutto, Filtro, Con, Somma e altre funzioni di ambito 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 Raccolta la proprietà Items è impostata sull'origine dati Employees (come l'entità Employees 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 viene utilizzato nelle funzioni che hanno un ambito 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 nell'uso diretto dei 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 è facoltativo 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 record per sostituire il nome predefinito ThisRecord. Possiamo applicare questo 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 utilizzato 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.
Io padre 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 operatore Alcuni controlli ospitano altri controlli, come ad esempio i controlli Screen e Gallery. Il controllo host dei controlli che si trovano nello stesso è denominato 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 padre 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 nomi di colonna di esempio che potresti rilevare 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 come univoco, che non cambia dopo essere stato creato, solitamente non ammette spazi o altri caratteri speciali e che 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 - Un nome di facile utilizzo e pensato per essere visualizzato 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 capire, Power Fx li suggerirà come scelte e non suggerirà 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 un'entità in Dataverse. Viene assegnato dal sistema un nome logico che puoi modificare solo durante la creazione del campo. Il risultato è simile al seguente:

Entità account con campo personalizzato aggiunto, che mostra un nome visualizzato

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, è possibile utilizzare anche 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 l'entità di sistema e nomi dei campi di 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 può apparire più di una volta nella stessa entità. 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 risoluzione delle ambiguità dei nomi vengono aggiunte in altre situazioni in cui si verificano conflitti di nomi, come nomi di entità, set di opzioni e altri elementi 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:
    Tabella[@NomeCampo]
  • 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.