Funkcje RecordOf i Type
Dotyczy: aplikacje kanwy
Tworzy typ zdefiniowany przez użytkownika do użycia z funkcjami zdefiniowanymi przez użytkownika i wartościami bez typu.
Ważne
- Te funkcje są eksperymentalne.
- Funkcje eksperymentalne nie są przeznaczone do użytku produkcyjnego i mogą nie być kompletne. Te funkcje są udostępniane przed oficjalnym wydaniem, dzięki czemu można szybciej uzyskać do nich dostęp i przekazać opinie na ich temat. Więcej informacji: Zrozumienie eksperymentalnych, podglądowych i wycofanych funkcji w aplikacjach kanwy
- Zachowanie opisane w tym artykule jest dostępne tylko wtedy, gdy funkcja eksperymentalna Typy zdefiniowane przez użytkownika w Ustawienia > Nadchodzące funkcje > Eksperymentalne jest włączona (domyślnie jest wyłączona).
- Twoja opinia jest cenna. Daj nam znać, co myślisz w forum społeczności funkcji eksperymentalnych Power Apps.
Podpis
Każda funkcja w Power Fx określa typy wartości, które mogą być przekazywane jako parametry, oraz typ danych wyjściowych. Typy są sprawdzane podczas pisania formuły i wyświetlane są błędy, jeśli nie zgadzają się z oczekiwaniami. Typy są również używane przez edytora, aby zasugerować dobre opcje dotyczące tego, co należy przekazać do funkcji i wykryć błędy tak wcześnie, jak to możliwe.
Podczas tworzenia własnych funkcji zdefiniowanych przez użytkownika należy określić typy danych wejściowych i wyjściowych. W przypadku prostych typów, takich jak Dziesiętne lub Tekst, jest to łatwe, ponieważ te podstawowe typy są predefiniowane. W przypadku bardziej złożonych typów, takich jak rekordy lub tabele, użyj funkcji Type, aby utworzyć typ.
Funkcja Type ułatwia również pracę z obiektami bez typu. Dzięki funkcjom ParseJSON, IsType i AsType, nieopisany obiekt może zostać przekonwertowany na wpisany obiekt, w którym kolumny nie muszą być już indywidualnie wpisywane w punkcie użycia.
Funkcja Type przyjmuje TypeSpecification jako jedyny argument. Najprostszą specyfikacją typu jest odwołanie się do istniejącego typu, na przykład Type( Text )
. Specyfikacja typu dla rekordu lub tabeli jest podobna do definiowania rekordu lub tabeli z wartościami literałów, gdzie wartości są zastępowane nazwami typów. Na przykład {Name: "Jane"}
zostanie wpisany z Type( {Name: Text} )
. Tabele są określane za pomocą nawiasów kwadratowych, a nie funkcji Table i można podać tylko jeden rekord. Na przykład [1,2,3]
zostanie wpisany z Type( [Number] )
.
Użyj funkcji RecordOf, aby wyodrębnić typ rekordu z typu tabeli. Na przykład Type( RecordOf( Library ) )
zwróci typ pojedynczej książki z biblioteki. Aby utworzyć typ tabeli z typu rekordu, należy umieścić typ rekordu w nawiasach kwadratowych. Na przykład Type( [ Book ] )
definiuje bibliotekę.
RecordOf może być używane tylko w funkcji Type.
Funkcja Type i zwracana przez nią wartość typu mogą być używane tylko w określonych miejscach w Power Fx, takich jak ParseJSON jako drugi argument. W aplikacjach opartych na kanwie, funkcja Type może być używana z nazwaną formułą w formacie App.Formulas.
Składnia
RecordOf( TableType )
- TableType – wymagany. Nazwa typu tabeli. Nie akceptuje specyfikacji typu, musi to być nazwa wcześniej zdefiniowanego typu dla tabeli.
Type( TypeSpecification )
- TypeSpecification – wymagane. Specyfikacja typu.
Przykłady
Funkcja Type
Rozważmy następujące definicje w 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 ] );
Zwróć uwagę, jak rzeczywisty tekst tytułu "A Study in Scarlet"
został zastąpiony nazwą typu Text
w specyfikacji typu, będącej symbolem zastępczym dla dowolnej wartości tekstowej. Parametr lub zmienna typu BookType
może przechowywać jedną z ksiąg z Library
, ale LibraryType
może przechowywać całą tabelę. Mając te typy, możemy zdefiniować następujące funkcje zdefiniowane przez użytkownika:
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);
Możesz również użyć BookType
, aby przeanalizować ciąg JSON, który zawiera książkę:
ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)
Użycie BookType
jako drugiego argumentu do ParseJSON daje w rezultacie typowany rekord, który może być używany jak każdy inny rekord Power Fx.
Funkcja RecordOf
W przykładzie funkcji Type, zaczynasz od BookType
i budujesz LibraryType
, owijając wokół niego tabelę. Mogliśmy zdefiniować te typy w odwrotnej kolejności za pomocą:
// 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 ) );