Partilhar via


RecordOf e Type funções

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 registros ou tabelas, use a Type função para criar o tipo.

A Type função também torna os valores dinâmicos mais fáceis de trabalhar. Com as funções ParseJSON,IsType e AsType , um valor dinâmico pode ser convertido em um objeto tipado no qual as colunas não precisam mais ser digitadas individualmente no ponto de uso.

A Type função usa um TypeSpecification como seu ú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 RecordOf função para extrair o tipo de registro 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 Type função.

A Type função e o valor do tipo que ela retorna só podem ser usados em locais específicos no Power Fx, como o segundo argumento para ParseJSON. Em aplicativos Canvas, a Type função pode ser usada com uma fórmula nomeada em App.Formulas.

Sintaxe

RecordOf( Tipo de tabela )

  • 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

Type Função

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.

RecordOf Função

No exemplo de Type função, você começa com BookType e constrói LibraryType envolvendo 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 ) );