RecordOf и Type функции

Отнася се за: Приложения за платно

Конструира дефиниран от потребителя тип за използване с дефинирани от потребителя функции и нетипизирани стойности.

Description

Всяка функция в Power Fx определя типовете стойности, които могат да бъдат подадени като параметри и вида на изхода. Типовете се проверяват, когато пишете формула и се показват грешки, ако не са в съгласие с очакваното. Типовете също се използват от редактора, за да предложат добри опции за това какво да се предаде във функцията и да се открият грешки възможно най-рано.

Когато създавате свои собствени потребителски функции, трябва да посочите типовете вход и изход. За прости типове като десетичен или текст това е лесно, тъй като тези основни типове са предварително дефинирани. За по-сложни типове, като например записи или таблици, използвайте функцията Type , за да създадете типа.

Функцията 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. В приложенията Type Canvas функцията може да се използва с наименувана формула в App.Formulas.

Syntax

RecordOf( Тип таблица )

  • TableType – Задължително. Името на типа на таблица. Това не приема спецификация на типа, трябва да е името на предварително дефиниран тип за таблица.

Type( TypeSpecification )

  • ТипСпецификация – Задължително. Спецификация на типа.

Examples

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