RecordOf- og Type-funksjoner
Gjelder: Lerretsapper
Konstruerer en brukerdefinert type for bruk med brukerdefinerte funksjoner og verdier uten type.
Viktig!
- Disse funksjonene er eksperimentelle.
- Eksperimentelle funksjoner er ikke ment for produksjonsbruk og kan være ufullstendige. Disse funksjonene er tilgjengelige før en offisielle utgivelsen slik at du kan få tidlig tilgang og gi tilbakemeldinger. Mer informasjon: Forstå eksperimentelle funksjoner og tilbaketrukne funksjoner i lerretsapper
- Denne virkemåten er bare tilgjengelig når den eksperimentelle funksjonen Brukerdefinerte typer i Innstillinger > Kommende funksjoner > Eksperimentell er aktivert (den er deaktivert som standard).
- Tilbakemeldingen din er nyttig. Fortell oss hva du synes i Power Apps-fellesskapsformumet for eksperimentelle funksjoner.
Description
Hver funksjon i Power Fx definerer hvilke typer verdier som kan sendes inn som parametere og typen utdata. Typer kontrolleres når du skriver en formel, og feil vises hvis de ikke stemmer overens med det som forventes. Typer brukes også av redaktøren til å foreslå gode alternativer for hva som skal passere inn i funksjonen og oppdage feil så tidlig som mulig.
Når du oppretter dine egne brukerdefinerte funksjoner, må du spesifisere inngangs- og utgangstyper. For enkle typer som Decimal og Text er dette enkelt, da disse grunnleggende typene er forhåndsdefinert. For mer komplekse typer, for eksempel oppføringer eller tabeller, bruker du Type-funksjonen til å opprette typen.
Type-funksjonen gjør det også enklere å arbeide med typeløse objekter. Med funksjonene ParseJSON, IsType og AsType kan et typeløst objekt konverteres til et typeangitt objekt der kolonner ikke lenger trenger å typeangis individuelt på bruksstedet.
Type-funksjonen tar TypeSpecification som sitt eneste argument. Den enkleste typespesifikasjonen er å referere til en eksisterende type, for eksempel Type( Text )
. En typespesifikasjon for en post eller tabell ligner på å definere en post eller tabell med litterale verdier, der verdiene erstattes av typenavn. For eksempel ville {Name: "Jane"}
blitt typeangitt med Type( {Name: Text} )
. Tabeller angis med hakeparenteser, ikke Tabell-funksjonen, og bare én post kan angis. For eksempel ville [1,2,3]
blitt typeangitt med Type( [Number] )
.
Bruk RecordOf-funksjonen til å trekke ut oppføringstypen fra en tabelltype. For eksempel ville Type( RecordOf( Library ) )
returnert typen av en enkelt bok fra biblioteket. Hvis du vil lage en tabelltype fra en oppføringstype, pakker du oppføringstypen inn i hakeparenteser. For eksempel definerer Type( [ Book ] )
et bibliotek.
RecordOf kan bare brukes i Type-funksjonen.
Type-funksjonen og typeverdien den returnerer, kan bare brukes på bestemte steder i Power Fx, som det andre argumentet til ParseJSON. I lerretsapper kan Type-funksjonen brukes med en navngitt formel i App.Formulas.
Syntaks
RecordOf(TableType)
- TableType – obligatorisk. Typenavnet til en tabell. Dette godtar ikke en typespesifikasjon, det må være navnet på en tidligere definert type for en tabell.
Type(TypeSpecification)
- TypeSpecification – obligatorisk. En typespesifikasjon.
Eksempler
Type-funksjonen
Vurder følgende definisjoner 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 ] );
Legg merke til hvordan den faktiske tittelteksten "A Study in Scarlet"
er erstattet med typenavnet Text
i typespesifikasjonen, en plassholder for en hvilken som helst tekstverdi. En parameter eller variabel av typen BookType
kan holde en av bøkene i Library
, mens LibraryType
kan holde hele tabellen. Med disse typene på plass kan vi definere disse brukerdefinerte funksjonene:
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å bruke BookType
til å analysere en JSON-streng som inneholder en bok:
ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)
Hvis du bruker BookType
som det andre argumentet til ParseJSON, resulterer det i en typeangitt oppføring som kan brukes som alle andre Power Fx-oppføringer.
RecordOf-funksjonen
I eksemplet med Type-funksjonen starter du med BookType
og bygger LibraryType
ved å pakke inn en tabell rundt den. Vi kunne ha definert disse typene 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 ) );