Zdieľať cez


Funkcie RecordOf a Type

Platí pre: aplikácie Canvas

Vytvorí užívateľom definovaný typ na použitie s užívateľsky definovanými funkciami a nezadanými hodnotami.

Dôležité

Description

Každá funkcia v Power Fx definuje typy hodnôt, ktoré možno odovzdať ako parametre a typ výstupu. Typy sa kontrolujú pri písaní vzorca a chyby sa zobrazujú, ak nesúhlasia s tým, čo sa očakáva. Typy tiež používa editor na navrhnutie dobrých možností, čo odovzdať do funkcie, a čo najskôr odhaliť chyby.

Pri vytváraní vlastných užívateľom definovaných funkcií musíte zadať typy vstupu a výstupu. Pre jednoduché typy ako Decimal alebo Text je to jednoduché, keďže tieto základné typy sú preddefinované. Pre zložitejšie typy, ako sú záznamy alebo tabuľky, použite na vytvorenie typu funkciu Typ .

Funkcia Typ tiež uľahčuje prácu s netypizovanými objektmi. S funkciami ParseJSON, IsType a AsType , možno netypovaný objekt previesť na písaný objekt, v ktorom už nie je potrebné jednotlivé stĺpce písať v bode použitia.

Funkcia Typ má ako jediný argument Špecifikáciu typu . Najjednoduchšia špecifikácia typu je odkazovať na existujúci typ, napríklad Type( Text ). Typová špecifikácia pre záznam alebo tabuľku je podobná definovaniu záznamu alebo tabuľky s doslovnými hodnotami, kde sú hodnoty nahradené názvami typov. Napríklad {Name: "Jane"} by ste zadali s Type( {Name: Text} ). Tabuľky sú špecifikované v hranatých zátvorkách, nie pomocou funkcie Tabuľka a je možné poskytnúť iba jeden záznam. Napríklad [1,2,3] by ste zadali s Type( [Number] ).

Na extrahovanie typu záznamu z typu tabuľky použite funkciu RecordOf . Napríklad Type( RecordOf( Library ) ) vráti typ jednej knihy z knižnice. Ak chcete vytvoriť typ tabuľky z typu záznamu, zabaľte typ záznamu do hranatých zátvoriek. Napríklad Type( [ Book ] ) definuje knižnicu. RecordOf je možné použiť iba v rámci funkcie Typ .

Funkciu Typ a hodnotu typu, ktorú vracia, možno použiť iba na konkrétnych miestach v Power Fx, ako je napríklad druhý argument pre ParseJSON. V aplikáciách Canvas je možné použiť funkciu Typ s pomenovaným vzorcom v App.Formulas.

Syntax

Záznam( Typ tabuľky )

  • TableType – povinné. Názov typu tabuľky. Toto neprijíma špecifikáciu typu, musí to byť názov predtým definovaného typu pre tabuľku.

Typ( Špecifikácia typu )

  • TypeSpecification – povinné. Typová špecifikácia.

Príklady

Typ funkcie

Zvážte nasledujúce definície 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šimnite si, ako je skutočný text nadpisu "A Study in Scarlet" nahradený názvom typu Text v špecifikácii typu, čo je zástupný symbol pre ľubovoľnú textovú hodnotu. Parameter alebo premenná typu BookType môže obsahovať jednu z kníh v Library, zatiaľ čo LibraryType môže obsahovať celú tabuľku. S týmito typmi môžeme definovať tieto používateľom definované funkcie:

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 tiež použiť BookType na analýzu reťazca JSON, ktorý obsahuje knihu:

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

Použitie BookType ako druhého argumentu na ParseJSON výsledkom je typizovaný záznam, ktorý možno použiť ako ktorýkoľvek iný Power Fx záznam.

Funkcia RecordOf

V príklade funkcie Typ začnete s BookType a zostavíte LibraryType obalením tabuľky. Tieto typy by sme mohli definovať naopak:

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