Dela via


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

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 ) );