Partajați prin


Funcțiile RecordOf și Type

Se aplică pentru: planșă de lucru aplicații

Construiește un tip definit de utilizator pentru a fi utilizat cu funcții definite de utilizator și cu valori netipizate.

Important

Descriere

Fiecare funcție din Power Fx definește tipurile de valori care pot fi transmise ca parametri și tipul de ieșire. Tipurile sunt verificate atunci când scrieți o formulă și erorile sunt afișate dacă nu sunt de acord cu ceea ce se așteaptă. Tipurile sunt, de asemenea, folosite de editor pentru a sugera opțiuni bune pentru ce să treacă în funcție și pentru a detecta erorile cât mai devreme posibil.

Când creați propriile funcții definite de utilizator, trebuie să specificați tipurile de intrare și de ieșire. Pentru tipurile simple precum Decimal sau Text, acest lucru este ușor, deoarece aceste tipuri de bază sunt predefinite. Pentru tipuri mai complexe, cum ar fi înregistrări sau tabele, utilizați funcția Type pentru a crea tipul.

Funcția Type face, de asemenea, mai ușor de lucrat cu obiectele netipizate. Cu funcțiile ParseJSON, IsType și AsType , un obiect fără tip poate fi convertit într-un obiect tipat în care coloanele nu mai trebuie să fie tastate individual la punctul de utilizare.

Funcția Type iține o TypeSpecification , deoarece este singurul argument. Cea mai simplă specificație de tip este de a face referire la un tip existent, de exemplu Type( Text ). O specificație de tip pentru o înregistrare sau un tabel este similară cu definirea unei înregistrări sau a unui tabel cu valori literale, unde valorile sunt înlocuite cu nume de tip. De exemplu, {Name: "Jane"} ar fi tastat cu Type( {Name: Text} ). Tabelele sunt specificate cu paranteze drepte, nu cu funcția Tabel și poate fi furnizată o singură înregistrare. De exemplu, [1,2,3] ar fi tastat cu Type( [Number] ).

Utilizați funcția RecordOf pentru a extrage tip înregistrare dintr-un tip de tabel. De exemplu, Type( RecordOf( Library ) ) ar returna tipul unei singure cărți din bibliotecă. Pentru a face un tabel, tastați dintr-un tip înregistrare, Încapsulare tip înregistrare între paranteze drepte. De exemplu, Type( [ Book ] ) definește o bibliotecă. RecordOf poate fi utilizat numai în cadrul funcției Type .

Funcția Type și valoarea tipului pe care o returnează pot fi utilizate numai în anumite locuri în Power Fx, cum ar fi al doilea argument pentru a46>ParseJSON. În aplicațiile planșă de lucru, funcția Type poate fi utilizată cu o formulă numită în App.Formulas.

Sintaxă

RecordOf( TableType )

  • TableType – Obligatoriu. Numele tipului unui tabel. Aceasta nu acceptă o specificație de tip, trebuie să fie numele unui tip definit anterior pentru un tabel.

Tastați( TypeSpecification )

  • TypeSpecification – Obligatoriu. O specificație de tip.

Exemple

Funcția de tip

Luați în considerare următoarele definiții în 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 ] );

Observați cum textul propriu-zis al titlului "A Study in Scarlet" este înlocuit cu numele tipului Text în specificația tipului, un substituent pentru orice valoare de text. Un parametru sau o variabilă de tip BookType poate deține una dintre cărțile din Library, în timp ce LibraryType poate deține întregul tabel. Cu aceste tipuri în loc, putem defini aceste funcții definite de utilizator:

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

De asemenea, puteți utiliza BookType pentru a analiza un șir JSON care conține o carte:

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

Utilizarea BookType ca al doilea argument pentru ParseJSON are ca rezultat o înregistrare tipată care poate fi folosită ca orice altă Power Fx înregistrare.

Funcția RecordOf

În exemplul de funcție Type , începeți cu BookType și construiți LibraryType înfășurarea unui tabel în jurul acesteia. Am fi putut defini aceste tipuri invers cu:

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