Sdílet prostřednictvím


Funkce RecordOf a Type

Platí pro: aplikace plátna

Vytvoří uživatelem definovaný typ pro použití s uživatelem definovanými funkcemi a netypovými hodnotami.

Důležité

Description

Každá funkce v Power Fx definuje typy hodnot, které lze předat jako parametry a typ výstupu. Typy jsou kontrolovány při psaní vzorce a chyby se zobrazí, pokud nesouhlasí s tím, co se očekává. Typy jsou také používány editorem k navržení dobrých možností, co se má předat do funkce, a k detekci chyb co nejdříve.

Při vytváření vlastních uživatelsky definovaných funkcí je třeba zadat typy vstupu a výstupu. U jednoduchých typů, jako je desetinné číslo nebo text, je to snadné, protože tyto základní typy jsou předdefinované. U složitějších typů, jako jsou záznamy nebo tabulky, použijte funkci Type k vytvoření typu.

Funkce Type také usnadňuje práci s netypovými objekty. Pomocí funkcí ParseJSON, IsType a AsType lze netypový objekt převést na typový, ve kterém již není nutné zadávat sloupce jednotlivě v okamžiku použití.

Funkce Type přebírá jako jediný argument TypeSpecification. Nejjednodušší specifikací typu je odkaz na existující typ, například Type( Text ). Specifikace typu pro záznam nebo tabulku je podobná definování záznamu nebo tabulky s hodnotami literálů, kde jsou hodnoty nahrazeny názvy typů. Například {Name: "Jane"} by se psalo jako Type( {Name: Text} ). Tabulky jsou zadány v hranatých závorkách, nikoli pomocí funkce Table, a lze zadat pouze jeden záznam. Například [1,2,3] by se psalo jako Type( [Number] ).

Pomocí funkce RecordOf extrahujte typ záznamu z typu tabulky. Například Type( RecordOf( Library ) ) by vrátil typ jedné knihy z knihovny. Chcete-li vytvořit tabulkový typ z typu záznamu, zabalte typ záznamu do hranatých závorek. Například Type( [ Book ] ) definuje knihovnu. RecordOf lze použít pouze v rámci funkce Type.

Funkci Type a hodnotu typu, kterou vrací, lze použít pouze na konkrétních místech v Power Fx, jako je například druhý argument pro ParseJSON. V aplikacích plátna lze funkci Type použít s pojmenovaným vzorcem v App.Formulas.

Syntaxe

RecordOf( TypTabulky )

  • TypTabulky – Povinné. Název typu tabulky. To nepřijímá specifikaci typu, musí to být název dříve definovaného typu pro tabulku.

Type( SpecifikaceTypu )

  • SpecifikaceTypu – Povinné. Typová specifikace.

Příklady

Funkce Type

Vezměte v úvahu následující definice v 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 ] );

Všimněte si, jak je samotný text nadpisu "A Study in Scarlet" nahrazen názvem typu Text ve specifikaci typu, neboli zástupným symbolem pro libovolnou textovou hodnotu. Parametr nebo proměnná typu BookType může obsahovat jednu z knih Library, zatímco LibraryType může obsahovat celou tabulku. S těmito typy můžeme definovat tyto uživatelem definované funkce:

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

Můžete také použít BookType k analýze řetězce JSON, který obsahuje knihu:

ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)

Použití BookType jako druhého argumentu pro ParseJSON má za následek typový záznam, který lze použít jako jakýkoli jiný záznam Power Fx.

Funkce RecordOf

V příkladu funkce Type začnete s BookType a sestavte LibraryType tak, že okolo zalomíte tabulku. Tyto typy jsme mohli definovat obráceně s:

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