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


RecordOf и Type функции

Применимо к: приложениям на основе холста

Создает пользовательский тип для использования с пользовательскими функциями и нетипизированными значениями.

Внимание!

Description

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

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

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

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

Используйте функцию RecordOf для извлечения типа записи из типа таблицы. Например, Type( RecordOf( Library ) ) вернет тип одной книги из библиотеки. Чтобы сделать тип таблицы из типа записи, заключите тип записи в квадратные скобки. Например, Type( [ Book ] ) определяет библиотеку. RecordOf можно использовать только в Type функции.

Функция Type и возвращаемое значение типа могут использоваться только в определенных местах в Power Fx, например второй аргумент в ParseJSON. В приложениях Type Canvas функция может использоваться с именованной формулой в App.Formulas.

Синтаксис

RecordOf( TableType )

  • TableType — обязательно. Имя типа таблицы. Это не принимает спецификацию типа, это должно быть имя ранее определенного типа для таблицы.

Type( TypeSpecification )

  • TypeSpecification — обязательный аргумент. Спецификация типа.

Примеры

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 функция

В примере функции вы начинаете TypeBookType работу с и создаете 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 ) );