RecordOf och Type funktioner

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 Type funktionen för att skapa typen.

Funktionen Type gör också dynamiska värden enklare att arbeta med. Med funktionerna ParseJSON, IsType och AsType kan ett dynamiskt värde konverteras till ett typat objekt där kolumner inte längre behöver skrivas individuellt vid användningspunkten.

Funktionen Type tar en TypeSpecification som enda argument. 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] ).

RecordOf Använd funktionen 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 endast användas i Type funktionen.

Funktionen Type och typvärdet som returneras kan endast användas på specifika platser i Power Fx, till exempel det andra argumentet till ParseJSON. I Appar för arbetsytor kan funktionen användas med en namngiven Type 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.

Type( TypeSpecification )

  • TypeSpecification – Krävs. En typspecifikation.

Exempel

funktion Type

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

funktion RecordOf

I funktionsexemplet Type 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 ) );