RecordOf- en Type-functies
Van toepassing op: Canvas-apps
Maakt een door de gebruiker gedefinieerd type voor gebruik met door de gebruiker gedefinieerde functies en niet-getypeerde waarden.
Belangrijk
- Deze functies zijn experimenteel.
- Experimentele functies zijn niet bedoeld voor productiegebruik en zijn mogelijk niet volledig. Deze functies zijn beschikbaar voor een officiële release zodat u vroeg toegang kunt krijgen en feedback kunt geven. Meer informatie: Experimentele, preview- en buiten gebruik gestelde functies in canvas-apps begrijpen
- Dit gedrag is alleen beschikbaar wanneer de experimentele functie Door gebruiker gedefinieerde typen in Instellingen > Aanstaande functies > Experimenteel is ingeschakeld (deze is standaard uitgeschakeld).
- Uw feedback is waardevol. Laat via het Power Apps-communityforum voor experimentele functies weten wat u ervan vindt.
Omschrijving
Elke functie in Power Fx definieert de typen waarden die als parameters kunnen worden doorgegeven en het type uitvoer. Wanneer u een formule schrijft, worden typen gecontroleerd en worden fouten weergegeven als ze niet overeenkomen met wat er wordt verwacht. Typen worden ook door de editor gebruikt om goede opties voor te stellen voor wat er in de functie moet worden doorgegeven en om fouten zo vroeg mogelijk te detecteren.
Wanneer u uw eigen door de gebruiker gedefinieerde functies maakt, moet u de invoer- en uitvoertypen opgeven. Voor eenvoudige typen zoals Decimaal of Tekst is dit eenvoudig, omdat deze basistypen vooraf zijn gedefinieerd. Voor complexere typen, zoals records of tabellen, gebruikt u de functie Type om het type te maken.
Dankzij de functie Type is het ook eenvoudiger om met objecten zonder type te werken. Met de functies ParseJSON, IsType en AsType kan een object zonder type worden omgezet in een object met type, waarbij kolommen niet langer afzonderlijk hoeven te worden getypt op het moment van gebruik.
De functie Type neemt een TypeSpecification als enig argument. De eenvoudigste typespecificatie is om te verwijzen naar een bestaand type, bijvoorbeeld Type( Text )
. Een typespecificatie voor een record of tabel is vergelijkbaar met het definiëren van een record of tabel met letterlijke waarden, waarbij de waarden worden vervangen door typenamen. Zo zou {Name: "Jane"}
worden getypt met Type( {Name: Text} )
. Tabellen worden opgegeven met vierkante haken, niet met de functie Table, en er kan slechts één record worden opgegeven. Zo zou [1,2,3]
worden getypt met Type( [Number] )
.
Gebruik de functie RecordOf om het recordtype uit een tabeltype te extraheren. Zo retourneert Type( RecordOf( Library ) )
bijvoorbeeld het type van een enkel boek uit de bibliotheek. Om van een recordtype een tabeltype te maken, plaatst u het recordtype tussen vierkante haken. Zo definieert bijvoorbeeld Type( [ Book ] )
een bibliotheek.
RecordOf kan alleen worden gebruikt binnen de functie Type.
De functie Type en de typewaarde die deze retourneert, kunnen alleen op specifieke plaatsen in Power Fx worden gebruikt, zoals het tweede argument van ParseJSON. In canvas-apps kan de functie Type worden gebruikt met een benoemde formule in App.Formulas.
Syntaxis
RecordOf( TableType )
- TableType: vereist. Het type naam van een tabel. Dit accepteert geen typespecificatie, het moet de naam zijn van een eerder gedefinieerd type voor een tabel.
Type( TypeSpecification )
- TypeSpecification: vereist. Een type specificatie.
Voorbeelden
Functie Type
Bekijk de volgende definities in 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 ] );
Let op hoe de eigenlijke titeltekst "A Study in Scarlet"
in de typespecificatie wordt vervangen door de typenaam Text
, een tijdelijke aanduiding voor een willekeurige tekstwaarde. Een parameter of variabele van het type BookType
kan één van de boeken in Library
bevatten, terwijl LibraryType
de hele tabel kan bevatten. Met deze typen kunnen we de volgende door de gebruiker gedefinieerde functies definiëren:
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);
U kunt ook de BookType
gebruiken om een JSON-tekenreeks te parseren die een boek bevat:
ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)
Als u BookType
als tweede argument voor ParseJSON gebruikt, resulteert dit in een getypte record die kan worden gebruikt als elke andere Power Fx-record.
Functie RecordOf
In het voorbeeld van de functie Type begint u met BookType
en bouwt u LibraryType
op door er een tabel omheen te wikkelen. We hadden deze typen ook omgekeerd kunnen definiëren met:
// 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 ) );