Partilhar via


Microsoft Dataverse e o melhoramento da experiência de origem de dados

Descrição geral

Em maio de 2021, muitas caraterísticas que eram anteriormente opcionais são agora o comportamento predefinido para todas as aplicações novas. Este artigo fornece orientações aos utilizadores que desenvolveram uma aplicação antes da introdução das caraterísticas novas, sobre como atualizar a versão da aplicação para tirar partido das caraterísticas mais recentes.

Dataverse Nativo

Se criou uma aplicação de tela com o Dataverse ou com o Dynamics 365 Connector antes de novembro de 2019, então poderá não ter os benefícios de utilizar a experiência de conexão nativa atual para o Dataverse.

Se criou a sua aplicação antes de novembro de 2019 e não está a utilizar uma ligação nativa do Dataverse, em Definições no separador Caraterísticas futuras, no separador "Preterido", encontrará a opção Melhorar as vistas de experiência de origem de dados e do Microsoft Dataverse, juntamente com Escolhas de dados relacionais escolhas e outras caraterísticas novas para o Microsoft Dataverse.

Como posso atualizar?

Atualize a sua aplicação inspecionando as definições das funcionalidades e seguindo as instruções abaixo:

Dados relacionais, conjuntos de opções e outras caraterísticas novas para o Microsoft Dataverse estão Desativados:

Marque a secção Extinto em Próximas funcionalidades. Se estiver definido como desativado, continue com as instruções seguintes como primeiro passo na conversão.

Se não vir Dados relacionais, conjuntos de opções e outras funcionalidades novas do Microsoft Dataverse em Definições gerais ou se já estiver Ativado, ignore os seguintes passos e avance para a secção seguinte.

  • Passo 1: coloque a funcionalidade utilizar nomes a apresentar como Ativada:

    1. Coloque a funcionalidade utilizar nomes a apresentar como Ativada.
    2. Aguarde que o monitor de integridade conclua a análise da sua aplicação.
    3. Guarde, feche e abra novamente a sua aplicação.
    4. Resolva todos os erros de fórmulas.
    5. Guarde, feche e abra novamente a sua aplicação.

    Possíveis erros e sugestões:

    É possível que alguns dos nomes a apresentar recentemente mostrados possam entrar em conflito com os nomes a apresentar para outras tabelas, campos ou controlos. Por exemplo, poderá ter um controlo e um campo com o mesmo nome. Pode alterar o nome do controlo com um valor exclusivo para corrigir.

    Para qualquer conflito de nome a apresentar para campo e tabela, pode ver uma fórmula que espera uma tabela mas resolve para um nome de campo com âmbito local.

    Utilize o parêntesis reto com um símbolo @ para indicar um âmbito global para que seja resolvido para a tabela; por exemplo, [@tableName].

  • Passo 2: ativar dados relacionais, conjuntos de opções e outras novas funcionalidades para o Microsoft Dataverse e utilizar os tipos de dados GUID em vez das funcionalidades de cadeias de caracteres como Ativadas:

    1. Colocar dados relacionais, conjuntos de opções e outras funcionalidades novas para o Microsoft Dataverse como Ativados.
    2. Colocar a funcionalidade Utilizar GUIDs tipos de dados em vez de cadeias de caracteres como Ativada.
    3. Aguarde que o monitor de integridade conclua a análise da sua aplicação.
    4. Resolva todos os erros de fórmulas.
    5. Guarde, feche e abra novamente a sua aplicação.

    Possíveis erros e sugestões:

    É possível ter erros nesta fase se estiver a utilizar um campo de opção ou valores de texto GUID hard-coded.

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

Melhorar experiências e vistas de origem de dados do Microsoft Dataverse está Desativado

Utilize a seguinte instrução para colocar a funcionalidade melhorar a experiência e vistas da origem de dados vistas do Microsoft Dataverse como Ativado:

  1. Remova as ligações existentes da origem de dados do Dataverse.
  2. Coloque como Ativada a funcionalidade de melhorar a experiência e vistas da origem de dados vistas do Microsoft Dataverse.
  3. Adicione a ligação Dataverse utilizando a nova experiência de seleção de origem de dados.
  4. Guarde a aplicação.

Nota

Se a aplicação for extremamente grande, adicionar o origem de dados ligações de volta poderá demorar algum tempo. Não feche a aplicação durante este processo.

Converter aplicações de tela com o Dynamics 365 Connector

Para converter a aplicação que utiliza o Dynamics 365 connector, precisa de remover e adicionar as ligações às suas origens de dados. Utilize os passos abaixo para converter as ligações nas origens de dados.

  1. Certifique-se de que a funcionalidade melhorar a experiência e vistas da origem de dados vistas do Microsoft Dataverse esteja definida como Ativada.

  2. Remova as ligações existentes da origem de dados do Dynamics 365.

  3. Adicionar as ligações às suas origens de dados ao Dataverse utilizando a nova experiência de seleção de origem de dados.

    Nota

    • Se tiver ligações com outros ambientes (diferentes do atual), selecione a categoria Tabela e, em seguida, a opção Mais (...) para alterar o ambiente. Em seguida, pode selecionar uma tabela de um ambiente diferente para adicionar à sua aplicação. As ligações entre os locatários não funcionam com o conector nativo melhorado. Terá de utilizar a integração de dados para aceder ao locatário cruzado de dados.
    • Precisa de cumprir um dos seguintes requisitos para poder ver um ambiente ao qual pretende adicionar a ligação:
      • É o Proprietário da aplicação ou a aplicação é partilhada consigo como Coproprietário.
      • É membro de, pelo menos, um destes direitos de acesso: Administrador de Ambiente, Criador de Ambientes ou Administrador de Sistema. Para mais informações sobre os direitos de acesso num ambiente, vá para Configurar um direito de acesso aos recursos num ambiente.
  4. Guarde a aplicação.

Possíveis erros e sugestões:

É possível ter erros à medida que converte: se não estiver a utilizar Nomes a Apresentar, se estiver a utilizar cadeias GUID ou se estiver a utilizar uma opção.

  • Se o nome do controlo estiver em conflito, altere o nome do controlo para ser diferente e exclusivo.
  • Para conflitos de nome a apresentar para campo e tabela, pode ver uma fórmula que espera uma tabela mas resolve para um nome de campo com âmbito mais local. Utilize o parêntesis reto com um símbolo @ para indicar um âmbito global para que seja resolvido para a tabela; por exemplo, [@tableName].
  • Valores da opção: se estiver a utilizar um campo de opção com um identificador de texto para o valor da opção, utilize a notação do ponto para fazer referência ao valor da opção. Por exemplo, altere Patch(Accounts, OptionSet1 = “12345”) para Patch(Accounts, OptionSet.Item1) onde Item1 corresponde ao valor 12345.
    Mais informações: Exemplos Detalhados.
  • GUIDs: se estiver a utilizar uma cadeia de caracteres de GUID estática, tal como 015e45e1044e49f388115be07f2ee116, converta-a numa função que retorne um objeto GUID; por exemplo GUID(“015e45e1044e49f388115be07f2ee116”).
  • Pesquisas: se estiver a utilizar funções de Pesquisa para obter valores de pesquisa de primeiro nível, como Lookup(Contacts, ‘contactID’ = ThisItem.ContactID”), considere, em vez disso, utilizar ThisItem.PrimaryContacts (em que PrimaryContacts é o nome da tabela).
  • Para eventuais referências polimórficas, consulte a secção exemplos detalhados abaixo.

Exemplos detalhados

A conversão da sua aplicação para utilizar os novos tipos de dados Conjuntos de opções e Duas opções com controlos de suporte pode ser um desafio enquanto atualiza uma aplicação para utilizar a nova funcionalidade Melhorar experiência de origens de dados e vistas do Microsoft Dataverse.

Opções

Foram utilizados campos separados _myfield e _myfield_label para a opção anterior. Agora, há um único myfield que pode ser usado tanto para comparações independentes da região e para obter a etiqueta específica da região.

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

Recomendamos que remova os cartões de dados existentes e que os adicione de volta para funcionarem com a sua opção. Por exemplo, se estiver a trabalhar com a tabela Contas e a opção Categoria, vê que a propriedade DataField do cartão de dados foi definida como _accountcategorycode_label. Na lista de campos, pode ver que o cartão de dados tem um tipo de Cadeia:

OptionSet com nome de estilo antigo.

Com a nova funcionalidade de experiência e vistas de origem de dados do Microsoft Dataverse melhorada, já não vê _accountcategorycode_label. É substituída por accountcategorycode. O seu cartão está agora marcado como personalizado e serão exibidos erros. Remova o antigo cartão de dados e adicione a Opção novamente. O novo cartão de dados está ciente da Opção.

OptionSet com novo nome de estilo.

Editar as expressões do Filtro de Opção para utilizar uma nova sintaxe

Anteriormente, se quisesse utilizar um valor Opção numa expressão Filtro, teria de utilizar o campo Valor. Por exemplo:

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

Vai ter de editar esta fórmula. O identificador de texto de opção já não é utilizado para o valor. Esta expressão deve ser atualizada para:

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

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

Editar instruções de patch de opções para utilizar uma nova sintaxe

Segue-se um exemplo da instrução do Patch anterior para a opção:

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

Terá de atualizar as suas instruções para seguir este formulário:

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

Desambiguação da opção

Se o nome a apresentar de um campo de opção e o nome da opção forem os mesmos, terá de desambiguar a fórmula. Para continuar a utilizar o exemplo de Código de Categoria de Contas, @ implica a utilização da opção e não do campo.

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

Duas Opções

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

Remova os cartões de dados existentes e adicione-os de volta com Sim/Não. Os tipos de dados foram anteriormente reconhecidos como booleanos simples - como, por exemplo, verdadeiro/em e falso/desativado sem Etiquetas:

Sim/Não - estilo antigo.

Com a nova funcionalidade de experiência e vistas de origem de dados do Microsoft Dataverse melhorada, o seu cartão estará agora marcado como personalizado e os erros serão visualizados. Remova o antigo cartão de dados e adicione a opção novamente. Por predefinição, verá um controlo de edição com duas opções.

Sim/Não - estilo novo.

Se preferir o interruptor de alternância para o seu campo booleano, pode desbloquear o cartão de dados e substituir o controlo no cartão de dados por uma alternância. Também terá de definir estas 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 )

Chave de alternância de duas opções.

Melhorar as instruções do patch de duas opções

A utilização da função Patch com duas opções deve funcionar 'tal como está'. Suporta a utilização direta de verdadeiro e falso, semelhante a booleano. A única diferença está a ser se tiver colocado o valor num controlo de etiqueta anterior que mostrasse verdadeiro e falso, agora as duas etiquetas de opção são mostradas.

Pesquisas polimórficas

As seguintes diretrizes ajudam a atualizar a aplicação se esta referenciasse campos polimórficos. As pesquisas polimórficas, do mesmo campo, suportam referências a um conjunto restrito de várias tabelas. Semelhante a referências noutros idiomas, uma referência de registo é um apontador para um registo específico numa tabela específica. Uma referência de registo transporta as informações da tabela permitindo-lhe apontar para um registo em várias outras tabelas, o que difere de uma pesquisa normal que só pode apontar para registos numa tabela.

Aceder, definir e filtrar no campo de proprietário de um registo

Por exemplo, o campo Proprietário numa tabela pode referir-se a um registo na tabela Utilizadores ou Equipas. O mesmo campo de pesquisa em diferentes registos pode referir-se a registos em diferentes tabelas.

Campo de proprietário polimórfico.

Polimórfico com filtro e patch

As referências de registo podem ser utilizadas tal como um registo completo:

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

Uma vez que uma referência pode apontar para diferentes tabelas, tem de ser específico. Não pode utilizar ThisItem.Owner.Name, uma vez que o campo de nome na tabela Equipa é Nome da Equipa e o campo de nome na tabela Utilizador é Nome Completo. O Power Apps não sabe o tipo de pesquisa ao qual se está a referir, até que execute a aplicação.

Para corrigir este problema:

  1. Adicione as origens de dados para os tipos de entidade que o proprietário poderia ser; no exemplo atual, utilizadores e equipas).
  2. Utilize mais funções para deixar a sua intenção clara.

Existem duas novas funções que pode utilizar do:

  • IsType – Verifica se uma referência de registo é de um determinado tipo de tabela.
  • AsType – Converte uma referência de registo num determinado tipo de tabela.

Com estas funções, pode escrever uma fórmula que apresenta o nome do Proprietário retirado de dois campos de nome diferente, 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 Como tipo.

O operador global de desambiguação para [@Teams] e [@Users] é utilizado para garantir que referencia o tipo de tabela global. Embora neste caso não seja necessário, é recomendável que seja sempre claro. Frequentemente, as relações um-para-muitos entram em conflito no âmbito do registo da galeria e esta prática evita essa confusão.

Aceder e definir o campo Nome da Empresa (um tipo de dados de Cliente) da tabela Contactos

O campo de pesquisa de clientes é outra pesquisa polimórfica semelhante à proprietária. 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 Contactos inclui o campo Nome da Empresa, que é um campo de pesquisa Cliente. Ler Mostrar os campos de um cliente para obter mais detalhes.

Aceder e definir o campo Relativo a de tabelas de atividades como Faxes, Chamadas Telefónicas e Mensagens de E-mail

As pesquisas polimórficas não estão limitadas a contas e contactos. A lista de tabelas é extensível com tabelas personalizadas. Por exemplo, a tabela Faxes tem um campo de pesquisa Relativo a polimórfico, que pode referir-se a Contas, Contactos e outras tabelas. Se tiver uma galeria com origem de dados definido como Faxes, pode utilizar a fórmula seguinte para apresentar o nome associado ao campo de pesquisa relativo.

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

Ler Relativo a campos de pesquisa e Relativo a Relações para obter mais detalhes.

Aceder à lista de todas as atividades de um registo

No Dataverse, as tabelas como Faxes, Tarefas, E-mails, Notas, Chamadas Telefónicas, Cartas e Chats são designadas como atividades. Também pode criar as suas próprias tabelas de atividade personalizada.

Pode apresentar 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 pretende apresentar na aplicação de tela.

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

O exemplo que se segue mostra que, à medida que seleciona uma Conta, todas as atividades associadas a essa conta são apresentadas:

Atividades polimórficas.

Os registos estão a ser apresentados a partir da tabela Atividades. No entanto, pode continuar a utilizar a função IsType para identificar o tipo de atividade. Mais uma vez, antes de utilizar IsType com um tipo de tabela, tem de adicionar a origem de dados necessária.

Utilizando esta fórmula, pode mostrar o tipo de registo num controlo de etiqueta 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.

Aceder à lista de Notas de um registo

Quando cria uma tabela, pode ativar os anexos. Se selecionar a caixa de verificação para ativar anexos, cria uma relação Relativo a com a tabela Notas, conforme este gráfico o mostra para a tabela Contas:

Campo Notas.

Filtragem

Não é possível ler ou filtrar com base no campo relativo. No entanto, a relação inversa de notas de um-para-muitos está disponível. Para listar todas as Notas associadas a uma tabela Contas, pode utilizar a seguinte fórmula:

First( Accounts ).Notes
Patch

Não é possível colocar o campo Notas numa tabela utilizando o Patch. Para adicionar um registo à tabela Notas de uma tabela, pode utilizar a função Relacionar. Primeiro, crie a nota, como neste exemplo:

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

Passos seguintes

Consulte também

O que é o Dataverse?

Nota

Pode indicar-nos as suas preferências no que se refere ao idioma da documentação? Responda a um breve inquérito. (tenha em atenção que o inquérito está em inglês)

O inquérito irá demorar cerca de sete minutos. Não são recolhidos dados pessoais (declaração de privacidade).