Partilhar via


Funções RecordOf e Type

Aplica-se a: Aplicações de tela

Constrói um tipo definido pelo utilizador para uso com funções definidas pelo utilizador e valores sem tipo.

Importante

Descrição

Cada função no Power Fx define os tipos de valores que podem ser passados como parâmetros e o tipo de saída. Os tipos são verificados quando escreve uma fórmula e os erros são mostrados se não estiverem de acordo com o esperado. Os tipos também são usados pelo editor para sugerir boas opções para o que passar para a função e detetar erros o mais cedo possível.

Ao criar as suas próprias funções definidas pelo utilizador, precisa de especificar os tipos de entrada e de saída. Para tipos simples, como Decimal ou Text, isto é fácil, pois estes tipos básicos são predefinidos. Para tipos mais complexos, como registos ou tabelas, use a função Type para criar o tipo.

A função Type também facilita o trabalho com objetos sem tipo. Com as funções ParseJSON, IsType e AsType, é possível converter um objeto sem tipo num objeto com tipo em que as colunas já não precisam de ser tipificadas individualmente nesta altura da utilização.

A função Type usa um TypeSpecification como único argumento. A especificação de tipo mais simples é referenciar um tipo existente, por exemplo Type( Text ). Uma especificação de tipo para um registo ou tabela é semelhante à definição de um registo ou tabela com valores literais, onde os valores são substituídos por nomes de tipo. Por exemplo, {Name: "Jane"} seria digitado com Type( {Name: Text} ). As tabelas são especificadas entre parênteses retos, não com a função Tabela e apenas um registo pode ser fornecido. Por exemplo, [1,2,3] seria digitado com Type( [Number] ).

Use a função RecordOf para extrair o tipo de registo de um tipo de tabela. Por exemplo, Type( RecordOf( Library ) ) devolveria o tipo de um único livro da biblioteca. Para criar um tipo de tabela a partir de um tipo de registo, encapsule o tipo de registo entre parênteses retos. Por exemplo, Type( [ Book ] ) define uma biblioteca. RecordOf só pode ser usado dentro da função Type.

A função Type e o valor de tipo que devolve só podem ser usados em locais específicos no Power Fx, como o segundo argumento para ParseJSON. Em Aplicações de tela, a função Type pode ser usada com uma fórmula nomeada em App.Formulas.

Sintaxe

RecordOf( TableType )

  • TableType — Obrigatório. O nome de tipo de uma tabela. Isto não aceita uma especificação de tipo, precisa de ser o nome de um tipo definido anteriormente para uma tabela.

Type( TypeSpecification )

  • TypeSpecification — Obrigatório. Uma especificação de tipo.

Exemplos

Função Type

Considere as seguintes definições em 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 ] );

Observe como o texto do título real "A Study in Scarlet" é substituído pelo nome do tipo Text na especificação do tipo, um marcador de posição para qualquer valor de texto. Um parâmetro ou variável do tipo BookType pode conter um dos livros em Library, enquanto LibraryType pode conter a tabela inteira. Com estes tipos em vigor, podemos estabelecer estas funções definidas pelo utilizador:

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

Também pode usar o BookType para analisar uma cadeia JSON que contém um livro:

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

Usar BookType como segundo argumento para ParseJSON resulta num registo com tipo que pode ser usado como qualquer outro registo do Power Fx.

Função RecordOf

No exemplo da função Type, começa com BookType e cria LibraryType encapsulando uma tabela em torno dela. Poderíamos ter definido estes tipos de forma inversa com:

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