Funzioni RecordOf e Type
Si applica a: App canvas
Costruisce un tipo definito dall'utente da utilizzare con funzioni definite dall'utente e valori non tipizzati.
Importante
- Queste funzioni sono sperimentali.
- Le funzionalità sperimentali non sono destinate ad essere utilizzate e potrebbero non essere complete. Queste funzionalità sono disponibili prima di una versione ufficiale in modo che sia possibile ottenere l'accesso iniziale e inviare commenti. Ulteriori informazioni: Comprendere le funzionalità sperimentali, di anteprima e ritirate nelle app canvas
- Questo comportamento descritto in questo articolo è disponibile solo quando la funzionalità sperimentale Tipi definiti dall'utente in Impostazioni > Funzionalità in arrivo > Sperimentale è attivata (per impostazione predefinita è disattivata).
- I tuoi commenti sono importanti. Invia i tuoi commenti e suggerimenti nel forum della community delle funzionalità sperimentali di Power Apps.
Descrzione
Ogni funzione in Power Fx definisce i tipi di valori che possono essere passati come parametri e il tipo di output. I tipi vengono controllati quando si scrive una formula e vengono visualizzati gli errori se non sono conformi a quanto previsto. I tipi vengono utilizzati dall'editor anche per suggerire opzioni valide su cosa passare alla funzione e rilevare gli errori il prima possibile.
Quando si creano funzioni personalizzate definite dall'utente, è necessario specificare i tipi di input e output. Per i tipi semplici come Decimal o Text, questa operazione è semplice in quanto questi tipi di base sono predefiniti. Per tipi più complessi, come record o tabelle, usa la funzione Type per creare il tipo.
La funzione Type semplifica inoltre l'utilizzo degli oggetti non tipizzati. Con le funzioni ParseJSON,IsType e AsType, un oggetto non tipizzato può essere convertito in un oggetto tipizzato in cui le colonne non devono più essere tipizzate singolarmente al momento dell'utilizzo.
La funzione Type accetta un oggetto TypeSpecification come unico argomento. La specifica di tipo più semplice consiste nel fare riferimento, ad esempio Type( Text )
, a un tipo esistente. Una specifica di tipo per un record o una tabella è simile alla definizione di un record o di una tabella con valori letterali, in cui i valori vengono sostituiti da nomi di tipo. Ad esempio, {Name: "Jane"}
verrebbe digitato con Type( {Name: Text} )
. Le tabelle vengono specificate con parentesi quadre, non con la funzione Table, ed è possibile specificare un solo record. Ad esempio, [1,2,3]
verrebbe digitato con Type( [Number] )
.
Utilizzare la funzione RecordOf per estrarre il tipo di record da un tipo di tabella. Ad esempio, Type( RecordOf( Library ) )
restituirebbe il tipo di un singolo libro dalla raccolta. Per creare un tipo di tabella da un tipo di record, racchiudi il tipo di record tra parentesi quadre. Ad esempio, Type( [ Book ] )
definisce una raccolta.
RecordOf può essere utilizzato solo all'interno della funzione Type.
La funzione Type e il valore type che restituisce possono essere usati solo in posizioni Power Fx specifiche, ad esempio il secondo argomento di ParseJSON. Nelle app canvas, la funzione Type può essere utilizzata con una formula denominata in App.Formulas.
Sintassi
RecordOf(TipoTabella)
- TableType: obbligatorio. Il nome tipo di una tabella. Non accetta una specifica di tipo, deve essere il nome di un tipo definito in precedenza per una tabella.
Tipo(SpecificaTipo)
- TypeSpecification: obbligatorio. Una specifica di tipo.
Esempi
Funzione Type
Considera le seguenti definizioni in App.Formulas:
Library =
[ { Title: "A Study in Scarlet", Author: "Sir Arthur Conan Doyle", Published: 1887 },
{ Title: "And Then There Were None", Author: "Agatha Christie", Published: 1939 },
{ Title: "The Marvelous Land of Oz", Author: "L. Frank Baum", Published: 1904 } ];
// Type definition for a single book
BookType := Type( { Title: Text, Author: Text, Published: Number } );
// Type definition for a table of books
LibraryType := Type( [ BookType ] );
Nota come il testo "A Study in Scarlet"
del titolo effettivo viene sostituito con il nome Text
del tipo nella specifica del tipo, un segnaposto per qualsiasi valore di testo. Un parametro o una variabile di tipo BookType
può contenere uno dei libri Library
, mentre LibraryType
può contenere l'intera tabella. Con questi tipi, possiamo definire queste funzioni definite dall'utente:
SortedBooks( books: LibraryType ): LibraryType =
SortByColumns( Library, Author, SortOrder.Ascending, Title, SortOrder.Ascending );
PublishedInLeapYear( book: BookType ): Boolean =
Mod( book.Published, 4 ) = 0 And
(Mod( book.Published, 100 ) <> 0 Or Mod( book.Published, 400 ) = 0);
Puoi anche usare BookType
per analizzare una stringa JSON che contiene un libro:
ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)
L'utilizzo di BookType
come secondo argomento di ParseJSON genera un record tipizzato che può essere utilizzato come qualsiasi altro record Power Fx.
Funzione RecordOf
Nell'esempio della funzione Type, si inizia con una tabella BookType
e la si compila LibraryType
eseguendo il wrapping intorno ad essa. Avremmo potuto definire questi tipi al contrario con:
// Type definition for a table of books
RecordOfLibraryType := Type( [ { Title: Text, Author: Text, Published: Number } ] );
// Type definition for a single book
RecordOfBookType := Type( RecordOf( RecordOfLibraryType ) );