Funções AsType e IsType
Aplica-se a: Aplicações de tela Aplicações condicionadas por modelo Power Pages Power Platform CLI
Verifica se uma referência de registo é um tipo de tabela específico (IsType) e trata a referência como esse tipo (AsType).
Nota
Os comando PAC CLI pac power-fx não suportam IsType.
Descrição
As funções AsType e IsType podem ser usadas para converter referências de registo (por exemplo, procuras polimórficas no Dataverse) e objetos sem tipo em objetos com tipo que podem ser usados diretamente.
Referências de Registo
Leia Noções sobre referências de registo e pesquisas polimórficas para obter uma introdução mais ampla e mais detalhes.
Um campo de pesquisa geralmente refere-se a registos numa tabela em particular. Como o tipo de tabela está bem estabelecido, aceda aos campos da procura usando uma simples notação de pontos. Por exemplo, Primeira(Contas). 'Contacto principal'. 'Nome Completo caminha da tabela Contas para o registo de contacto primário na tabela Contactos e extrai o campo Nome Completo.
Microsoft Dataverse também suporta campos de pesquisa polimórfica, que se podem referir a registos de um conjunto de tabelas, como nestes exemplos.
Campo de pesquisa | Podem fazer referência a |
---|---|
Proprietário | Utilizadores ou Equipas |
Cliente | Contas ou Contactos |
Relativo a | Contas, Contactos, Artigos da Base de Dados de Conhecimentos, etc. |
Nas fórmulas de aplicações de tela, utilize referências de registos para trabalhar com pesquisas polimórficas. Como uma referência de registo se pode referir a diferentes tabelas, não é claro que campos estão disponíveis no runtime quando escrever uma fórmula. A notação Registo.Campo não está disponível. Essas fórmulas têm de se adaptar aos registos que a aplicação encontra quando é executada.
A função IsType testa se a referência de um registo se refere a um tipo de tabela específico. A função devolve um valor booleano TRUE ou FALSE.
A função AsType trata uma referência de registo como um tipo de tabela específico, também conhecido como seleção. Pode utilizar o resultado como se fosse um registo da tabela e utilizar novamente a notação Record.Field para aceder a todos os campos desse registo. Ocorre um erro se a referência não for do tipo específico.
Utilize estas funções em conjunto para primeiro testar o tipo de tabela de um registo e, em seguida, tratá-lo como um registo desse tipo de modo que os campos estejam disponíveis:
If( IsType( First( Accounts ).Owner, Users ),
AsType( First( Accounts ).Owner, Users ).'Full Name',
AsType( First( Accounts ).Owner, Teams ).'Team Name'
)
Estas funções são necessárias se aceder aos campos de uma referência de registo. Por exemplo, pode utilizar referências de registo na função Filter sem IsType ou AsType:
Filter( Accounts, Owner = First( Users ) )
Da mesma forma, pode utilizar referências de registo com a função Patch:
Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )
Quando for utilizado num contexto de registo, como dentro de um controlo de Galeria ou Edição de formulário, o operador global de desambiguação poderá ser necessário para referenciar o tipo de tabela. Por exemplo, esta fórmula seria eficaz para uma galeria que esteja a apresentar uma lista de contactos em que o Nome da Empresa seja uma pesquisa de Cliente:
If( IsType( ThisItem.'Company Name', Accounts ),
AsType( ThisItem.'Company Name', Accounts ).'Account Name',
AsType( ThisItem.'Company Name', Contacts ).'Full Name'
)
Para ambas as funções, especifique o tipo através do nome do origem de dados ligado à tabela. Para que a fórmula funcione, também tem de adicionar um origem de dados à aplicação para quaisquer tipos que pretenda testar ou converter. Por exemplo, deve adicionar a tabela de Utilizadores como uma origem de dados se quiser utilizar IsType e AsType com uma pesquisa do Proprietário e registos a partir dessa tabela. Pode adicionar apenas as fontes de dados que realmente utiliza na sua aplicação; não precisa de adicionar todas as tabelas a que uma pesquisa possa fazer referência.
Se a referência do registo estiver blank, IsType devolverá FALSE e AsType devolve blank. Todos os campos de registo em branco também estarão em branco.
Objetos Sem Tipo
Importante
- Usar AsType e IsType com objetos sem tipo é uma caraterística experimental.
- As caraterísticas experimentais não se destinam à produção e podem não estar completas. Estas caraterísticas estão disponíveis antes do lançamento oficial, para que possa ter acesso antecipado e enviar comentários. Mais informações: Compreender caraterísticas experimentais, de pré-visualização e retiradas em aplicações de tela
- O comportamento descrito neste artigo só está disponível quando a caraterística experimental de Tipos definidos pelo utilizador em Definições > Próximas caraterísticas > Experimentais está ativada (está desativada por predefinição).
- O seu feedback é valioso para nós. Diga-nos o que pensa no fórum da comunidade de caraterísticas experimentais do Power Apps.
Um objeto sem tipo de uma API Web ou a [função ParseJSON] precisa de ser convertido num objeto com tipo antes de poder ser usado no Power Fx. As opções para isso incluem:
- Tipifique implicitamente o campo no ponto em que é usado. Por exemplo, um objeto é convertido num número se for usado com o operador
+
, se puder ser convertido num número. Esta opção pode ter conversões inesperadas e não pode converter registos e tabelas como um todo. - Tipifique explicitamente cada campo individualmente com Decimal, Text, DateTime, GUID e outros funções de tipo construtor. Este é o mais invasivo para as suas fórmulas, pois cada campo tem de ser feito em separado.
- Tipifique explicitamente JSON com o segundo argumento da função ParseJSON. Esta é uma opção fácil que evita a necessidade do objeto sem tipo.
- Tipifique explicitamente um objeto sem tipo usando a função AsType. Também pode testar o tipo antes de tentar a conversão com a função IsType.
Sintaxe
AsType( RecordReference, TableType )
- RecordReference – Obrigatório. Uma referência de registo, muitas vezes um campo de pesquisa que se pode referir a um registo em qualquer uma das várias tabelas.
- TableType - Obrigatório. A tabela específica para a qual o disco deve ser convertido.
AsType( UntypedObject, TypeSpecification )
- UntypedObject — Obrigatório. Uma referência de registo, muitas vezes um campo de pesquisa que se pode referir a um registo em qualquer uma das várias tabelas.
- TypeSpecification — Obrigatório. Um nome de tipo ou especificação de tipo definido com a função Type.
IsType( RecordReference, TableType )
- RecordReference – Obrigatório. Uma referência de registo, muitas vezes um campo de pesquisa que se pode referir a um registo em qualquer uma das várias tabelas.
- TableType - Obrigatório. A tabela específica para a qual testar.
IsType( UntypedObject, TypeSpecification )
- UntypedObject — Obrigatório. Uma referência de registo, muitas vezes um campo de pesquisa que se pode referir a um registo em qualquer uma das várias tabelas.
- TypeSpecification — Obrigatório. Um nome de tipo ou especificação de tipo definido com a função Type.
Exemplos
Referências de Registo
Compreender as referências de registo e as pesquisas polimórficas contém exemplos extensivos.
Crie uma aplicação de tela em branco para tablets.
No painel esquerdo, selecione Dados>Adicionar dados. E, em seguida, adicione tabelas de Contas e Contactos.
No painel esquerdo, selecione + (Inserir) >Esquema>Galeria vertical em branco.
Selecione Ligar os dados e, em seguida, selecione Contactos como origem de dados.
Defina o esquema da galeria como Título e Subtítulo.
No painel Dados, abra a lista Title1 e, em seguida, selecione Nome Completo.
Selecione o controlo de etiqueta Subtitle1.
Defina a propriedade Text de Subtitle1 para esta fórmula:
If( IsBlank( ThisItem.'Company Name' ), "--", IsType( ThisItem.'Company Name', Accounts ), "Account: " & AsType( ThisItem.'Company Name', Accounts ).'Account Name', "Contact: " & AsType( ThisItem.'Company Name', Contacts ).'Full Name' )
O subtítulo na galeria mostra estes valores:
- "--" se o "Nome da Empresa" for blank.
- "Conta: " e, em seguida, o campo Nome de Conta da tabela Contas se o campo Nome da Empresa se referir a uma conta.
- "Contacto: " e, em seguida, o campo Nome completo da tabela Contactos se o campo Nome da Empresa se referir a um contacto.
Os resultados podem divergir porque os dados de amostra podem ter sido modificados para mostrar mais tipos de resultados.
Objetos Sem Tipo
Os exemplos a seguir mostram um registo JSON simples interpretado de várias maneiras por ParseJSON, AsType e IsType no Pac CLI Power Fx REPL.
Neste primeiro exemplo, nenhuma informação de tipo é fornecida a ParseJSON, portanto, devolve um objeto sem tipo.
>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Untyped: Use Value, Text, Boolean, or other functions to establish the type>
O campo é implicitamente convertido num número quando utilizado num contexto numérico.
>> 1 + rec.a
2
Alternativamente, este exemplo converte explicitamente o registo num registro com tipo do Power Fx com o segundo argumento como ParseJSON.
>> ParseJSON( "{""a"":1}", Type( {a: Number} ) )
{a:1}
E outra alternativa, este exemplo converte explicitamente o registo num registo com tipo do Power Fx que usa AsType.
>> AsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
{a:1}
Finalmente, se não tivéssemos certeza, este exemplo testa o tipo antes de convertê-lo com a função IsType.
>> IsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
true