Tabelle dei clienti (account, contatto e customeraddress)

Microsoft Dataverse tabelle dei clienti (account, contacte customeraddress) archivia relazioni con i clienti, i dettagli di contatto e le informazioni di indirizzo e spedizione. Questo articolo illustra come correlare queste tabelle e come gestire i record di indirizzi dei clienti incorporati e vuoti.

Tabella account

La tabella dell'account è una delle tabelle in Dataverse a cui sono collegate o di cui sono parenti la maggior parte delle altre tabelle. In Dataverse un account rappresenta una società con cui la business unit ha una relazione. Le informazioni incluse in un account sono tutte le informazioni di contatto pertinenti, le informazioni aziendali, la categoria, il tipo di relazione e le informazioni sull'indirizzo. Altre informazioni applicabili includono gli elementi seguenti:

  • Un account può essere padre della maggior parte dei tipi di tabella, compreso un altro account.
  • Un account può essere una tabella autonoma.
  • Un account può avere un solo account come padre.
  • Gli account possono avere più account figlio e contatti figlio.

La gestione degli account è uno dei concetti importanti della gestione delle relazioni tra clienti business-to-business (Dynamics 365) perché un'organizzazione vuole visualizzare tutte le attività che hanno con un'altra azienda. Tutte queste attività si riuniscono a livello di account. Consulta il riferimento della tabella Account.

Tabella contatti

In Dataverse un contatto rappresenta una persona, in genere una persona con cui una business unit ha una relazione, ad esempio un cliente, un fornitore o un collega. La tabella dei contatti è una delle tabelle a cui sono collegate la maggior parte delle altre tabelle. Un contatto può essere una tabella autonoma. Incluso in questa tabella sono informazioni professionali, personali e familiari e più indirizzi. Visualizzare il riferimento alla tabella Contatti.

Sia gli account che i contatti fanno parte della gestione dei clienti e sono correlati tra loro nei modi seguenti:

  • Un contatto può essere un elemento padre di ogni altra tabella, ad eccezione di account e contatti.
  • Un contatto può avere un solo account come padre.
  • Un contatto può essere contrassegnato come persona contatto principale per un account impostando la Account.PrimaryContactId colonna.

La tabella dei contatti archivia informazioni su una persona, ad esempio un indirizzo di posta elettronica, un indirizzo di strada e numeri di telefono. Include anche altre informazioni correlate, ad esempio la data del compleanno o dell'anniversario della persona. A seconda del tipo di clienti di una business unit, ha bisogno solo di contatti o contatti e account, per offrire una visione completa dei propri clienti.

Il collegamento di tabelle come attività e note alla contact tabella consente all'utente di visualizzare tutte le comunicazioni che l'utente aveva con un cliente, le azioni eseguite dall'utente per conto del cliente e tutte le informazioni necessarie all'utente sul cliente.

Tabella CustomerAddress

Questa tabella contiene più informazioni sull'indirizzo e sulla spedizione per i record dei clienti (account e contatto). Per impostazione predefinita, Dataverse crea almeno due customeraddress record in questa tabella quando si crea un nuovo record cliente, anche quando non sono presenti dati per questi record. Informazioni su come modificare questo comportamento.

È possibile accedere a tutti i customeraddress record relativi all'account e ai record di contatto tramite le Account_CustomerAddress relazioni e Contact_CustomerAddress . Entrambe le relazioni usano la ricerca parenti. La parentidtypecode colonna indica il tipo di record del cliente a cui è correlato l'indirizzo.

Dati sugli indirizzi incorporati nei record dei clienti

È possibile recuperare o modificare i dati per i due o tre record incorporati customeraddress con il record del cliente.

  • I record dell'account hanno colonne address1_addressid e address2_addressid.
  • I record dei contatti hanno colonne address1_addressid, address2_addresside address3_addressid.

Queste colonne archiviano customeraddressid i valori. Altre colonne del cliente, ognuna con address1*prefisso , address2*o address3*, contiene le informazioni sull'indirizzo corrispondenti della customeraddress tabella.

La customeraddressaddressnumber colonna indica quale indirizzo si applica alle colonne del record del cliente padre. Non è possibile impostare la addressnumber colonna su un valore usato da un altro customeraddress record correlato allo stesso cliente padre. È possibile impostare un valore esistente addressnumber su 0 o Null e quindi modificare il valore di un altro record se si desidera scambiare la posizione relativa dei record per i record del cliente. Mentre il addressnumber valore incrementa per ogni record creato per un cliente, diverso dal controllo della rispettiva posizione dell'indirizzo incorporato nel record del cliente ( 1, 2o 3), il addressnumber valore della colonna non viene usato per altri scopi.

Dataverse aggiorna solo questi customeraddress record tramite le colonne del record cliente corrispondenti anziché aggiornare direttamente le customeraddress righe. Tuttavia, chiunque può modificare questi record come customeraddress record o aggiungere altri customeraddress record associati al account record o contact che non sono incorporati con l'account e i record di contatto.

L'eliminazione delle righe degli indirizzi del cliente incorporate non è consentita

Per impostazione predefinita, se si tenta di eliminare uno dei record incorporati customeraddress a cui address1_addressidfa riferimento , address2_addressido address3_addressid per un record cliente, viene visualizzato un errore simile al seguente messaggio di errore:

Nome: CannotDeleteDueToAssociation
Codice: 0x80040227
Numero: -2147220953
Messaggio: 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

Informazioni su come modificare questo comportamento

Disabilitare la creazione di record vuoti

Ogni riga della customeraddress tabella viene conteggiato rispetto alla capacità di Dataverse a cui si paga, pertanto è consigliabile ridurre al minimo questo costo.

È possibile indicare a Dataverse di non creare righe di tabella vuote customeraddress per ogni record cliente modificando l'impostazione Disabilita la creazione di record di indirizzi vuotinell'interfaccia di amministrazione di Power Platform. Prima di modificare questo comportamento, valutare se sono presenti personalizzazioni esistenti che dipendono dal comportamento predefinito. Altre informazioni su questa impostazione.

Mentre questa impostazione è attivata, non vengono create nuove righe di tabella vuote customeraddress quando vengono creati nuovi record del cliente. I record vengono creati solo se il payload in ingresso contiene dati di indirizzo. In genere, il payload include solo colonne con dati. Se non sono presenti dati per le colonne, le colonne non vengono incluse nel payload e i valori sono Null quando il record viene salvato. Tuttavia, se il payload contiene colonne di indirizzi con valori impostati su Null, l'indirizzo viene creato con valori Null. Se si continua a visualizzare i record vuoti creati, verificare come vengono creati e se l'applicazione client invia dati di colonna con valori Null.

Se l'impostazione Disabilita la creazione di record di indirizzi vuoti è disattivata, il comportamento predefinito riprende. L'attivazione di questa impostazione non comporta l'eliminazione di righe di tabella esistenti customeraddress . Riattivare questa impostazione dopo averla disattivata non ricrea i record che non sono stati creati.

Rilevare se la creazione di record di indirizzi vuoti è disabilitata

Queste funzioni di esempio illustrano come rilevare se l'impostazione Disabilita la creazione di record di indirizzi vuoti è abilitata nell'ambiente.

Questa Test-IsEmptyAddressRecordCreationDisabled funzione di PowerShell usa il comando dell'interfaccia della riga di comando Microsoft Power Platform pac env list-settings per controllare un valore nella Organization.OrgDbOrgSettings colonna.

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

Altre informazioni sull'interfaccia della riga di comando di Microsoft Power Platform

Eliminare record di indirizzi incorporati

Per impostazione predefinita, non è possibile eliminare righe di tabella incorporate customeraddress a cui fanno riferimento le address1_addressidcolonne , address2_addressido address3_addressid nelle tabelle dei clienti. Per altre informazioni, vedere Eliminazione delle righe di indirizzi del cliente incorporate non consentite.

L'impostazione Abilita eliminazione dei record di indirizzinell'interfaccia di amministrazione di Power Platform modifica questo comportamento. Altre informazioni su questa impostazione.

Rilevare se l'eliminazione dei record di indirizzi è abilitata

Queste funzioni di esempio mostrano come rilevare se l'impostazione Abilita eliminazione dei record di indirizzi è abilitata nell'ambiente.

Questa Test-IsDeleteAddressRecordsEnabled funzione di PowerShell usa il comando dell'interfaccia della riga di comando Microsoft Power Platform pac env list-settings per controllare un EnableDeleteAddressRecords valore nella Organization.OrgDbOrgSettings colonna.

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

Altre informazioni sull'interfaccia della riga di comando di Microsoft Power Platform

Eliminazione bulk dei record di indirizzi dei clienti vuoti

Dopo aver disabilitato la creazione di record di indirizzi vuoti e aver abilitato l'eliminazione dei record di indirizzi, usare le funzioni di esempio seguenti per eliminare in modo asincrono i record vuoti customeraddress usando il BulkDelete messaggio.

Esempi di codice di eliminazione in blocco

Queste funzioni si basano sulle colonne/attributi scrivibili Address (CustomerAddress) e non includono eventuali colonne personalizzate presenti nel vostro ambiente. È possibile modificare queste query se è necessario includere le colonne personalizzate.

La Start-BulkDeleteEmptyCustomerAddressRecords funzione PowerShell crea un processo di sistema per eliminare record vuoti customeraddress usando il comando dell'interfaccia della riga di comando di Microsoft Power Platformpac data bulk-delete schedule.

Questa funzione dipende dall'esempio Test-IsDeleteAddressRecordsEnabled e Test-IsEmptyAddressRecordCreationDisabled dalle funzioni descritte in Rilevare se l'eliminazione dei record di indirizzi è abilitata e rilevare se la creazione di record di indirizzi vuoti è disabilitata, rispettivamente. La funzione crea il processo solo quando entrambe le impostazioni consentono l'eliminazione di tutti i record di indirizzi dei clienti vuoti e impediscono la creazione di nuovi record vuoti.

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