Funções RecordOf e Type
Aplica-se a: Aplicativos de tela
Constrói um tipo definido pelo usuário para uso com funções definidas pelo usuário e valores sem tipo.
Importante
- Essas funções são experimentais.
- Recursos experimentais não são destinados para uso em produção e podem não estar completos. Esses recursos são disponibilizados antes de um lançamento oficial para que você possa ter acesso antecipado e fornecer comentários. Mais informações: Compreender os recursos experimentais, em versão preliminar e descontinuados em aplicativos de tela
- Esse comportamento está disponível somente quando o recurso experimental Tipos definidos pelo usuário em Configurações > Recursos futuros > Experimentais está ativado (está desativado por padrão).
- Seus comentários são importantes. Dê a sua opinião no Fórum da comunidade de recursos experimentais do Power Apps.
Description
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 você escreve uma fórmula e os erros são mostrados se eles 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 detectar erros o mais cedo possível.
Ao criar suas próprias funções definidas pelo usuário, é necessário especificar os tipos de entrada e saída. Para tipos simples, como Decimal ou Texto, isso é fácil, pois esses tipos básicos são predefinidos. Para tipos mais complexos, como registros ou tabelas, use a função Tipo para criar o tipo.
A função Tipo também torna os objetos sem tipo mais fáceis de trabalhar. Com a função ParseJSON,IsType e AsType, um objeto sem tipo pode ser convertido em um objeto com tipo no qual as colunas não precisam mais ser tipadas individualmente no ponto de uso.
A função Type usa um TypeSpecification como seu único argumento. A especificação de tipo mais simples é fazer referência a um tipo existente, por exemplo Type( Text )
. Uma especificação de tipo para um registro ou tabela é semelhante à definição de um registro ou tabela com valores literais, em que 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 com colchetes, não com a função Table, e apenas uma linha pode ser fornecida. Por exemplo, [1,2,3]
seria digitado com Type( [Number] )
.
Use a função RecordOf para extrair o tipo de registro de um tipo de tabela. Por exemplo, Type( RecordOf( Library ) )
retornaria o tipo de um único livro da biblioteca. Para criar um tipo de tabela a partir de um tipo de registro, envolva o tipo de registro entre colchetes. 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 ela retorna só podem ser usados em locais específicos no Power Fx, como o segundo argumento para ParseJSON. Em aplicativos 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 do tipo de uma tabela. Isso não aceita uma especificação de tipo, ele precisa 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 espaço reservado para qualquer valor de texto. Um parâmetro ou variável do tipo BookType
pode conter um dos livros na Library
, enquanto LibraryType
pode conter a tabela inteira. Com esses tipos em vigor, podemos definir estas funções definidas pelo usuário:
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);
Você também pode usar o BookType
para analisar uma cadeia de caracteres 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 em um registro digitado que pode ser usado como qualquer outro registro do Power Fx.
Função RecordOf
No exemplo da função Type, você começa com BookType
e cria LibraryType
encapsulando uma tabela em torno dela. Poderíamos ter definido esses tipos ao contrário 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 ) );