Del via


Funktionerne RecordOf og Type

Gælder for: Lærredapps

Opretter en brugerdefineret type til brug sammen med brugerdefinerede funktioner og værdier uden type.

Vigtige oplysninger

Description

Hver funktion i Power Fx definerer de typer værdier, der kan overføres som parametre, og outputtypen. Typer kontrolleres, når du skriver en formel, og der vises fejl, hvis de ikke stemmer overens med det forventede. Typer bruges også af redaktøren til at foreslå gode muligheder for, hvad der skal overføres til funktionen og opdage fejl så tidligt som muligt.

Når du opretter dine egne brugerdefinerede funktioner, skal du angive input- og outputtyperne. For simple typer som Decimal eller Text er dette nemt, da disse grundlæggende typer er foruddefinerede. For mere komplekse typer, f.eks. poster eller tabeller, brug funktionen Type til at oprette typen.

Funktionen Type gør det også nemmere at arbejde med objekter uden type. Med funktionerne ParseJSON, IsType og AsType kan et objekt uden type konverteres til et typeobjekt, hvor kolonner ikke længere skal skrives individuelt på brugsstedet.

Funktionen Type bruger en TypeSpecification som det eneste argument. Den enkleste typespecifikation er at referere til en eksisterende type, f.eks. Type( Text ). En typespecifikation for en post eller tabel svarer til at definere en post eller tabel med bogstavelige værdier, hvor værdierne erstattes af typenavne. For eksempel {Name: "Jane"} ville blive tildelt en type med Type( {Name: Text} ). Tabeller angives med kantede parenteser, ikke funktionen Tabel, og der kan kun angives én post. For eksempel [1,2,3] ville blive tildelt en type med Type( [Number] ).

Brug funktionen RecordOf til at udtrække posttypen fra en tabeltype. For eksempel Type( RecordOf( Library ) ) returnerer typen af en enkelt bog fra biblioteket. Hvis du vil oprette en tabeltype ud fra en posttype, skal du ombryde posttypen i kantede parenteser. For eksempel definerer Type( [ Book ] ) et bibliotek. RecordOf kan kun bruges i funktionen Type.

Funktionen Type og den typeværdi, den returnerer, kan kun bruges bestemte steder i Power Fx, f.eks. det andet argument for ParseJSON. I Lærredsapps kan funktionen Type bruges sammen med en navngivet formel i App.Formulas.

Syntaks

RecordOf( TableType )

  • TableType – påkrævet. Angiv navnet på en tabel. Dette accepterer ikke en typespecifikation. Det skal være navnet på en tidligere defineret type for en tabel.

Type( TypeSpecification )

  • TypeSpecification - Påkrævet. En typeangivelse.

Eksempler

Funktionstype

Tag følgende definitioner i betragtning 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 ] );

Bemærk, hvordan den faktiske titeltekst "A Study in Scarlet" erstattes med typenavnet Text i typespecifikationen, der er pladsholder for enhver tekstværdi. En parameter eller variabel af typen BookType kan indeholde en af bøgerne Library, mens LibraryType den kan indeholde hele tabellen. Med disse typer på plads kan vi definere disse brugerdefinerede 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 også bruge BookType til at fortolke en JSON-streng, der indeholder en bog:

ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)

Hvis du bruger BookType som det andet argument til ParseJSON, resulterer det i en typepost, der kan bruges som enhver anden Power Fx post.

RecordOf-funktion

I eksemplet med funktionen Type starter du med BookType og bygger LibraryType ved at ombryde en tabel omkring den. Vi kunne have defineret disse typer omvendt 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 ) );