Condividi tramite


Tipo di dati dell'oggetto non tipizzato

Oggetto non tipizzato è un tipo di dati in Power Fx che può contenere qualsiasi struttura di dati, complessa o semplice. Non può essere utilizzato direttamente e richiede una conversione esplicita in un tipo di dati. È possibile accedere ai campi nei record in un oggetto non tipizzato utilizzando la notazione punto e l'esistenza dei campi viene verificata solo in fase di esecuzione.

Oggetto non tipizzato è il tipo restituito di specifici provider non tipizzati. Attualmente, solo la funzion ParseJSON() restituisce oggetto non tipizzato.

Tipi semplici

Il valore di una variabile di tipo oggetto non tipizzato non può essere utilizzato direttamente. Devi sempre tipizzarlo correttamente usando il costruttore di tipi corrispondente.

Gli esempi seguenti convertono il valore di una variabile oggetto non tipizzato denominata UOValue.

Text(UOValue)
Value(UOValue)

La tabella seguente elenca i tipi di dati e le funzioni corrispondenti per convertire oggetto non tipizzato in quel tipo di dati.

Tipo di dati Funzione Descrizione
Boolean Boolean() Durante la conversione di un oggetto non tipizzato a booleano, 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. L'oggetto non tipizzato può essere convertito direttamente da una stringa di definizione del colore del foglio di stile CSS utilizzando la funzione ColorValue(), o da singoli numeri RGBA in colore usando la funzione RGBA().
Valuta, Numero Value() Durante la conversione di un oggetto non tipizzato in numero, 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 oggetto non tipizzato al rispettivo tipo, se rappresentato nel 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 oggetto non tipizzato 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 una conversione diretta da un oggetto non tipizzato in una struttura di record, ma i singoli campi possono essere recuperati da un oggetto non tipizzato per creare un nuovo record.
Riferimento del record N/D I riferimenti dei record sono univoci per le origini dati e non hanno una rappresentazione significativa in oggetti non tipizzati.
Table Table() e ForAll() Un oggetto non tipizzato 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 oggetto non tipizzato rappresenta un numero, devi convertire l'oggetto non tipizzato in numero utilizzando Value() prima della conversione in testo.

Tipi di record

È possibile accedere ai campi di una variabile che rappresenta un record di oggetto non tipizzato utilizzando 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 del record è di tipo oggetto non tipizzato, e deve essere tipizzato correttamente. Il campo può essere un record non tipizzato 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.

Gli esempi seguenti usano i campi di una variabile oggetto non tipizzato denominata UORecord.

Text(UORecord.StringField)
Value(UORecord.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:

untyped.'01'
untyped.'my-field'

Matrici

Una variabile di oggetto non tipizzato può contenere una matrice. Anche se la matrice potrebbe essere una matrice di record o una matrice di tipi semplici, la conversione di una matrice di oggetto non tipizzato in una tabella usando la funzione Table() risulterà sempre in una tabella a colonna singola di oggetti non tipizzati. 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 oggetto non tipizzato contenente valori numerici ([1, 2, 3]), è possibile utilizzare la formula seguente per recuperare la seconda riga della tabella e convertire la colonna in un numero:

Value( Index( UOArray, 2 ) )

Se l'oggetto non tipizzato è stato prima convertito in Table(), la seconda riga nella tabella a colonna singola dei risultati è una colonna Value contenente l'oggetto non tipizzato:

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 all'oggetto non tipizzato direttamente oppure l'utilizzo della funzione Table() risulterà in una tabella a colonna singola di un oggetto non tipizzato.

È possibile accedere alla colonna Field direttamente dall'oggetto non tipizzato restituito dalla funzione Index().

Text( Index( UORecordArray, 2 ).Field )

Quando si utilizza la funzione Table(), recupera prima la colonna Value a una singola colonna per ottenere l'oggetto non tipizzato, quindi accedi alla colonna Field:

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 l'oggetto non tipizzato viene prima convertito in una tabella, ancora una volta, la risultante tabella a colonna singola dell'oggetto non tipizzato richiederà di utilizzare la colonna Value per ottenere i campi.

ForAll( Table(UORecordArray), { FirstField: Value(ThisRecord.Value.FirstField), SecondField: Text(ThisRecord.Value.SecondField) } )