Tabelas de clientes (conta, contato e endereço do cliente)

Microsoft Dataverse tabelas de clientes (account, contacte customeraddress) armazenam relações de clientes, detalhes de contato e informações de endereço e envio. Este artigo explica como essas tabelas se relacionam e como gerenciar registros de endereços de cliente inseridos e vazios.

Tabela de contas

A tabela de contas é uma das tabelas do Dataverse às quais a maioria das outras tabelas são anexadas ou subordinadas. No Dataverse, uma conta representa uma empresa com a qual a unidade de negócios tem uma relação. As informações incluídas em uma conta são todas informações de contato relevantes, informações da empresa, categoria, tipo de relacionamento e informações de endereço. Outras informações que se aplicam incluem os seguintes itens:

  • Uma conta pode ser pai da maioria dos tipos de tabela, incluindo outra conta.
  • Uma conta pode ser uma tabela autônoma.
  • Uma conta pode ter apenas uma conta como pai.
  • As contas podem ter várias contas filho e contatos filho.

O gerenciamento de contas é um dos conceitos importantes do gerenciamento de relacionamento do cliente entre empresas (Dynamics 365) porque uma organização deseja ver todas as atividades que tem com outra empresa. Todas essas atividades se reúnem no nível da conta. Exiba a referência da tabela de Conta

Tabela de contatos

No Dataverse, um contato representa uma pessoa, geralmente uma pessoa, com quem uma unidade de negócios tem uma relação, como um cliente, um fornecedor ou um colega. A tabela de contatos é uma das tabelas às quais a maioria das outras tabelas estão vinculadas. Um contato pode ser uma tabela autônoma. Incluem-se nesta tabela informações profissionais, pessoais e familiares e vários endereços. Exiba a referência da tabela Contato.

Contas e contatos fazem parte do gerenciamento de clientes e estão relacionados entre si das seguintes maneiras:

  • Um contato pode ser pai de todas as outras tabelas, exceto contas e contatos.
  • Um contato pode ter apenas uma conta como pai.
  • Um contato pode ser marcado como a pessoa de contato principal de uma conta definindo a Account.PrimaryContactId coluna.

A tabela de contatos armazena informações sobre uma pessoa, como endereço de email, endereço de rua e números de telefone. Isso também inclui outras informações relacionadas, como data de nascimento ou aniversário da pessoa. Dependendo do tipo de clientes que uma unidade de negócios tem, ela precisa apenas de contatos, contatos e contas, para dar uma visão completa de seus clientes.

Vincular tabelas como atividades e anotações à tabela permite que o contact usuário veja toda a comunicação que o usuário teve com um cliente, todas as ações que o usuário tomou em nome do cliente e todas as informações que o usuário precisa sobre o cliente.

Tabela EndereçoDoCliente

Esta tabela contém mais informações de endereço e envio para registros de clientes (conta e contato). Por padrão, o Dataverse cria pelo menos dois customeraddress registros nesta tabela quando você cria um novo registro de cliente, mesmo quando não há dados para esses registros. Saiba como você pode alterar esse comportamento.

Você pode acessar todos os customeraddress registros relacionados a registros de conta e contato por meio dos relacionamentos e Contact_CustomerAddress da Account_CustomerAddress conta. Ambas as relações usam a pesquisa parentid . A parentidtypecode coluna indica o tipo de registro do cliente ao qual o endereço está relacionado.

Dados de endereço incorporados nos registros de clientes

Você pode recuperar ou modificar os dados dos dois ou três registros incorporados customeraddress com o registro do cliente.

  • Os registros de conta têm colunas address1_addressid e address2_addressid.
  • Os registros de contato têm colunas address1_addresside address2_addressidaddress3_addressid.

Essas colunas armazenam customeraddressid valores. Outras colunas de cliente, cada uma prefixada com address1*, address2*ou address3*, contêm as informações de endereço correspondentes da customeraddress tabela.

A customeraddressaddressnumber coluna indica qual endereço se aplica às colunas de registro do cliente pai. Não é possível definir a addressnumber coluna como um valor usado por outro customeraddress registro relacionado ao mesmo cliente pai. Você pode definir um valor existente addressnumber como 0 ou nulo e alterar o valor de outro registro se quiser trocar a posição relativa dos registros pelos registros do cliente. Embora o valor addressnumber seja incrementado para cada registro criado para um cliente, além de controlar a respectiva posição de endereço embutido no registro do cliente (ou 1, 2 ou 3), o valor da coluna addressnumber não é usado para nenhuma outra finalidade.

O Dataverse só atualiza esses customeraddress registros por meio das colunas de registro do cliente correspondentes em vez de atualizar as customeraddress linhas diretamente. No entanto, qualquer pessoa pode editar esses registros como registros customeraddress, ou adicionar mais registros customeraddress associados ao registro account ou contact que não estão integrados nos registros de conta e contato.

A exclusão de linhas de endereço do cliente inseridas não é permitida

Por padrão, se você tentar excluir um dos registros inseridos customeraddress que o address1_addressid, address2_addressidou address3_addressid referências para um registro do cliente, você receberá um erro como a seguinte mensagem de erro:

Nome: CannotDeleteDueToAssociation
Código: 0x80040227
Número: -2147220953
Mensagem: Customer Address can not be deleted because it is associated with another object. Address Id = 4f33c2e4-d5a3-4b03-b050-21984c0e4c15, AddressNumber=2, ParentId=4b757ff7-9c85-ee11-8179-000d3a9933c9, ObjectTypeCode=1

Saiba como você pode alterar esse comportamento

Desativar a criação de registro vazio

Cada linha na customeraddress tabela conta com a capacidade do Dataverse que você paga, portanto, talvez você queira minimizar esse custo.

Você pode instruir o Dataverse a não criar linhas de tabela vazias customeraddress para cada registro do cliente alterando a configuração Desativar criação de registros de endereço vazios no Centro de administração do Power Platform. Antes de alterar esse comportamento, considere se você tem personalizações existentes que dependem do comportamento padrão. Saiba mais sobre essa configuração.

Enquanto essa configuração está ativada, nenhuma nova linha de tabela vazia customeraddress é criada quando novos registros de cliente são criados. Os registros só serão criados se o conteúdo de entrada contiver dados de endereço. Normalmente, o conteúdo inclui apenas colunas que têm dados. Se não houver dados para as colunas, as colunas não serão incluídas no conteúdo e os valores serão nulos quando o registro for salvo. No entanto, se o conteúdo contiver colunas de endereço com valores definidos como nulos, o endereço será criado com valores nulos. Se você continuar a ver registros vazios sendo criados, verifique como eles são criados e se esse aplicativo cliente está enviando dados de coluna com valores nulos.

Se a configuração Desabilitar a criação de registro de endereço vazia estiver desativada, o comportamento padrão será retomado. Ativar essa configuração não exclui nenhuma linha de tabela existente customeraddress . Ativar essa configuração novamente depois que ela foi desativada não cria novamente registros que não foram criados.

Detectar se a criação de registro de endereço vazio está desabilitada

Essas funções de exemplo mostram como detectar se a configuração Desabilitar a criação de registro de endereço vazio está habilitada no ambiente.

Essa Test-IsEmptyAddressRecordCreationDisabled função do PowerShell usa o comando Microsoft Power Platform CLIpac env list-settings para verificar um valor na Organization.OrgDbOrgSettings coluna.

function Test-IsEmptyAddressRecordCreationDisabled {

   $orgdborgsettings = pac env list-settings `
      --filter orgdborgsettings `
   | Where-Object { $_ -match '^orgdborgsettings\s+' } `
   | ForEach-Object { $_ -replace '^orgdborgsettings\s+', '' }

   $xml = [xml]$orgdborgsettings

   $element = $xml.SelectSingleNode("//CreateOnlyNonEmptyAddressRecordsForEligibleEntities")

   # Return true only when the element exists and has the value of 'true'
   return ($null -ne $element) -and ($element.InnerText -eq 'true')
}

Saiba mais sobre a CLI do Microsoft Power Platform

Excluir registros de endereço inseridos

Por padrão, você não pode excluir linhas de tabela inseridas customeraddress que referenciamaddress1_addressidaddress2_addressid, ou address3_addressid colunas em tabelas de clientes. Para obter mais informações, consulte Se a exclusão de linhas de endereço do cliente inseridas não é permitida.

A configuração Habilitar Exclusão de Registros de Endereço no centro de administração do Power Platform altera esse comportamento. Saiba mais sobre essa configuração.

Detectar se a exclusão de registros de endereço está habilitada

Essas funções de exemplo mostram como detectar se a configuração Habilitar Exclusão de Registros de Endereço está habilitada no ambiente.

Essa Test-IsDeleteAddressRecordsEnabled função do PowerShell usa o comando Microsoft Power Platform CLIpac env list-settings para verificar um EnableDeleteAddressRecords valor na Organization.OrgDbOrgSettings coluna.

function Test-IsDeleteAddressRecordsEnabled {

   $orgdborgsettings = pac env list-settings `
      --filter orgdborgsettings `
   | Where-Object { $_ -match '^orgdborgsettings\s+' } `
   | ForEach-Object { $_ -replace '^orgdborgsettings\s+', '' }

   $xml = [xml]$orgdborgsettings

   $element = $xml.SelectSingleNode("//EnableDeleteAddressRecords")

   # Return true only when the element exists and has the value of 'true'
   return ($null -ne $element) -and ($element.InnerText -eq 'true')
}

Saiba mais sobre a CLI do Microsoft Power Platform

Exclusão em massa de registros de endereços de cliente vazios

Depois de desabilitar a criação de registro de endereço vazio e habilitar a exclusão de registros de endereço, use as funções de exemplo a seguir para excluir de forma assíncrona registros vazios customeraddress usando a BulkDelete mensagem.

Exemplos de código de exclusão em massa

Essas funções são baseadas nas colunas/atributos editáveis do Endereço (CustomerAddress) e não incluem colunas personalizadas que possam existir no seu ambiente. Talvez você queira alterar essas consultas se precisar incluir suas colunas personalizadas.

A Start-BulkDeleteEmptyCustomerAddressRecords função do PowerShell cria um trabalho do sistema para excluir registros vazios customeraddress usando o comando Microsoft Power Platform CLIpac data bulk-delete schedule.

Essa função depende do exemplo Test-IsDeleteAddressRecordsEnabled e Test-IsEmptyAddressRecordCreationDisabled das funções descritas em Detectar se a exclusão de registros de endereço está habilitada e detectar se a criação de registro de endereço vazio está desabilitada, respectivamente. A função cria o trabalho somente quando ambas as configurações permitem que todos os registros de endereço do cliente vazios sejam excluídos e impedem que novos registros vazios sejam criados.

function Start-BulkDeleteEmptyCustomerAddressRecords {

   if (!(Test-IsDeleteAddressRecordsEnabled)) {
      Write-Host 'Enable deletion of address records before running this function.'
      return
   }

   if (!(Test-IsEmptyAddressRecordCreationDisabled)) {
      Write-Host 'Disable empty address record creation before running this function.'
      return
   }

   $fetchXml = @(
      '<fetch>'
      "<entity name='customeraddress'>"
      "<attribute name='customeraddressid' />"
      "<filter type='and'>"
      "<condition attribute='city' operator='null' />"
      "<condition attribute='country' operator='null' />"
      "<condition attribute='county' operator='null' />"
      "<condition attribute='fax' operator='null' />"
      "<condition attribute='freighttermscode' operator='null' />"
      "<condition attribute='latitude' operator='null' />"
      "<condition attribute='line1' operator='null' />"
      "<condition attribute='line2' operator='null' />"
      "<condition attribute='line3' operator='null' />"
      "<condition attribute='longitude' operator='null' />"
      "<condition attribute='postalcode' operator='null' />"
      "<condition attribute='postofficebox' operator='null' />"
      "<condition attribute='primarycontactname' operator='null' />"
      "<condition attribute='shippingmethodcode' operator='null' />"
      "<condition attribute='stateorprovince' operator='null' />"
      "<condition attribute='telephone1' operator='null' />"
      "<condition attribute='telephone2' operator='null' />"
      "<condition attribute='telephone3' operator='null' />"
      "<condition attribute='upszone' operator='null' />"
      "<condition attribute='utcoffset' operator='null' />"
      '</filter>'
      '</entity>'
      '</fetch>'
   ) -join ''

   pac data bulk-delete schedule `
      --entity customeraddress `
      --fetchxml $fetchXml `
      --job-name 'Delete Empty Customer Address Records'
}