Microsoft Dataverse e a experiência de fonte de dados aprimorada

Visão geral

Em maio de 2021, muitos recursos que antes eram opcionais agora são o comportamento padrão para todos os novos aplicativos. Este artigo fornece orientações para os usuários que desenvolveram um aplicativo antes da introdução de novos recursos sobre como atualizar o aplicativo para aproveitar as funcionalidades mais recentes.

Dataverse nativo

Se tiver criado um aplicativo de tela com o Dataverse ou o Dynamics 365 Connector antes de novembro de 2019, talvez você não tenha os benefícios do uso da experiência de conexão nativa atual para o Dataverse.

Se você criou seu aplicativo antes de novembro de 2019 e não está usando uma conexão nativa do Dataverse , em Configurações na guia Próximos recursos, na guia 'Desativado', você encontrará a opção Melhorar a experiência de fonte de dados e as exibições do Microsoft Dataverse, juntamente com os Dados relacionais, opções e outros novos recursos para o Microsoft Dataverse.

Como faço para atualizar?

Atualize seu aplicativo inspecionando as configurações dos recursos e seguindo as instruções abaixo:

Dados relacionais, conjuntos de opções e outros novos recursos para o Microsoft Dataverse está desativado

Verifique a seção Desativado em Recursos futuros. Se definido como Desativado, prossiga com as instruções a seguir como uma primeira etapa da conversão.

Se você não vir Dados relacionais, conjuntos de opções e outros novos recursos para o Microsoft Dataverse em Configurações gerais, ou se a opção já estivar Ativada, ignore as etapas a seguir e continue para a próxima seção.

  • Etapa 1: Mude o recurso Usar nomes de exibição para Ativado:

    1. Mude o recurso Usar nomes de exibição para Ativado.
    2. Aguarde o monitor de integridade terminar de analisar seu aplicativo.
    3. Salve, feche e reabra o aplicativo.
    4. Resolva todos os erros de fórmula.
    5. Salve, feche e reabra o aplicativo.

    Possíveis erros e sugestões:

    É possível que alguns dos nomes de exibição recém-exibidos entrem em conflito com os nomes de exibição de outras tabelas, campos ou controles. Por exemplo, você pode ter um controle e um campo com o mesmo nome. Você pode alterar o nome do controle com um valor exclusivo para corrigir.

    Para conflitos de nome de exibição de campo e tabela, você pode ver uma fórmula que espera uma tabela, mas resolve para um nome de campo com escopo local.

    Use o colchete com um símbolo @ para indicar um escopo global para que se resolva na tabela; por exemplo, [@tableName].

  • Etapa 2: Mude os recursos Dados relacionais, conjuntos de opções e outros novos recursos para o Microsoft Dataverse e Usar tipos de dados GUID em vez de cadeias de caracteres para Ativado:

    1. Mude o recurso Dados relacionais, conjuntos de opções e outros novos recursos para o Microsoft Dataverse para Ativado:
    2. Mude o recurso Usar tipos de dados GUID em vez de cadeias de caracteres para Ativado.
    3. Aguarde o monitor de integridade terminar de analisar seu aplicativo.
    4. Resolva todos os erros de fórmula.
    5. Salve, feche e reabra o aplicativo.

    Possíveis erros e sugestões:

    É possível haver erros neste estágio se você usar um campo de opção ou valores de texto GUID embutidos em código.

    • Valores de opção: se você estiver usando o campo de opção com um identificador de texto para o valor de opção, use a notação de ponto em vez de fazer referência ao valor de opção. Por exemplo, altere Patch(Accounts, OptionSet1 = “12345”) para Patch(Accounts, OptionSet.Item1), onde Item1 corresponde ao valor 12345.
      Para obter mais informações: Exemplos detalhados.
    • GUIDs: se você estiver usando uma cadeia de caracteres GUID estática, como 015e45e1044e49f388115be07f2ee116, converta-a em uma função que retorna um objeto GUID; por exemplo, GUID(“015e45e1044e49f388115be07f2ee116”).
    • Pesquisas: se você estiver usando funções de pesquisa para obter valores de pesquisa de primeiro nível, como Lookup(Contacts, ‘contactID’ = ThisItem.ContactID”), considere usar ThisItem.PrimaryContacts (onde PrimaryContacts é o nome da tabela).

Melhorar a experiência de fonte de dados e as exibições do Microsoft Dataverse está desativado

Use as seguintes instruções para mudar o recurso Melhorar a experiência de fonte de dados e as exibições do Microsoft Dataverse para Ativado:

  1. Remova suas conexões de fonte de dados existentes do Dataverse.
  2. Mude o recurso Melhorar a experiência de fonte de dados e as exibições do Microsoft Dataverse para Ativado:
  3. Adicione a conexão do Dataverse usando a nova experiência de seleção de fonte de dados.
  4. Salve seu aplicativo.

Observação

Se o seu aplicativo for extremamente grande, a adição das conexões de fonte de dados poderá demorar um pouco. Não feche o aplicativo durante esse processo.

Como converter aplicativos de tela com o Dynamics 365 Connector

Para converter seu aplicativo que usa o Dynamics 365 Connector, você precisará remover e adicionar as conexões às suas fontes de dados. Siga as etapas abaixo para converter suas conexões em suas fontes de dados.

  1. Verifique se o recurso Melhorar a experiência de fonte de dados e as exibições do Microsoft Dataverse está Ativado.

  2. Remova suas conexões de fonte de dados existentes do Dynamics 365.

  3. Adicione as conexões para suas fontes de dados ao Dataverse usando a nova experiência de seleção fonte de dados.

    Observação

    • Se você tiver conexões com outros ambientes (diferentes dos atuais), selecione a categoria Tabela e a opção Mais (...) para mudar o ambiente. Você pode selecionar uma tabela de um ambiente diferente para adicionar ao seu aplicativo. As conexões entre locatários não funcionam com o conector nativo aprimorado. Você precisará usar a integração de dados para acessar dados entre locatários.
    • Você precisa atender a um dos seguintes requisitos para poder ver um ambiente ao qual deseja adicionar a conexão:
      • Você é o Proprietário do aplicativo ou o aplicativo é compartilhado com você como Coproprietário.
      • Você é membro de pelo menos uma destas funções de segurança: Administrador de Ambiente, Criador de Ambiente ou Administrador de Sistema. Para obter mais informações sobre as funções de segurança em um ambiente, acesse Configurar a segurança do usuário para recursos em um ambiente.
  4. Salve seu aplicativo.

Possíveis erros e sugestões:

É possível ter erros durante a conversão se: você não estiver usando nomes de exibição, se estiver usando cadeias de caracteres GUID ou se estiver usando uma opção.

  • Se o nome do controle entrar em conflito, altere o nome do controle para que ele fique diferente e exclusivo.
  • Para conflitos de nome de exibição de campo e tabela, talvez você veja uma fórmula que espera uma tabela, mas resolve para um nome de campo com escopo mais local. Use o colchete com um símbolo @ para indicar um escopo global para que se resolva na tabela; por exemplo, [@tableName].
  • Valores de opção: se você estiver usando um campo de opção com um identificador de texto para o valor de opção, use a notação de ponto em vez de fazer referência ao valor de opção. Por exemplo, altere Patch(Accounts, OptionSet1 = “12345”) para Patch(Accounts, OptionSet.Item1), onde Item1 corresponde ao valor 12345.
    Para obter mais informações: Exemplos detalhados.
  • GUIDs: se você estiver usando uma cadeia de caracteres GUID estática, como 015e45e1044e49f388115be07f2ee116, converta-a em uma função que retorna um objeto GUID; por exemplo, GUID(“015e45e1044e49f388115be07f2ee116”).
  • Pesquisas: se você estiver usando funções de pesquisa para obter valores de pesquisa de primeiro nível, como Lookup(Contacts, ‘contactID’ = ThisItem.ContactID”), considere usar ThisItem.PrimaryContacts (onde PrimaryContacts é o nome da tabela).
  • Para quaisquer referências polimórficas, consulte a seção Exemplos detalhados abaixo.

Exemplos detalhados

Pode ser desafiador converter o aplicativo para usar os novos tipos de dados Conjuntos de opções e Duas opções com controles de suporte ao atualizar um aplicativo para usar o novo recurso Melhorar a experiência de fonte de dados e exibições do Microsoft Dataverse.

Opções

Os campos _myfield e _myfield_label separados foram usados por opção anteriormente. Agora, há um único myfield que pode ser usado tanto para comparações independentes de localidade quanto para obter o rótulo específico de localidade.

Remover e adicionar cartões de dados de opção

É recomendável remover que você remova os cartões de dados existentes e adicione-os de volta para trabalhar com sua opção. Por exemplo, se estiver trabalhando com a tabela Conta e a opção Categoria, você verá que a propriedade DataField do cartão de dados foi definida como _accountcategorycode_label. Na lista de campos, você pode ver que o cartão de dados tem um tipo String:

OptionSet com nome no estilo antigo.

Com o novo recurso Experiência aprimorada de fonte de dados e exibições do Microsoft Dataverse, você não verá mais _accountcategorycode_label. Isso foi substituído por accountcategorycode. Seu cartão agora está marcado como personalizado e você verá erros. Remova o cartão de dados antigo e adicione novamente Opção. O novo cartão de dados conhece a Opção.

OptionSet com novo nome de estilo.

Editar as expressões de Escolher Filtro para usar a nova sintaxe

Antes, se você quisesse usar um valor Opção em uma expressão de Filtro, seria necessário usar o campo Valor. Por exemplo:

Filter(Account,'Category Value' = "1")

Será necessário editar esta fórmula. O identificador de texto de opção não é mais usado para o valor. Esta expressão deve ser atualizada para:

Filter(Account, Category= ‘Category (Accounts)’.’Preferred Customer’)

'Category(Accounts)' é o nome da enumeração usada no campo Categoria da tabela Contas. Esta é uma opção local. Você pode ler mais sobre as opções locais e globais aqui: Opções globais.

Editar opções de instruções de patch para usar a nova sintaxe

Este é um exemplo de instrução de patch anterior para escolha:

Patch( Accounts, First(Accounts), { ‘Category Value’: 1 } ) )

Você precisará atualizar suas instruções para seguir este formulário:

Patch( Accounts, First(Accounts), { Category: ‘Category (Accounts)’.’Preferred Customer’ } )

Desambiguação de escolha

Se o nome de exibição de uma opção campo e o nome da opção forem iguais, você precisará eliminar a ambiguidade da fórmula. Para continuar usando o exemplo de código de categoria de contas, o @ implica usar a opção, não o campo.

Filter(Accounts, 'Category Code' = [@’Category Code’].'Preferred Customer')

Duas Opções

Remover e adicionar cartões de dados Sim/Não

Remova cartões de dados existentes e adicione-os de volta para trabalhar com Sim/Não. Os tipos de dados foram reconhecidos anteriormente como boolianos simples - como verdadeiro/ativado e falso/desativado sem rótulos:

Sim/Não – estilo antigo.

Com o novo recurso Experiência aprimorada de fonte de dados e exibições do Microsoft Dataverse, seu cartão será marcado como personalizado e você verá erros. Remova o cartão de dados antigo e adicione novamente a opção. Você verá um controle de edição com duas opções por padrão depois de adicionar.

Sim/Não – novo estilo.

Se você preferir a opção de alternar para o seu campo booliano, poderá desbloquear o cartão de dados e substituir o controle no cartão de dados por uma alternância. Você também precisará definir essas propriedades na alternância.

Toggle1.Default = ThisItem.’Do not allow Bulk Emails’
Toggle1.TrueText = ‘Do not allow Bulk Emails (Accounts)’.’Do Not Allow’
Toggle1.FalseText = ‘Do not allow Bulk Emails (Accounts)’.Allow
DataCard.Value = If( Toggle1.Value,
    ‘Do not allow Bulk Emails (Accounts)’.’Do Not Allow’,
    ‘Do not allow Bulk Emails (Accounts)’.Allow )

Interruptor de alternância com duas opções.

Como refinar instruções Patch de Two Option

O uso da função Patch com Two option deve funcionar 'da forma como está'. Isso é compatível com o uso direto de true e false, semelhante ao Boolean. A única diferença é que se você tivesse colocado o valor em um controle Rótulo anterior que mostrasse verdadeiro e falso, agora ele mostrará os rótulos Two option.

Pesquisas polimórficas

As diretrizes a seguir ajudam a atualizar seu aplicativo se ele tiver feito referência a campos polimórficos. Pesquisas polimórficas, do mesmo campo, dão suporte a referências a um conjunto restrito de várias tabelas. Semelhante às referências em outras linguagens, uma referência de registro é um ponteiro para um registro específico em uma tabela específica. Uma referência de registro carrega as informações da tabela, permitindo que ela aponte para um registro em várias outras tabelas diferentes, o que difere de uma consulta normal que só pode apontar para registros em uma tabela.

Access, Set, e Filter no campo Owner de um registro

Por exemplo, o campo Proprietário em uma tabela pode se referir a um registro na tabela Usuários ou na tabela Equipes. O mesmo campo de pesquisa em registros diferentes pode se referir a registros em tabelas diferentes.

Campo Owner polimórfico.

Polimórfico com Filter e Patch

As referências de registro podem ser usadas como um registro completo:

Filter( Accounts, Owner = First( Teams ) )
Patch( Accounts, First( Accounts ), { Owner: First( Users ) })

Como uma referência pode apontar para tabelas diferentes, você deve ser específico. Você não pode usar ThisItem.Owner.Name, pois o campo de nome na tabela Equipe é Nome da Equipe, e o campo do nome na tabela Usuário é Nome Completo. O Power Apps não saberá a que tipo de pesquisa você está se referindo até executar o aplicativo.

Para corrigir esse problema:

  1. Adicione as fontes de dados para os tipos de entidade que o Owner poderia ser; no exemplo atual, Users e Teams).
  2. Use mais funções para deixar sua intenção clara.

Existem duas novas funções que você pode usar:

  • IsType – verifica se uma referência de registro é de um tipo de tabela específico.
  • AsType – converte uma referência de registro em um tipo de tabela específico.

Com essas funções, você pode escrever uma fórmula que exibe o nome do proprietário obtido de dois campos com nomes diferentes, com base no tipo de tabela do proprietário:

If( IsType( ThisItem.Owner,  [@Teams]), 
    AsType( ThisItem.Owner, [@Teams]).'Team Name', 
    AsType( ThisItem.Owner, [@Users]).'Full Name' )

Galeria com As Type.

Operador de desambiguidade global para [@Teams] e [@Users] é usado para garantir que você faça referência ao tipo de tabela global. Embora neste caso não seja necessário, é recomendável que seja sempre claro. Os relacionamentos um para muitos geralmente entram em conflito com o escopo de registro da galeria, e essa prática evita essa confusão.

Acesse e defina o campo Nome da Empresa (um tipo de dados do cliente) da tabela Contatos

O campo de pesquisa do cliente é outra pesquisa polimórfica semelhante a Owner. Você só pode ter um campo Proprietário por tabela. Mas uma tabela pode incluir zero, um ou mais campos de pesquisa do cliente. A tabela do sistema Contatos inclui o campo Nome da Empresa, que é um campo de pesquisa do cliente. Leia mostrar os campos de um cliente para obter mais detalhes.

Acesse e defina o campo Referente às tabelas de atividades, como Faxes, Telefonemas, Mensagens de email

As pesquisas polimórficas não se limitam a Accounts e Contacts. A lista de tabelas é extensível com tabelas personalizadas. Por exemplo, a tabela Faxes tem um campo de pesquisa polimórfico Referente, que pode se referir a Contas, Contatos e outras tabelas. Se você tiver uma galeria com a fonte de dados definida como Faxes, poderá usar a fórmula a seguir para exibir o nome associado ao campo de pesquisa Regarding.

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

Galeria com Regarding.

Leia Campos de pesquisa Regarding e Relacionamentos Regarding para obter mais detalhes.

Acesse a lista de todas as atividades de um registro

No Dataverse, tabelas como Faxes, Tarefas, Emails, Notas, Telefonemas, Cartas e Chats são designadas como atividades. Você também pode criar suas próprias tabelas de atividades personalizadas.

Você pode mostrar atividades de um tipo específico (como faxes ou impostos) ou todas as atividades associadas a uma tabela, como conta. Adicione a tabela Atividades e outras tabelas individuais cujos dados você pretende exibir no aplicativo de tela.

Cada vez que você adiciona um registro (por exemplo, a tabela Tarefas), é criado um registro na tabela Atividade com os campos comuns a todas as tabelas de atividades. Leia a tabela de atividades para obter mais detalhes.

O exemplo a seguir mostra que, ao selecionar uma conta, todas as atividades associadas a essa conta serão exibidas:

Atividades polimórficas.

Os registros estão sendo exibidos na tabela Atividades. Mas você ainda pode usar a função IsType para identificar que tipo de atividade elas são. Novamente, antes de usar IsType com um tipo de tabela, você deve adicionar a fonte de dados necessária.

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

Novo Polymorphic-IsType.

Acesse a lista de todas as observações de um registro

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

Campo Observações.

Filtragem

Você não pode ler ou filtrar com base no campo Regarding. No entanto, o relacionamento reverso um para muitos de Notes está disponível. Para listar todas as notas associadas a uma tabela Conta, você pode usar a seguinte fórmula:

First( Accounts ).Notes
Patch

Você não pode definir o campo Notas em uma tabela usando Patch. Para adicionar um registro à tabela Notas de uma tabela, você pode usar a função Relacionar. Crie a observação primeiro, como neste exemplo:

Relate( ThisItem.Notes, Patch( Notes, Defaults( Notes ), { Title: "A new note", isdocument:'Is Document (Notes)'.No } ) )

Próximas etapas

Confira também

O que é o Dataverse?

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