Funktionen „RecordOf“ und „Type“
Gilt für: Canvas-Apps
Erstellt einen benutzerdefinierten Typ für die Verwendung mit benutzerdefinierten Funktionen und nicht typisierten Werten.
Wichtig
- Diese Funktionen sind experimentell.
- Experimentelle Features sind nicht für den Einsatz in der Produktion gedacht und sind vielleicht nicht vollständig. Diese Funktionen stehen vor dem offiziellen Release zur Verfügung, damit Sie früher Zugriff darauf erhalten und Feedback geben können. Weitere Informationen: Verstehen Sie experimentelle, Vorschau- und eingestellte Funktionen in Canvas-Apps
- Dieses Verhalten ist nur verfügbar, wenn das experimentelle Feature Benutzerdefinierte Typen in Einstellungen > Kommende Funktionen > Experimentell aktiviert ist (standardmäßig ist es deaktiviert).
- Ihr Feedback ist wertvoll. Teilen Sie uns Ihre Meinung in den Power Apps-Communityforen zu experimentellen Features mit.
Beschreibung
Jede Funktion in Power Fx bestimmt die Arten von Werten, die als Parameter übergeben werden können, und den Typ der Ausgabe. Typen werden überprüft, wenn Sie eine Formel schreiben, und es werden Fehler angezeigt, wenn sie nicht mit dem übereinstimmen, was erwartet wird. Typen werden auch vom Editor verwendet, um gute Optionen für die Übergabe an die Funktion vorzuschlagen und Fehler so früh wie möglich zu erkennen.
Wenn Sie Ihre eigenen benutzerdefinierten Funktionen erstellen, müssen Sie die Eingabe- und Ausgabetypen angeben. Für einfache Typen wie Dezimal oder Text ist dies leicht, da diese Basistypen vordefiniert sind. Für komplexere Typen, z. B. Datensätze oder Tabellen, verwenden Sie die Type-Funktion, um den Typ zu erstellen.
Die Type-Funktion erleichtert auch die Arbeit mit nicht typisierten Objekten. Mit den Funktionen ParseJSON, IsType und AsType kann ein nicht typisiertes in ein typisiertes Objekt konvertiert werden, in dem Spalten am Punkt der Verwendung nicht mehr einzeln eingegeben werden müssen.
Die Type-Funktion verwendet als einziges Argument eine TypeSpecification. Die einfachste Typspezifikation besteht darin, auf einen vorhandenen Typ zu verweisen, z. B. Type( Text )
. Eine Typspezifikation für einen Datensatz oder eine Tabelle ähnelt der Definition eines Datensatzes oder einer Tabelle mit Literalwerten, wobei die Werte durch Typnamen ersetzt werden.
{Name: "Jane"}
wird zum Beispiel Type( {Name: Text} )
geschrieben. Tabellen werden mit eckigen Klammern angegeben, nicht mit der Table-Funktion. Es kann nur ein Datensatz angegeben werden.
[1,2,3]
wird zum Beispiel Type( [Number] )
geschrieben.
Verwenden Sie die RecordOf-Funktion, um den Datensatztyp aus einem Tabellentyp zu extrahieren.
Type( RecordOf( Library ) )
gibt zum Beispiel den Typ eines einzelnen Buches aus der Bibliothek zurück. Wenn Sie aus einem Datensatztyp einen Tabellentyp erstellen möchten, setzen Sie den Datensatztyp in eckige Klammern.
Type( [ Book ] )
legt zum Beispiel eine Bibliothek fest.
RecordOf kann nur innerhalb der Type-Funktion verwendet werden.
Die Type-Funktion und der von ihr zurückgegebene Typwert können nur an bestimmten Stellen in Power Fx verwendet werden, z. B. im zweiten Argument von ParseJSON. In Canvas-Apps kann die Type-Funktion mit einer benannten Formel in App.Formulas verwendet werden.
Syntax
RecordOf( TableType )
- TableType: erforderlich. Der Typname einer Tabelle. Dies akzeptiert keine Typspezifikation, es muss sich um den Namen eines zuvor definierten Typs für eine Tabelle handeln.
Type( TypeSpecification )
- TypeSpecification: erforderlich. Eine Typspezifikation.
Beispiele
Type-Funktion
Berücksichtigen Sie die folgenden Definitionen 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 ] );
Beachten Sie, wie der eigentliche Titeltext "A Study in Scarlet"
in der Typspezifikation durch den Typnamen Text
ersetzt wird, bei dem es sich um einen Platzhalter für einen beliebigen Textwert handelt. Ein Parameter oder eine Variable des Typs BookType
kann eines der Bücher in Library
enthalten, während LibraryType
die gesamte Tabelle enthalten kann. Mit diesen Typen können wir die folgenden benutzerdefinierten Funktionen definieren:
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);
Sie können den BookType
auch verwenden, um eine JSON-Zeichenfolge zu analysieren, die ein Buch enthält:
ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)
Die Verwendung von BookType
als zweites Argument für ParseJSON führt zu einem typisierten Datensatz, der wie jeder andere Power Fx-Datensatz verwendet werden kann.
RecordOf-Funktion
Im Beispiel für die Type-Funktion beginnen Sie mit BookType
und erstellen LibraryType
, indem Sie eine Tabelle darum herum erstellen. Wir hätten diese Typen auch umgekehrt definieren können mit:
// 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 ) );