Funktionerna RecordOf och Type
Gäller: Arbetsyteappar
Skapar en användardefinierad typ för användning med användardefinierade funktioner och typlösa värden.
Viktigt
- Dessa funktioner är experimentella.
- Experimentella funktioner är inte avsedda för produktionsanvändning och kanske inte har slutförts. Funktionerna är tillgängliga före den officiella publiceringen så att du kan få tidig tillgång och ge feedback. Mer information: Förstå experimentella, förhandsgransknings- och pensionerade funktioner i arbetsyteappen
- Det här beteendet är endast tillgängligt när den experimentella funktionen Användardefinierade typer i Inställningar > Kommande funktioner > Experimentell är aktiverad (den är inaktiverad som standard).
- Din feedback är värdefull. Berätta för oss vad du tycker i communityforumet för Power Apps.
Description
Varje funktion i Power Fx definierar vilka typer av värden som kan skickas som parametrar och typen av utdata. Typer kontrolleras när du skriver en formel och fel visas om de inte stämmer överens med vad som förväntas. Typer används också av redigeraren för att föreslå bra alternativ för vad som ska skickas till funktionen och upptäcka fel så tidigt som möjligt.
När du skapar egna användardefinierade funktioner måste du ange indata- och utdatatyper. För enkla typer som Decimal eller Text är detta enkelt eftersom dessa grundläggande typer är fördefinierade. För mer komplexa typer, till exempel poster eller tabeller, använder du funktionen Typ för att skapa typen.
Funktionen Typ gör det också lättare att arbeta med objekt utan angiven typ. Med funktionerna ParseJSON, IsType, and AsType, ett typlöst objekt kan konverteras till ett maskinskrivet objekt där kolumner inte längre behöver skrivas individuellt vid användningstillfället.
Funktionen Typ tar en TypeSpecification som det enda argumentet. Den enklaste typspecifikationen är att referera till en befintlig typ, till exempel Type( Text )
. En typspecifikation för en post eller tabell liknar definitionen av en post eller tabell med literalvärden, där värdena ersätts med typnamn. Till exempel, skulle {Name: "Jane"}
skrivas med Type( {Name: Text} )
. Tabeller anges med hakparenteser, inte funktionen Tabell och endast en post kan anges. Till exempel, skulle [1,2,3]
skrivas med Type( [Number] )
.
Använd funktionen RecordOf för att extrahera posttypen från en tabelltyp. Du kan till exempel Type( RecordOf( Library ) )
returnera typen av en enda bok från biblioteket. Om du vill skapa en tabelltyp av en posttyp omsluter du posttypen inom hakparenteser. Till exempel, definierar Type( [ Book ] )
ett bibliotek.
RecordOf kan bara användas i funktionen Typ.
Funktionen Typ och det typvärde som den returnerar kan bara användas på specifika platser i Power Fx, till exempel det andra argumentet till ParseJSON. I arbetsyteappar kan funktionen Typ användas med en namngiven formel i App.Formulas.
Syntax
RecordOf( TableType )
- TableType – Obligatoriskt. Typnamnet på en tabell. Detta accepterar inte en typspecifikation, det måste vara namnet på en tidigare definierad typ för en tabell.
Typ( TypeSpecification )
- TypeSpecification – Krävs. En typspecifikation.
Exempel
Typfunktion
Överväg följande definitioner i 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 ] );
Lägg märke till hur den faktiska rubriktexten "A Study in Scarlet"
ersätts med typnamnet Text
i typspecifikationen, en platshållare för alla textvärden. En parameter eller variabel av typen BookType
kan innehålla en av böckerna Library
, medan den LibraryType
kan innehålla hela tabellen. Med dessa typer på plats kan vi definiera dessa användardefinierade funktioner:
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);
Du kan också använda BookType
att parsa en JSON-sträng som innehåller en bok:
ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)
Om du använder BookType
som det andra argumentet till ParseJSON resulterar det i en typifierad post som kan användas som vilken annan Power Fx post som helst.
RecordOf-funktion
I funktionen Typ börjar du med BookType
och skapar LibraryType
genom att omsluta en tabell runt den. Vi kunde ha definierat dessa typer omvänt med:
// 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 ) );