RecordOf a Type funkcie

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.

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é. V prípade zložitejších typov, ako sú napríklad záznamy alebo tabuľky, použite Type funkciu na vytvorenie typu.

Funkcia Type tiež uľahčuje prácu s dynamickými hodnotami. Pomocou funkcií ParseJSON, IsType a AsType sa môže dynamická hodnota skonvertovať na zadaný objekt, v ktorom už nie je v bode používania potrebné zadávať stĺpce samostatne.

Funkcia Type berie parameter TypeSpecification ako jediný argument. 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] ).

RecordOf Pomocou funkcie môžete extrahovať typ záznamu z typu tabuľky. 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 možno použiť iba v rámci Type funkcie .

Funkciu Type a hodnotu typu, ktorú vráti, možno použiť iba na konkrétnych miestach v službe Power Fx, napríklad na druhý argument funkcie ParseJSON. V aplikáciách Type plátna možno funkciu použiť s pomenovaným vzorcom vo vzorcoch App.Formulas.

Syntax

RecordOf( TableType )

  • 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.

Type( TypeSpecification )

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

Examples

Funkcia Type

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 Type funkcie začínate a BookType vytvárate LibraryType zabalením tabuľky okolo nej. 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 ) );