Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Dynamic è un tipo di dati in Power Fx che può contenere qualsiasi struttura di dati, complessa o semplice. Non può essere usato direttamente e convertito in un altro tipo di dati in fase di esecuzione, in modo esplicito o implicito. È possibile accedere ai campi dei record in un valore dinamico usando la notazione del punto e l'esistenza di campi viene verificata solo in fase di esecuzione.
Esistono due modi per creare un valore dinamico :
- Uso della funzione ParseJSON.
- Uso di un connettore che restituisce un tipo "dinamico".
Annotazioni
Dynamic era precedentemente denominato UntypedObject. Solo il nome è cambiato, non vi è alcuna modifica nella semantica. L'unica posizione in cui il nome sarebbe apparso in una formula è nelle versioni sperimentali di Funzioni definite dall'utente e tipi definiti dall'utente.
Tipi semplici
Il valore di una variabile contenente un valore Dinamico non può essere usato direttamente. È sempre necessario digitarlo correttamente usando il costruttore di tipo corrispondente o convertendolo in un tipo specifico con le funzioni AsType e ParseJSON .
Negli esempi seguenti viene convertito il valore di una variabile dinamica denominata DynValue.
Text(DynValue)
Value(DynValue)
Nella tabella seguente sono elencati i tipi di dati e le funzioni corrispondenti per convertire Dynamic in tale tipo di dati.
| Tipo di dati | Funzione | Descrizione |
|---|---|---|
| Boolean | Boolean() | Quando si converte Dynamic in Boolean, il valore sottostante deve rappresentare un valore booleano o un tipo che può essere convertito automaticamente (ad esempio una stringa "true"). |
| Color | ColorValue() o RGBA() | I colori possono essere rappresentati nella notazione di definizione del colore di foglio di stile CSS come stringa o come singoli componenti RGBA. La proprietà Dynamic può essere convertita direttamente da una stringa di definizione di colore CSS (Cascading Style Sheet) usando la funzione ColorValue() o da singoli numeri RGBA a colori usando la funzione RGBA(). |
| Valuta, Numero | Value() | Quando si converte Dynamic in Number, il valore sottostante deve rappresentare un numero o un tipo che può essere convertito automaticamente (ad esempio una stringa "123.456"). |
| Data, DateTime, Ora | DateValue(), TimeValue() o DateTimeValue() | Data, ora e datetime possono essere convertiti direttamente da Dynamic al rispettivo tipo, se rappresentati in formato ISO 8601. Gli altri formati devono essere converti prima in testo usando la funzione Text() e quindi passati alla funzione DateValue(), TimeValue() o DateTimeValue() che per impostazione predefinita utilizzerà la lingua delle impostazioni dell'utente corrente per interpretare la data e l'ora. |
| GUID | GUID() | Un valore dinamico può essere convertito direttamente in GUID se l'oggetto sottostante rappresenta un GUID o se rappresenta una stringa. |
| Collegamento ipertestuale, Immagine, Elementi multimediali | Text() | Questi tipi di dati sono tipi di dati di testo e possono essere convertiti in testo e quindi utilizzati in Power Fx. |
| Scelta, Opzione Due | Switch() o If() | Le scelte e le opzioni Due sono presentate come stringhe localizzate in Power Fx. Le scelte sono supportate da un numero e le opzioni Due come booleani. Non c'è conversione diretta da booleano, numero o stringa in una scelta o in una opzione due, ma le funzioni Switch() o If() possono essere utilizzate sul valore booleano, di testo o numerico per assegnare correttamente il valore di scelta o opzione due. |
| Registra | N/D | Non esiste alcuna conversione diretta da Dynamic a una struttura di record, ma è possibile recuperare singoli campi da Dynamic per creare un nuovo record. |
| Riferimento del record | N/D | I riferimenti ai record sono univoci per le origini dati e non hanno una rappresentazione significativa in Dynamic. |
| Table | Table() e ForAll() | Un oggetto Dynamic può rappresentare una matrice, che può essere convertita in una tabella. Questi oggetti possono essere matrici di record o matrici di valori che sono effettivamente tabelle a colonna singola. ForAll() può essere utilizzato per creare una tabella con record completamente tipizzati. Esamina gli esempi più avanti in questo articolo per ulteriori informazioni. |
| Testo | Text() | Il testo può essere convertito direttamente. Se un valore Dinamico rappresenta un numero, è necessario convertire il valore Dinamico in numero prima di eseguire la conversione in testo. |
Tipi di record
È possibile accedere ai campi di una variabile che rappresenta un record dinamico usando la normale notazione punto usata per i record. Tuttavia, l'esistenza dei campi non verrà verificata fino al runtime. Di conseguenza, non c'è nemmeno intellisense disponibile. Se un campo non esiste o ha un sottostante valore nullo, accedendovi risulterà un valore Blank().
Ogni campo nel record è anche di tipo Dynamic e deve essere digitato correttamente. Il campo può essere un record dinamico di tipo semplice. Nel caso si tratti di un record, puoi concatenare la notazione punto. Se un campo nella catena non esiste, Blank() viene restituito.
Negli esempi seguenti vengono usati campi di una variabile dinamica denominata DynRecord.
Text(DynRecord.StringField)
Value(DynRecord.Field.ChildField)
Nel caso in cui il nome di un campo sia costituito da un nome identificativo non valido, ad esempio quando i nomi dei campi iniziano con un numero o contengono caratteri non validi come un trattino, puoi inserire i nomi dei campi tra virgolette singole:
dynamic.'01'
dynamic.'my-field'
Accesso dinamico alle colonne
A volte i nomi delle colonne in un record sono dinamici. Usa la funzione ColumnNames per determinare quali nomi di colonna sono disponibili in un record, quindi usa la funzione Colonna per recuperare il valore di una colonna denominata.
Gli oggetti prestazione
LettersUsed = ParseJSON( "{ ""d"": 2, ""p"": 3 }" );
Concat( ColumnNames( LettersUsed ) As Names, Names.Value, ", " )
// returns "d, p"
Sum( ForAll( ColumnNames( LettersUsed ) As Names, Column( LettersUsed, Names.Value ) ), Value )
// returns 5
Matrici
Una variabile dinamica può contenere una matrice. Anche se la matrice può essere una matrice di record o una matrice di tipi semplici, la conversione della matrice dinamica in una tabella tramite la funzione Table() comporterà sempre una tabella a colonna singola di Dynamic. Funzioni come ForAll() e Index() non richiedono di creare prima un file Table() e di conseguenza non è necessario utilizzare il campo a colonna singola Value,
Ad esempio, per ottenere il secondo numero in una matrice di valori numerici dinamici ( [1, 2, 3] ), è possibile usare la formula seguente per recuperare la seconda riga della tabella e convertire la colonna in un numero:
Value( Index( UOArray, 2 ) )
Se dynamic è stato convertito in un oggetto Table(), la seconda riga della tabella a colonna singola risultante è una Value colonna contenente Dynamic:
Value( Index( Table( UOArray ), 2 ).Value )
Per un array di record che hanno una colonna di testo chiamata Field, si applica la stessa logica. È possibile accedere direttamente a Dynamic oppure se si usa la funzione Table() verrà restituita una tabella a colonna singola di Dynamic.
La Field colonna può essere accessibile direttamente dalla funzione Dynamic restituita dalla funzione Index().
Text( Index( UORecordArray, 2 ).Field )
Quando si usa la funzione Table(), recuperare prima di tutto la colonna a colonna Value singola per ottenere Dynamic, quindi accedere alla Field colonna:
Text( Index( Table( UORecordArray ), 2 ).Value.Field )
Per convertire un array di record in una tabella tipizzata, puoi usare la funzione ForAll() e convertire ogni singolo campo.
ForAll( UORecordArray, { FirstField: Value(ThisRecord.FirstField), SecondField: Text(ThisRecord.SecondField) } )
Se dynamic viene convertito per la prima volta in una tabella, la tabella a colonna singola risultante di Dynamic richiederà di usare la Value colonna per ottenere i campi.
ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )
Conversione in record e tabelle tipizzati
Importante
- L'uso di AsType e IsType con valori dinamici è una funzionalità sperimentale.
- Le funzionalità sperimentali non sono progettate per l'uso in produzione e potrebbero non essere complete. Queste funzionalità sono disponibili prima di una versione ufficiale in modo che sia possibile ottenere l'accesso anticipato e fornire commenti e suggerimenti. Altre informazioni: Informazioni sulle funzionalità sperimentali, di anteprima e ritiro nelle app canvas
- Il comportamento descritto in questo articolo è disponibile solo quando la funzionalità sperimentale Tipi definiti dall'utente in Impostazioni > Funzionalità > future è attivata (è disattivata per impostazione predefinita).
- I tuoi commenti e suggerimenti sono utili per noi. Segnalare cosa si pensa nel forum della community delle funzionalità sperimentali di Power Apps.
Anziché convertire singolarmente ogni valore semplice, è possibile usare le funzioni ParseJSON, IsType e AsType per convertire un oggetto Dynamic in un oggetto tipizzato in blocco. Utilizzare la funzione Type per creare un tipo che eseguirà il mapping della struttura dinamica a una struttura tipizzata.
Ad esempio, qui stiamo interpretando le stringhe JSON come valori di data e ora, senza la necessità di chiamare la funzione DateTimeValue:
Eclipse = ParseJSON( "{ ""Start"": ""2026-08-12T18:26:00.000Z"", ""End"": ""2026-08-12T18:33:00.000Z"" }",
Type( { Start: DateTime, End: DateTime } ) );
DateDiff( Eclipse.Start, Eclipse.End, TimeUnit.Minutes )
// 7