Compartilhar via


AsType e IsType funções

Função Aplica-se a
AsType Aplicativos de tela Copilot Studio Aplicativos baseados em modelo Power Platform CLI Dataverse funções Power Pages
IsType Aplicativos de tela Copilot Studio Aplicativos baseados em modelo Do Dataverse funções Power Pages

Verifica se uma referência de registro é um tipo de tabela específico (IsType) e trata a referência como esse tipo (AsType).

Observação

Os comandos pac CLI pac power-fx não dão suporteIsType.

Description

As AsType funções e IsType as funções podem ser usadas para converter referências de registro (por exemplo, pesquisas polimórficas no Dataverse) e valores dinâmicos em valores tipados 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, você não pode saber quais campos estão disponíveis em runtime ao escrever uma fórmula. A notação Record.Field não está disponível. Essas fórmulas precisam se adaptar aos registros que o aplicativo encontra quando ele é executado.

A IsType função verifica 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 AsType função trata uma referência de registro como um tipo de tabela específico, também chamado de conversão. Use o resultado como se fosse um registro da tabela e use a notação Record.Field para acessar todos os campos desse registro. Se a referência não for do tipo específico, ocorrerá um erro.

Use essas funções em conjunto para primeiro verificar 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'
)

Você só precisará dessas funções se acessar os campos de uma referência de registro. Por exemplo, você usa 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 você usa essas funções em um contexto de registro, como em um controle de formuláriode Edição ou Galeria, talvez seja necessário o operador de desambiguação global para fazer referência ao tipo de tabela. Por exemplo, essa fórmula funciona para uma galeria que exibe uma lista de contatos em que o Nome da Empresa é uma pesquisa do 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 usando o nome da fonte de dados conectada à tabela. Para que a fórmula funcione, adicione uma fonte de dados ao aplicativo para todos os tipos que você deseja verificar ou converter. Por exemplo, adicione a tabela Usuários como uma fonte de dados se você quiser usar IsType e AsType com uma pesquisa de proprietário e registros dessa tabela. Adicione apenas as fontes de dados que você usa em seu aplicativo; você não precisa adicionar todas as tabelas que uma pesquisa pode referenciar.

Se a referência de 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.

Valores dinâmicos

Importante

Um valor dinâmico de uma API Web ou da função [ParseJSON ] precisa ser convertido em um valor tipado específico antes que você possa usá-lo no Power Fx. Aqui estão algumas opções:

  1. Digite implicitamente o campo no ponto em que você o usa. Por exemplo, um objeto será convertido em um número se você usá-lo com o + operador, se ele puder ser convertido em um número. Essa opção pode causar conversões inesperadas e não pode converter registros e tabelas como um todo.
  2. Digite explicitamente cada campo individualmente com as funções Decimal, Text, DateTime, GUID e outras funções de construtor de tipo. Essa opção é a mais invasiva para suas fórmulas porque você precisa fazer cada campo separadamente.
  3. Digite explicitamente o JSON com o segundo argumento para a função ParseJSON. Essa opção é fácil e evita a necessidade do valor dinâmico .
  4. Digite explicitamente um valor dinâmico usando a AsType função. Você também pode verificar o tipo antes de tentar a conversão com a IsType função.

Sintaxe

AsType( RecordReference, TableType )

  • RecordReference - obrigatório. Uma referência de registro, geralmente um campo de pesquisa que se refere a um registro em qualquer uma das várias tabelas.
  • TableType - obrigatório. A tabela específica para a qual converter o registro.

AsType( DynamicValue, TypeSpecification )

  • DynamicValue – Obrigatório. Um valor dinâmico da função ParseJSON ou da chamada à API.
  • TypeSpecification - Obrigatório. Um nome de tipo ou especificação de tipo que você define 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 para a qual testar.

IsType( DynamicValue, TypeSpecification )

  • DynamicValue – Obrigatório. Um valor dinâmico da função ParseJSON ou de uma chamada à API.
  • 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.

  1. Crie um aplicativo de tela em branco para tablets.

  2. No painel esquerdo, selecione Adicionar>dados e, em seguida, adicione as tabelas Contas e Contatos .

    Aplicativo em branco com duas fontes de dados: contas e contatos.

  3. No painel esquerdo, selecione + (Inserir) >Galeria vertical layout>em branco.

    Inserir um controle de galeria com um layout vertical em branco.

  4. Selecione Conectar-se aos dados e, em seguida, selecione Contacts como a fonte de dados.

  5. Defina o layout da galeria como Título e subtítulo.

    Abrir o seletor de layout no painel de propriedades.

    Definir layout como Title and subtitle.

  6. No painel Dados, abra a lista Title1 e selecione Full Name.

    Definir valor do título.

  7. Selecione o controle de rótulo Subtitle1.

    Definir valor do subtítulo.

  8. 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'
    )
    

    A tela agora está completa, mostrando contas e contatos misturados na galeria.

    O subtítulo na galeria mostra estes valores:

    • "--" se 'Nome da Empresa' estiver em branco.
    • "Conta: " e o campo Nome da Conta da tabela Contas se o campo Nome da Empresa se referir a uma conta.
    • "Contato: " e o campo Nome Completo da tabela Contatos se o campo Nome da Empresa se referir a um contato.

    Seus resultados podem ser diferentes porque os dados de exemplo podem ser modificados para mostrar mais tipos de resultados.

Valores dinâmicos

Os exemplos a seguir mostram um registro JSON simples interpretado de várias maneiras por ParseJSONAsType e IsType no PAC CLI Power Fx REPL.

Neste primeiro exemplo, nenhuma informação de tipo é fornecida ao ParseJSON, portanto, ela retorna um valor dinâmico.

>> Set( rec, ParseJSON( "{""a"":1}" ) )
rec: <Dynamic: Use Value, Text, Boolean, or other functions to establish the type>

O campo é implicitamente convertido em um número quando usado 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}

Por fim, se você não tiver certeza, este exemplo testará o tipo antes de convertê-lo com a IsType função.

>> IsType( ParseJSON( "{""a"":1}" ), Type( {a: Number} ) )
true