Condividi tramite


RecordOffunzioni 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

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, ad esempio record o tabelle, usare la Type funzione per creare il tipo.

La Type funzione semplifica anche l'uso dei valori dinamici. Con le funzioni ParseJSON, IsType e AsType , un valore dinamico può essere convertito in un oggetto tipizzato in cui le colonne non devono più essere tipizzate singolarmente al momento dell'utilizzo.

La Type funzione accetta un 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] ).

Usare la RecordOf funzione 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 usato solo all'interno della Type funzione.

La Type funzione e il valore del tipo restituito possono essere usati solo in posizioni specifiche in Power Fx, ad esempio il secondo argomento di ParseJSON. Nelle app Canvas la Type funzione può essere usata con una formula denominata in App.Formulas.

Sintassi

RecordOf( TableType )

  • 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.

Type( TypeSpecification )

  • 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 di Type funzione si inizia con BookType e si compila LibraryType eseguendo il wrapping di una tabella intorno a 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 ) );