Noções básicas de referências de registros e pesquisas polimórficas em aplicativos de tela

Quando você fazia um trabalho de pesquisa na escola, provavelmente fornecia uma lista de suas referências no final. Você não incluía uma cópia do material de apoio real usado, mas um link da Web, título e autor do livro ou outras informações para que alguém pudesse rastrear a fonte original. Você misturava diferentes tipos de fontes em uma única lista, artigos de jornal ao lado de gravações de áudio, cada um com seus próprios detalhes específicos para uma citação adequada. Por exemplo, os artigos da Wikipedia geralmente incluem uma longa lista de referências.

Nos aplicativos de tela, você costuma trabalhar com cópias de registros baixados de fontes de dados. Você usa as funções LookUp and Filter e a propriedade Selected do controle Galeria para identificar o registro específico desejado. Todos os registros de Filtro ou Selecionado serão do mesmo tipo de tabela; então, você pode usar campos com uma notação .Field simples. Essas cópias geralmente incluem informações de referência para que você possa usar a função Patch para atualizar a fonte original.

Os aplicativos de tela também dão suporte a referências de registro. Assim como uma referência de trabalho de pesquisa, uma referência de registro se refere a um registro sem incluir uma cópia completa dele. Essa referência pode se referir a um registro em qualquer tabela. Também como referências de papel de pesquisa, você pode misturar registros de tabelas diferentes em uma única coluna.

Muitas operações em referências de registro são idênticas ao trabalho com registros. Você pode comparar as referências de registros entre si e com os registros completos. Você pode definir o valor de uma referência de registro com a função Patch como faria com uma pesquisa com um registro completo.

Há uma diferença de uso importante: você não pode acessar diretamente os campos de uma referência de registro sem primeiro estabelecer à qual tabela ela se refere. Isso ocorre porque os aplicativos de tela exigem que todos os tipos sejam conhecidos quando você escreve fórmulas. Como você não sabe o tipo de referência de registro até o aplicativo ser executado, não é possível usar a notação .Field simples diretamente. Você deve primeiro determinar dinamicamente o tipo de tabela com a função IsType e, depois, usar a notação .Field no resultado da função AsType.

Tipo de tabela refere-se ao esquema de cada registro em uma tabela. Cada tabela tem um conjunto único de campos com diferentes nomes e tipos de dados. Cada registro da tabela herda essa estrutura; dois registros têm o mesmo tipo de tabela quando são obtidos da mesma tabela.

Observação

Você pode escolher entre muitos conectores diferentes para se conectar a diferentes tipos de fontes de dados para aplicativos de tela. No entanto, ao trabalhar com aplicativos de tela no Power Apps Studio, colunas no Microsoft Dataverse são referenciadas como campos semelhantes a todas as outras fontes de dados. Coluna é usada apenas quando se refere a uma coluna no Dataverse. Mais informações: Atualizações terminológicas no Dataverse

Pesquisas polimórficas

O Microsoft Dataverse é compatível com relacionamentos entre registros. Cada registro na tabela Contas tem uma coluna de pesquisa Contato Principal para um registro na tabela Contatos. A pesquisa só pode se referir a um registro em Contatos e não pode se referir a um registro, digamos, na tabela Equipes. Esse último detalhe é importante porque você sempre sabe quais colunas estarão disponíveis para a pesquisa.

O Dataverse também oferece suporte a pesquisas polimórficas, que podem se referir a um registro de qualquer tabela em um conjunto. Por exemplo, a coluna Proprietário pode se referir a um registro na tabela Usuários ou na tabela Equipes. A mesma coluna de pesquisa em registros diferentes pode se referir a registros em tabelas diferentes. Nesse caso, você nem sempre sabe quais colunas estarão disponíveis.

As referências de registros de tela foram projetadas para trabalhar com pesquisas polimórficas no Dataverse. Você também pode usar referências de registro fora deste contexto, e é assim que os dois conceitos diferem.

Na próxima seção, você começará a explorar esses conceitos trabalhando com a pesquisa Owner.

Mostrar as colunas de um proprietário de registro

Cada tabela no Dataverse inclui uma coluna Proprietário. Esta coluna não pode ser removida, você não pode adicionar outra e ela sempre exige um valor.

Para mostrar essa coluna na tabela Conta:

  1. Entre no Power Apps.

  2. Na barra do painel esquerdo, selecione Dados > Tabelas.

  3. Na lista de tabelas, selecione Conta.

  4. No canto superior direito, abra a lista de filtros (definida como Padrão, por padrão) e selecione Todos.

  5. Role para baixo até a coluna Proprietário aparecer.

    Coluna Proprietário na tabela Conta.

Esta coluna de pesquisa pode se referir a um registro na tabela Equipes ou na tabela Usuários. Nem todo registro nessas tabelas tem permissão para ser um Proprietário; verifique as funções compatíveis se você tiver um problema.

Este gráfico mostra uma galeria simples de Contas, em que a tabela Contas foi adicionada ao aplicativo como um fonte de dados:

Contas mostradas em um controle Galeria.

Importante

Neste tópico, os gráficos mostram alguns nomes e outros valores que não fazem parte dos dados de exemplo fornecidos com o Dataverse. As etapas demonstram com precisão como configurar controles para um resultado específico, mas sua experiência variará com base nos dados da sua organização.

Para mostrar o proprietário de cada conta na galeria, você poderá usar a fórmula ThisItem.Owner.Name. Mas, o campo de nome na tabela Equipe é Nome da Equipe, e o campo do nome na tabela Usuário é Nome Completo. O aplicativo não saberá o tipo de pesquisa em que você está trabalhando até a execução do aplicativo; ele pode variar entre registros na tabela Contas.

Você precisa de uma fórmula que possa se adaptar a essa variação. Você também precisa adicionar as fontes de dados para os tipos de tabela do Proprietário (neste caso, Usuários e Equipes). Adicione estas três fontes de dados ao seu aplicativo:

Tabelas de Contas, Equipes e Usuários no painel Dados.

Com essas fontes de dados em vigor, use esta fórmula para exibir o nome de um usuário ou equipe:

If( IsType( ThisItem.Owner, Teams ),
    "Team: " & AsType( ThisItem.Owner, Teams ).'Team Name',
    "User: " & AsType( ThisItem.Owner, Users ).'Full Name' )

Contas mostradas em um controle Galeria com o campo Owner exibido.

Nesta fórmula, a função IsType testa o campo Proprietário na tabela Equipes. Se for desse tipo de tabela, a função AsType o converte em um registro Equipe. Neste ponto, você pode acessar todos os campos da tabela Equipes, incluindo Nome da Equipe, usando a notação .Field. Se IsType determinar que o Proprietário não é um registro na tabela Equipes, esse campo deverá ser um registro na tabela Usuários porque o campo Proprietário é obrigatório (não pode ficar em branco).

Para usar um campo de uma referência de registro, você deve primeiro usar a função AsType para convertê-lo em um tipo de tabela específico. Você não pode acessar os campos diretamente do campo Proprietário porque o sistema não sabe que tipo de tabela você deseja usar.

A função AsType retornará um erro se o campo Proprietário não corresponder ao tipo de tabela solicitado; então, você pode usar a função IfError para simplificar esta fórmula. Primeiro, ative o recurso experimental Gerenciamento de erros no nível da fórmula:

Alternância experimental para ativar o gerenciamento de erros no nível da fórmula.

Em seguida, substitua a fórmula anterior por esta:

IfError(
    "Team: " & AsType( ThisItem.Owner, Teams ).'Team Name',
    "User: " & AsType( ThisItem.Owner, Users ).'Full Name' )

Filtrar com base em um proprietário

Parabéns - você concluiu o aspecto mais difícil de trabalhar com uma referência de registro. Outros casos de uso são mais diretos porque não acessam os campos do registro. Como exemplo, use a filtragem, que você explorará nesta seção.

Adicione um controle Caixa de combinação acima da galeria e defina essas propriedades do novo controle:

  • Items: Users
  • SelectMultiple: false

Foi adicionado o controle Caixa de combinação acima da galeria com a propriedade Items definida como Users.

Para filtrar a galeria por um usuário específico selecionado nessa caixa de combinação, defina a propriedade Items como esta fórmula:

Filter( Accounts, Owner = ComboBox1.Selected )

Galeria filtrada com base no valor definido no controle Caixa de combinação.

Importante

As instruções neste tópico são precisas se você seguir as etapas exatamente. No entanto, qualquer fórmula que se refira a um controle por seu nome falhará se o controle tiver um nome diferente. Se você excluir e adicionar um controle do mesmo tipo, o número no final do nome do controle será alterado. Para qualquer fórmula que mostre um erro, confirme se ela contém os nomes corretos de todos os controles.

Você não precisa usar IsType ou AsType porque você está comparando referências de registro a outras referências de registro ou a registros completos. O aplicativo conhece o tipo de tabela ComboBox1.Selected porque ele deriva da tabela Usuários. As contas para as quais o proprietário é uma equipe não correspondem ao critério de filtro.

Você pode ficar um pouco mais sofisticado ao oferecer suporte à filtragem por um usuário ou uma equipe.

  1. Deixe algum espaço próximo à parte superior da tela ao redimensionar a galeria e mover a caixa de combinação, insira um controle Opção acima da galeria e defina essas propriedades para o novo controle:

    • Items: [ "All", "Users", "Teams" ]
    • Layout: Layout.Horizontal
  2. Para o controle Caixa de combinação, defina esta propriedade (se a caixa de combinação desaparecer, selecione Users no controle Opção):

    • Visible: Radio1.Selected.Value = "Users"
  3. Copie e cole o controle Caixa de combinação, mova a cópia diretamente sobre o original e defina estas propriedades para a cópia:

    • Items: Teams
    • Visible: Radio1.Selected.Value = "Teams"

    O aplicativo exibirá apenas uma caixa de combinação por vez, dependendo do estado do controle Opção. Por estarem diretamente acima um do outro, parecerão ser o mesmo controle que altera seu conteúdo.

  4. Por fim, defina a propriedade Items do controle Galeria como esta fórmula:

    Filter( Accounts,
        Radio1.Selected.Value = "All"
        Or (Radio1.Selected.Value = "Users" And Owner = ComboBox1.Selected)
        Or (Radio1.Selected.Value = "Teams" And Owner = ComboBox1_1.Selected)
    )
    

    Galeria filtrada mostrando todos os registros ou um usuário ou equipe específico.

Com essas alterações, você pode mostrar todos os registros ou filtrá-los com base em um usuário ou uma equipe:

Animação mostrando diferentes resultados filtrados com base no controle Opção e nas caixas de combinação.

A fórmula é totalmente delegável. A parte que compara os valores dos botões de opção é uma constante em todos os registros e é avaliada antes do envio do restante do filtro para o Dataverse.

Se você deseja filtrar o tipo de proprietário, pode usar a função IsType, mas ainda não é delegável.

Filtrar por tipo de proprietário usando IsType.

Atualizar o proprietário usando Patch

Você pode atualizar o campo Owner da mesma maneira que qualquer outra pesquisa. Para definir o proprietário da conta atualmente selecionada como a primeira equipe:

Patch( Accounts, Gallery1.Selected, { Owner: First( Teams ) } )

Essa abordagem não difere de uma pesquisa normal porque o aplicativo sabe o tipo de First (Teams). Se você deseja o primeiro usuário, substitua essa parte por First (Users). A função Patch sabe que o campo Proprietário pode ser definido para um desses dois tipos de tabela.

Para adicionar esse recurso ao aplicativo:

  1. No painel Exibição de árvore, selecione o controle Opção e os dois controles Caixa de combinação ao mesmo tempo.

  2. No menu de reticências, selecione Copiar estes itens.

    Cópia de vários controles usando o modo de exibição de árvore.

  3. No mesmo menu, selecione Colar.

    Colagem de vários controles usando o modo de exibição de árvore.

  4. Mova os controles copiados para o lado direito da galeria.

    Controles copiados movidos para o lado direito da galeria.

  5. Selecione o controle Opção copiado e então altere estas propriedades:

    • Items: [ "Users", "Teams" ]
    • Padrão: If( IsType( Gallery1.Selected.Owner, Users ), "Users", "Teams" )

    Removida a opção todos do controle Opção.

  6. No controle Opção, selecione Users para que o controle Caixa de combinação que lista os usuários fique visível.

  7. Selecione o controle Caixa de combinação visível e então defina a propriedade DefaultSelectedItems como esta fórmula:

    If( IsType( Gallery1.Selected.Owner, Users ),
        AsType( Gallery1.Selected.Owner, Users ),
        Blank()
    )
    

    Propriedade padrão definida para a caixa de combinação Users.

  8. No controle Opção, selecione Teams para que o controle Caixa de combinação que lista as equipes fique visível.

  9. Selecione o controle Opção para tirar a seleção do controle Caixa de combinação agora invisível para os usuários.

  10. Selecione o controle Caixa de combinação visível para as equipes e então defina sua propriedade DefaultSelectedItems como esta fórmula:

    If( IsType( Gallery1.Selected.Owner, Teams ),
        AsType( Gallery1.Selected.Owner, Teams ),
        Blank()
    )
    

    Propriedade padrão definida para a caixa de combinação Teams.

  11. Insira um controle Botão, mova-o para baixo do controle Caixa de combinação e, em seguida, defina a propriedade Text do botão como "Patch Owner".

  12. Defina a propriedade OnSelect do botão como esta fórmula:

    Patch( Accounts, Gallery1.Selected,
        { Owner: If( Radio1_1.Selected.Value = "Users",
                     ComboBox1_2.Selected,
                     ComboBox1_3.Selected ) } )
    

    Fórmula definida no controle Botão.

Os controles Opção e Caixa de combinação copiados mostram o proprietário da conta atualmente selecionada na galeria. Com os mesmos controles, você pode definir o proprietário da conta para qualquer equipe ou usuário, selecionando o botão:

Animação mostrando o patch de Owner com um User ou Team.

Mostrar o proprietário usando um formulário

Você pode mostrar um campo Owner dentro de um formulário, adicionando um cartão personalizado. No momento da redação deste documento, você não podia alterar o valor do campo com um controle de formulário.

  1. Insira um controle Editar formulário e, em seguida, redimensione-o e mova-o para o canto inferior direito.

  2. Na guia Propriedades próxima ao lado direito da tela, abra a lista Fonte de dados e selecione Accounts.

    Controle de formulário mostrando campos adicionais com valores em branco.

  3. Defina a propriedade Item do formulário como Gallery1.Selected.

    Controle de formulário mostrando campos adicionais preenchidos desde o item selecionado na galeria.

  4. Na guia Propriedades próxima ao lado direito da tela, selecione Editar campos.

  5. No painel Campos, selecione as reticências e selecione Adicionar um cartão personalizado.

    Comando para adicionar um cartão personalizado.

    O novo cartão aparece na parte inferior do controle de formulário.

  6. Redimensione o cartão como necessário para mostrar todo o texto.

    Cartão personalizado inserido, em branco.

  7. Insira um controle Rótulo no cartão personalizado e, em seguida, defina a propriedade Text do rótulo como a fórmula que você usou na galeria:

    If( IsType( ThisItem.Owner, Teams ),
        "Team: " & AsType( ThisItem.Owner, Teams ).'Team Name',
        "User: " & AsType( ThisItem.Owner, Users ).'Full Name' )
    

    Cartão personalizado mostrando o campo Owner em um controle de rótulo.

Para cada seleção na galeria, mais campos da conta, incluindo o proprietário do registro, aparecem no formulário. Se você alterar o proprietário usando o botão Patch, o controle de formulário também mostra essa alteração.

Animação mostrando o controle de formulário respondendo a alterações na galeria.

Mostrar as colunas de um cliente

No Dataverse, a coluna de pesquisa Cliente é outra pesquisa polimórfica muito semelhante a Proprietário.

Proprietário é limitado a um por tabela, mas as tabelas podem incluir zero, um ou mais colunas de pesquisa Cliente. A tabela do sistema Contatos inclui a coluna Nome da Empresa, que é uma coluna de pesquisa Cliente.

Tabela de contatos que mostra a coluna Nome da Empresa como um tipo de dados Cliente que não é obrigatório.

Você pode adicionar mais colunas de pesquisa Cliente para uma tabela, selecionando o tipo de dados Cliente para uma nova coluna.

Tipo de dados Cliente da lista de tipos de dados ao criar uma coluna.

Um campo de pesquisa Cliente pode se referir a um registro na tabela Contas ou na tabela Contatos. Você usará as funções IsType e AsType com essas tabelas; então, agora é um bom momento para adicioná-los como fontes de dados (você pode deixar Equipes e Usuários em vigor).

As tabelas Contas, Equipes, Usuários e Contatos no painel Dados.

O tratamento dos campos Customer e Owner é tão semelhante que você pode literalmente copiar o aplicativo ( Arquivo > Salvar como e então especificar um nome diferente) e fazer estas substituições simples:

Local Exemplo de Owner Exemplo de Customer
Ao longo de Proprietário 'Customer Name'
Ao longo de Usuários Contas
Ao longo de Equipes Contatos
Propriedade Items da galeria Contas Contatos
Propriedade Items do formulário Contas Contatos
O primeiro argumento de Patch
na propriedade OnSelect do botão
Contas Contatos
Filtrar a propriedade Items da opção [ "All", "Users", "Teams" ] [ "All", "Accounts", "Contacts" ]
Patch para a propriedade Items da opção [ "Users", "Teams" ] [ "Accounts", "Contacts" ]
Propriedade Visible da caixa de combinação "Users" e "Teams" "Accounts" e "Contacts"

Por exemplo, a nova galeria deve ter esta propriedade Items:

Filter( Contacts,
    Radio1.Selected.Value = "All"
    Or (Radio1.Selected.Value = "Accounts" And 'Company Name' = ComboBox1.Selected)
    Or (Radio1.Selected.Value = "Contacts" And 'Company Name' = ComboBox1_1.Selected)
)

Aplicativo do cliente derivado do aplicativo Owner com alterações simples aplicadas.

Duas diferenças importantes entre Customer e Owner requer uma atualização das fórmulas dentro da galeria e do formulário:

  1. Relações um-para-muitos entre Contas e Contatos têm precedência quando você se refere a esses tipos de tabela por nome. Em vez de Accounts, use [@Accounts]; em vez de Contacts, use [@Contacts]. Usando o operador de desambiguidade global, você garante que está se referindo ao tipo de tabela em IsType e AsType. Esse problema existe apenas no contexto de registro da galeria e nos controles de formulário.

  2. O campo Owner deve ter um valor, mas os campos Customer podem ficar em branco. Para mostrar o resultado correto sem um nome de tipo, teste para este caso com a função IsBlank e mostre uma cadeia de caracteres de texto vazia.

Ambas as alterações estão na mesma fórmula, que aparece no cartão personalizado no formulário, bem como na propriedade Text do controle Rótulo da galeria:

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

Atualizar para a propriedade Text do controle Rótulo na galeria.

Com essas alterações, você pode exibir e alterar o campo Nome da Empresa na tabela Contatos.

Animação que mostra como a seleção de um contato altera os outros controles e o formulário.

Compreender sobre as colunas de pesquisa

A coluna de pesquisa Referente a difere um pouco das que você já trabalhou neste tópico. Você começará aplicando os padrões descritos neste tópico anteriormente e aprenderá outros truques.

Você pode começar simplesmente com a tabela Faxes. Esta tabela tem uma coluna de pesquisa polimórfica Referente a, que pode se referir a Contas, Contatos e outras tabelas. Você pode usar o aplicativo para Customers e modificá-lo para Faxes.

Local Exemplo de Customer Exemplo de Faxes
Ao longo de 'Customer Name' Referente a
Propriedade Items da galeria Contatos Fax
Propriedade Items do formulário Contatos Fax
O primeiro argumento de Patch
na propriedade OnSelect do botão
Contatos Fax

Novamente, você precisará adicionar um fonte de dados: desta vez para Faxes. Na guia Exibir, selecione Fontes de dados:

Painel de dados mostrando as tabelas Contas, Equipes, Usuários, Contatos e Faxes.

Uma diferença importante para Regarding é que não se limita a Accounts e Contacts. Na verdade, a lista de tabelas é extensível com tabelas personalizadas. A maior parte do aplicativo pode acomodar esse ponto sem modificação, mas você deve atualizar a fórmula do rótulo na galeria e o formulário:

If( IsBlank( ThisItem.Regarding ), "",
    IsType( ThisItem.Regarding, Accounts ),
        "Account: " & AsType( ThisItem.Regarding, Accounts ).'Account Name',
    IsType( ThisItem.Regarding, Contacts ),
        "Contacts: " & AsType( ThisItem.Regarding, Contacts ).'Full Name',
    ""
)

Propriedade Text atualizada para o controle Rótulo para pesquisas Regarding.

Depois de fazer essas alterações, você trabalhará com a pesquisa Regarding, assim como você fez com as pesquisas Owner e Customer.

Animação que mostra como a seleção de um item na galeria altera os outros controles e o formulário.

Noções básicas de relacionamentos Regarding

Regarding difere de Owner e Customer porque o primeiro envolve um relacionamento muitos para um. Por definição, um relacionamento inverso, um para muitos, permite escrever First( Accounts ).Faxes.

Vamos voltar e examinar as definições da tabela. No Dataverse, tabelas como Faxes, Tarefas, Emails, Notas, Telefonemas, Cartas e Chats são designados como atividades. Você também pode criar suas próprias tabelas de atividades personalizadas. Quando você exibe ou cria uma tabela de atividades, as configurações aparecem em Mais configurações.

Configuração da tabela de atividades ao criar uma tabela.

Outras tabelas poderão ser relacionadas a uma tabela de atividades se estiverem habilitadas como uma tarefa de atividades nas configurações da tabela. Contas, Contatos e muitas outras tabelas padrão são assim designadas (novamente, em Mais configurações).

Configuração da tarefa de atividades ao criar uma tabela.

Todas as tabelas de atividades e tabelas de atividade-tarefa têm um relacionamento implícito. Se você alterar o filtro para Tudo na parte superior da tela, selecione a tabela Faxes e, em seguida, selecione a guia Relacionamentos. Aparecerão todas as tabelas que podem ser destino de uma pesquisa Referente a.

Relacionamentos da tabela Faxes mostrando Referente a relacionamentos muitos para um.

Se você mostrar os relacionamentos da tabela Contas, todas as tabelas que podem ser uma fonte do campo de pesquisa Referente a aparecerão.

Relacionamentos da tabela Conta mostrando Referente a relacionamentos um para muitos.

O que isso tudo significa?

  • Ao escrever fórmulas, você deve considerar que a lista de tabelas de atividades não é fixa e você pode criar a sua própria. A fórmula deve lidar apropriadamente com uma tabela de atividades que você não esperava.
  • As tarefas de atividade e atividades têm um relacionamento um para muitos. Você pode facilmente solicitar todos os faxes relacionados a uma conta.

Para explorar esse conceito no aplicativo:

  1. Adicione outra tela.

    Inserir uma tela em branco.

  2. Insira um controle Galeria, redimensione-o e mova-o para o lado esquerdo da tela.

  3. Na guia Propriedades próxima ao lado direito da tela, defina a propriedade Items da galeria como Accounts.

    Definir Items como Accounts no painel de propriedades.

  4. Defina o layout da galeria como Title e defina o campo de título como Account Name.

    Defina Layout como Title para o controle Galeria no painel de propriedades.

  5. Adicione uma segunda galeria, redimensione-a e então mova-a para o lado direito da tela.

  6. Defina a propriedade Items da nova galeria como Gallery2.Selected.Faxes.

    Esta etapa retorna a lista filtrada de faxes para uma determinada conta.

    Defina a propriedade Items da galeria que mostra faxes.

  7. Defina o layout da galeria como Título e subtítulo e defina o campo de título para mostrar o campo Subject (que pode estar em minúsculas, subject).

    Definir o título para o campo Subject.

Conforme você seleciona um item na lista de contas, a lista de faxes mostra faxes somente para essa conta.

Animação mostrando a seleção na galeria de contas, conduzindo a lista de faxes.

Tabela de atividades

Como a seção anterior descreve, você pode mostrar todos os faxes de uma conta. No entanto, você também pode mostrar todas as atividades de uma conta, incluindo faxes, mensagens de email, telefonemas e outras interações.

Para o último cenário, você usa a tabela Atividade. Você pode mostrar esta tabela ativando Tudo no canto superior direito para remover o filtro da lista de tabelas.

Lista de tabelas mostrando a tabela Atividade.

A tabela Atividade é especial. Sempre que você adiciona um registro à tabela Faxes, o sistema também cria um registro na tabela Atividade com as colunas que são comuns em todas as tabelas de atividades. Entre essas colunas, Assunto é uma das mais interessantes.

Você pode mostrar todas as atividades alterando apenas uma linha no exemplo anterior. Substitua Gallery2.Selected.Faxes por Gallery2.Selected.Activities.

Alteração da propriedade Items para a segunda galeria, passando de fax para atividades.

Os registros são obtidos da tabela Atividade, mas você pode usar a função IsType para identificar o tipo de atividade. Novamente, antes de usar IsType com um tipo de tabela, você deve adicionar a fonte de dados.

Painel de dados mostrando todas as tabelas necessárias para a função IsType.

Usando esta fórmula, você pode mostrar o tipo de registro em um controle Rótulo na galeria:

If( IsType( ThisItem, Faxes] ), "Fax",
    IsType( ThisItem, 'Phone Calls' ), "Phone Call",
    IsType( ThisItem, 'Email Messages' ), "Email Message",
    IsType( ThisItem, Chats ), "Chat",
    "Unknown"
)

Defina a propriedade de texto como uma fórmula para mostrar informações de fax, telefonemas e outras atividades.

Você também pode usar AsType para acessar os campos do tipo específico. Por exemplo, esta fórmula determina o tipo de cada atividade e, para telefonemas, mostra o número de telefone e a direção da chamada da tabela Números de Telefone:

If( IsType( ThisItem, Faxes ), "Fax",
    IsType( ThisItem, 'Phone Calls' ),
       "Phone Call: " &
       AsType( ThisItem, 'Phone Calls' ).'Phone Number' &
       " (" & AsType( ThisItem, 'Phone Calls' ).Direction & ")",
    IsType( ThisItem, 'Email Messages' ), "Email Message",
    IsType( ThisItem, Chats ), "Chat",
    "Unknown"
)

Propriedade Text expandida com mais informações para um telefonema.

Como resultado, o aplicativo mostra uma lista completa de atividades. O campo Subject aparece para todos os tipos de atividades, independentemente de a fórmula as levar em consideração. Para os tipos de atividades que você conhece, é possível mostrar os nomes dos tipos e informações específicas sobre cada atividade.

Tela completa mostrando informações para diferentes tipos de atividades.

Tabela Notas

Até agora, todos os exemplos de Referente a foram baseados em atividades, mas a tabela Notas representa outro caso.

Ao criar uma tabela, você pode habilitar anexos.

Habilitar anexos e notas ao criar uma tabela.

Se você marcar a caixa de seleção para habilitar anexos, criará um relacionamento Referente a com a tabela Notas, como este gráfico mostra para a tabela Contas:

Tabela Conta mostrando relacionamento com Notas por meio de um relacionamento um para muitos.

Além dessa diferença, você usa a pesquisa Regarding da mesma maneira que usa atividades. As tabelas habilitadas para anexos têm uma relação um para muitos com Notas, como neste exemplo:

First( Accounts ).Notes

Observação

Quando este documento foi escrito, a pesquisa Referente a não estava disponível para a tabela Notas. Você não pode ler ou filtrar com base na coluna Referente a e não pode definir a coluna usando Patch.

No entanto, o relacionamento inverso um para muitos de Notes está disponível, para que você possa filtrar uma lista de observações para um registro habilitado para anexos. Você também pode usar a função Relate para adicionar uma observação à tabela Notes de um registro, mas a observação deve ser criada primeiro, como neste exemplo:

Relate( ThisItem.Notes, Patch( Notes, Defaults( Notes ), { Title: "A new note" } ) )

Participantes da atividade

No momento da redação deste artigo, os aplicativos de tela não eram compatíveis com participantes de atividades.

Observação

Você pode nos falar mais sobre suas preferências de idioma para documentação? Faça uma pesquisa rápida. (Observe que esta pesquisa está em inglês)

A pesquisa levará cerca de sete minutos. Nenhum dado pessoal é coletado (política de privacidade).