Udostępnij za pośrednictwem


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

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 ) );