Partilhar via


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

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:

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

  1. Crie uma aplicação de tela em branco para tablets.

  2. No painel esquerdo, selecione Dados>Adicionar dados. E, em seguida, adicione tabelas de Contas e Contactos.

    Aplicação em branco com duas origens de dados: contas e contactos.

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

    Inserir um controlo gallery com um esquema vertical em branco.

  4. Selecione Ligar os dados e, em seguida, selecione Contactos como origem de dados.

  5. Defina o esquema da galeria como Título e Subtítulo.

    Abrir o selecionador de esquemas no painel de propriedades.

    Definir o esquema para Título e subtítulo.

  6. No painel Dados, abra a lista Title1 e, em seguida, selecione Nome Completo.

    Definir valor do título.

  7. Selecione o controlo de etiqueta Subtitle1.

    Definir valor do subtítulo.

  8. 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 ecrã está agora concluído mostrando contas e contactos misturados na galeria.

    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