Partajați prin


RecordOf și Type funcții

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

De asemenea, funcția Type face valorile dinamice mai ușor de lucrat. Cu funcțiile ParseJSON, IsType și AsType, se poate face conversia unei valori dinamice la un obiect tastat în care coloanele nu mai trebuie tastate individual în momentul utilizării.

Funcția Type preia Un TypeSpecification ca singurul său 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 tipul de î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 se poate utiliza numai în funcție Type .

Funcția Type și valoarea de tip pe care o returnează pot fi utilizate doar în anumite locuri din Power Fx, cum ar fi al doilea argument la ParseJSON. În aplicațiile Canvas, funcția Type poate fi utilizată cu o formulă denumită în App.Formulas.

Sintaxă

RecordOf( Tip tabel )

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

Type( TypeSpecification )

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

Exemple

Type funcționa

Luați în considerare următoarele definiții în App.Formules:

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 ține una dintre cărțile din Library, în timp ce LibraryType poate ț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
)

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

RecordOf funcționa

În exemplul de Type funcție, începeți cu BookType și construiți LibraryType , încadrând un tabel în jurul său. 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 ) );