Поділитися через


Функції RecordOf та Type

Застосовується до: додатків Canvas

Створює визначений користувачем тип для використання з функціями, визначеними користувачем, і нетипізованими значеннями.

Важливо

Опис

Кожна функція в Power Fx визначає типи значень, які можуть бути передані як параметри, і тип виведення. Типи перевіряються, коли ви пишете формулу, і помилки відображаються, якщо вони не узгоджуються з очікуваним. Типи також використовуються редактором, щоб запропонувати хороші варіанти того, що потрібно передати у функцію, і виявити помилки якомога раніше.

При створенні власних визначених користувачем функцій потрібно вказувати типи введення та виведення. Для простих типів, таких як десятковий дріб або текст, це легко, оскільки ці базові типи заздалегідь визначені. Для більш складних типів, таких як записи або таблиці, використовуйте функцію Тип для створення тексту.

Функція Type також спрощує роботу з нетипізованими об’єктами. За допомогою функцій ParseJSON, IsType та AsType нетипізований об’єкт може бути перетворений на типізований об’єкт, у якому стовпці більше не потрібно окремо вводити в точці використання.

Функція Type приймає специфікацію TypeSpecification як єдиний аргумент. Найпростішою специфікацією типу є, наприклад Type( Text ), посилання на існуючий тип. Специфікація типу для запису або таблиці схожа на визначення запису або таблиці з літеральними значеннями, де значення замінюються іменами типів. Наприклад, {Name: "Jane"} буде введено за допомогою Type( {Name: Text} ). Таблиці вказуються в квадратних дужках, а не за допомогою функції Таблиця , і може бути наданий тільки один запис. Наприклад, [1,2,3] буде введено за допомогою Type( [Number] ).

Використовуйте функцію RecordOf , щоб витягнути тип запису з типу таблиці. Наприклад, Type( RecordOf( Library ) ) поверне тип окремої книги з бібліотеки. Щоб створити тип таблиці з типу запису, оберніть тип запису в квадратні дужки. Наприклад, Type( [ Book ] ) визначає бібліотеку. RecordOf можна використовувати лише у функції Type .

Функція Type і значення типу, яке вона повертає, можуть використовуватися лише в певних місцях Power Fx, наприклад, у другому аргументі ParseJSON. У програмах Canvas функцію Type можна використовувати з іменованою формулою в App.Formulas.

Синтаксис

RecordOf( TableType )

  • TableType – обов’язковий. Ім’я типу таблиці. Це не приймає специфікацію типу, це має бути ім’я раніше визначеного типу для таблиці.

Type( Специфікація типу)

  • Специфікація типу– обов’язковий. Специфікація типу.

Приклади

Функція типу

Розглянемо наступні визначення в 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 ] );

Зверніть увагу, як фактичний текст "A Study in Scarlet" заголовка замінюється на назву Text типу в специфікації типу, заповнювач для будь-якого текстового значення. Параметр або змінна типу BookType може вміщати Library одну з книг, а LibraryType може вміщати всю таблицю. Маючи ці типи, ми можемо визначити ці функції, визначені користувачем:

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

Ви також можете використовувати для BookType обробки рядка JSON, який містить книгу:

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

Використання BookType в якості другого аргументу до ParseJSON призводить до типізованого запису, який можна використовувати, як і будь-який інший Power Fx запис.

Функція RecordOf

У прикладі з функцією «Текст» ви починаєте з BookType і будуєте LibraryType , обгортаючи таблицю навколо неї. Ми могли б визначити ці типи навпаки за допомогою:

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