Compartilhar via


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

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

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

  2. No painel esquerdo, selecione Dados>Adicionar dados. E, em seguida, adicione as contas Accounts e Contacts.

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

  3. No painel esquerdo, selecione + (Inserir) >Layout>Galeria vertical 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 Title and subtitle.

    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.
    • "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