As funções AsType e IsType
Aplica-se a: Aplicativos de tela
Aplicativos baseados em modelo
Power Pages
Power Platform CLI
Verifica se uma referência de registro é um tipo de tabela específico (IsType) e trata a referência como esse tipo (AsType) específico.
Observação
Os comandos PAC CLI pac power-fx não oferece suporte a IsType.
Description
As funções AsType e IsType podem ser usadas para converter referências de registro (por exemplo, pesquisas polimórficas no Dataverse) e objetos sem tipo em objetos com tipos que podem ser usados diretamente.
Referências de Registro
Leia Compreender referências de registros e pesquisas polimórficas para uma introdução mais ampla e mais detalhes.
Um campo de pesquisa geralmente se refere a registros em uma tabela específica. Como o tipo de tabela está bem estabelecido, você pode acessar os campos da pesquisa usando uma notação de ponto simples. Por exemplo, First( Accounts ).'Primary Contact'.'Full Name' vai da tabela Accounts para o registro Primary Contact na tabela Contacts e extraia o campo Full Name.
O Microsoft Dataverse também oferece suporte a campos de pesquisa polimórficos, que podem se referir a registros de um conjunto de tabelas, como nestes exemplos.
Campo de consulta | Pode fazer referência a |
---|---|
Proprietário | Usuários ou Equipes |
Cliente | Contas ou Contatos |
Referente a | Contas, Contatos, Artigos de Conhecimentoetc. |
Em fórmulas de aplicativo de tela, use referências de registro para trabalhar com pesquisas polimórficas. Como uma referência de registro pode se referir a tabelas diferentes, não está claro quais campos estão disponíveis no runtime ao escrever uma fórmula. A notação Record.Field não está disponível. Essas fórmulas devem se adaptar aos registros que o aplicativo encontra quando é executado.
A função IsType testa se uma referência de registro se refere a um tipo de tabela específico. A função retorna um Booliano TRUE ou FALSE.
A função AsType trata uma referência de registro como um tipo de tabela específico, também conhecida como conversão. Você pode usar o resultado como se fosse um registro da tabela e novamente usar a notação Record.Field para acessar todos os campos desse registro. Ocorrerá um erro se a referência não for do tipo específico.
Use essas funções juntas para primeiro testar o tipo de tabela de um registro e, em seguida, tratá-lo como um registro desse tipo para 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'
)
Essas funções são necessárias apenas se estiver acessando os campos de uma referência de registro. Por exemplo, você pode usar referências de registro na função Filter sem IsType ou AsType:
Filter( Accounts, Owner = First( Users ) )
Da mesma forma, você pode usar referências de registro com a função Patch:
Patch( Accounts, First( Accounts ), { Owner: First( Teams ) } )
Quando usado em um contexto de registro, como em um controle Galeria ou Editar formulário, o operador de desambiguação global pode ser necessário para fazer referência ao tipo de tabela. Por exemplo, essa fórmula seria eficaz para uma galeria que exibe uma lista de contatos em que Nome da Empresa é um 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 por meio do nome da fonte de dados que está conectada à tabela. Para que a fórmula funcione, você também deve adicionar um fonte de dados ao aplicativo para todos os tipos que deseja testar ou transmitir. Por exemplo, você deve adicionar a tabela Users como um fonte de dados se você quiser usar IsType e AsType com uma pesquisa Proprietário e registros dessa tabela. Você pode adicionar apenas as fontes de dados que você realmente usa em seu aplicativo; não é necessário adicionar todas as tabelas às quais uma consulta pode fazer referência.
Se a referência do registro estiver em branco, IsType retornará FALSE e AsType retornará em branco. Todos os campos de um registro em branco também estarão em branco.
Objetos sem Tipo
Importante
- Usar AsType e IsType com objetos sem tipo é um recurso experimental.
- 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
- O comportamento que este artigo descreve 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 valiosos para nós. Dê a sua opinião no Fórum da comunidade de recursos experimentais do Power Apps.
Um objeto sem tipo de uma API da Web ou da [função ParseJSON] precisa ser convertido em um objeto com tipo antes de poder ser usado no Power Fx. As opções para fazer isso incluem:
- Digite implicitamente o campo no ponto em que é utilizado. Por exemplo, um objeto é convertido em um número se for usado com o operador
+
, se puder ser convertido em um número. Essa opção pode ter conversões inesperadas e não pode converter registros e tabelas como um todo. - Digite explicitamente cada campo individualmente com as funções Decimal, Text, DateTime, GUID e outras funções de construtor de tipo. Isso é o mais invasivo para suas fórmulas, pois cada campo deve ser feito separadamente.
- Digite explicitamente o JSON com o segundo argumento para a função ParseJSON. Esta é uma opção fácil que evita a necessidade do objeto sem tipo.
- Digite explicitamente um objeto sem tipo usando a função AsType. Você 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 registro, geralmente um campo de pesquisa que pode se referir a um registro em qualquer uma das várias tabelas.
- TableType - obrigatório. A tabela específica na qual o registro deve ser lançado.
AsType (UntypedObject, TypeSpecification)
- UntypedObject - Obrigatório. Uma referência de registro, geralmente um campo de pesquisa que pode se referir a um registro 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 registro, geralmente um campo de pesquisa que pode se referir a um registro em qualquer uma das várias tabelas.
- TableType - obrigatório. A tabela específica a ser testada.
IsType( UntypedObject, TypeSpecification )
- UntypedObject - Obrigatório. Uma referência de registro, geralmente um campo de pesquisa que pode se referir a um registro 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 Registro
Noções básicas sobre referências de registros e pesquisas polimórficas contém exemplos extensos.
Crie um aplicativo de tela em branco para tablets.
No painel esquerdo, selecione Dados>Adicionar dados. E, em seguida, adicione as contas Accounts e Contacts.
No painel esquerdo, selecione + (Inserir) >Layout>Galeria vertical em branco.
Selecione Conectar-se aos dados e, em seguida, selecione Contacts como a fonte de dados.
Defina o layout da galeria como Title and subtitle.
No painel Dados, abra a lista Title1 e selecione Full Name.
Selecione o controle de rótulo Subtitle1.
Defina a propriedade Text de Subtitle1 como 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 'Nome da Empresa' estiver em branco.
- "Account:" e, em seguida, o campo Nome da Conta da tabela Accounts se o campo Company Name referir-se a uma conta.
- "Contact:" e, em seguida, o campo Full Name da tabela Contacts se o campo Company Name referir-se a uma conta.
Seus resultados podem ser diferentes porque os dados de exemplo podem ter sido modificados para mostrar mais tipos de resultados.
Objetos sem Tipo
Os exemplos a seguir mostram um registro JSON simples interpretado de várias maneiras por ParseJSON, IsType e IsType no Pac CLI Power Fx REPL.
Neste primeiro exemplo, nenhuma informação de tipo é fornecida ao ParseJSON, portanto, ela retorna 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 em um número quando utilizado em um contexto numérico.
>> 1 + rec.a
2
Como alternativa, este exemplo converte explicitamente o registro em um registro do Power Fx digitado com o segundo argumento para ParseJSON,
>> ParseJSON( "{""a"":1}", Type( {a: Number} ) )
{a:1}
E outra alternativa, este exemplo converte explicitamente o registro em um registro do Power Fx digitado usando 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