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


Функции RecordOf и Type

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

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

Внимание!

Description

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

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

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

Функция Type принимает TypeSpecification в качестве единственного аргумента. Простейшим способом определения типа является ссылка на существующий тип, например 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 можно использовать с именованной формулой в 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

В примере с функцией Type вы начинаете с 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 ) );