Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Microsoft Dataverse tablas de clientes (account, contact, y customeraddress) almacenan relaciones de cliente, detalles de contacto e información de dirección y envío. En este artículo se explica cómo se relacionan estas tablas y cómo administrar registros de direcciones de cliente incrustadas y vacías.
Tabla de cuentas
La tabla de cuentas es una de las tablas de Dataverse a las que la mayoría de las demás tablas están asociadas o tienen como principal. En Dataverse, una cuenta representa una empresa con la que la unidad de negocio tiene una relación. La información que se incluye en una cuenta es toda la información de contacto relevante, la información de la empresa, la categoría, el tipo de relación y la información de dirección. Otra información aplicable incluye los siguientes aspectos:
- Una cuenta puede ser primaria para la mayoría de los tipos de tabla, incluida otra cuenta.
- Una cuenta puede ser una tabla independiente.
- Una cuenta puede tener únicamente una cuenta como elemento primario.
- Las cuentas pueden tener varias cuentas y contactos secundarios.
La administración de cuentas es uno de los conceptos importantes de la administración de relaciones entre clientes de negocio a negocio (Dynamics 365) porque una organización quiere ver todas las actividades que tienen con otra empresa. Todas estas actividades se reúnen en el nivel de la cuenta. Consulte la referencia de la tabla de cuentas.
Tabla de contactos
En Dataverse, un contacto representa a una persona, normalmente una persona, con la que una unidad de negocio tiene una relación, como un cliente, un proveedor o un compañero. La tabla de contactos es una de las tablas a las que están vinculadas la mayoría de las demás tablas. Un contacto puede ser una tabla independiente. En esta tabla se incluyen información profesional, personal y familiar, y varias direcciones. Consulte la referencia de la tabla de Contacto.
Las cuentas y los contactos forman parte de la administración de clientes y se relacionan entre sí de las siguientes maneras:
- Un contacto puede ser un elemento primario para cualquier otra tabla, excepto cuentas y contactos.
- Un contacto puede tener únicamente una cuenta como elemento primario.
- Un contacto se puede marcar como la persona de contacto principal de una cuenta estableciendo la
Account.PrimaryContactIdcolumna .
La tabla de contactos almacena información sobre una persona, como una dirección de correo electrónico, una dirección postal y números de teléfono. También incluye otra información relacionada, como el cumpleaños de la persona o la fecha de aniversario. Según el tipo de clientes que tenga una unidad de negocio, solo necesita contactos o contactos y cuentas, para ofrecer una vista completa de sus clientes.
La vinculación de tablas como actividades y notas a la contact tabla permite al usuario ver toda la comunicación que el usuario tenía con un cliente, las acciones que el usuario realizó en nombre del cliente y toda la información que el usuario necesita sobre el cliente.
Tabla CustomerAddress
Esta tabla contiene más información de dirección y envío para los registros de cliente (cuenta y contacto). De forma predeterminada, Dataverse crea al menos dos customeraddress registros en esta tabla al crear un nuevo registro de cliente, incluso cuando no hay datos para estos registros.
Obtenga información sobre cómo puede cambiar este comportamiento.
Puede acceder a todos los customeraddress registros relacionados con los registros de cuenta y contacto a través de las Account_CustomerAddress relaciones y Contact_CustomerAddress . Ambas relaciones usan la búsqueda parentid . La parentidtypecode columna indica el tipo de registro de cliente al que está relacionada la dirección.
Datos de dirección embebidos en registros de clientes
Puede recuperar o modificar los datos de los dos o tres registros customeraddress insertados con el registro del cliente.
- Los registros de cuenta tienen columnas
address1_addressidyaddress2_addressid. - Los registros de contacto tienen columnas
address1_addressid,address2_addressidyaddress3_addressid.
Estas columnas almacenan customeraddressid valores. Otras columnas de cliente, cada una con address1*el prefijo , address2*o address3*, contiene la información de dirección correspondiente de la customeraddress tabla.
La customeraddressaddressnumber columna indica qué dirección se aplica a las columnas de registro del cliente principal. No se puede establecer la addressnumber columna en un valor usado por otro customeraddress registro relacionado con el mismo cliente primario. Puede establecer un valor existente addressnumber en 0 o null y, a continuación, cambiar el valor de otro registro si desea intercambiar la posición relativa de los registros del cliente. Aunque el addressnumber valor se incrementa para cada registro creado para un cliente, aparte de controlar la posición de dirección insertada correspondiente en el registro del cliente (ya sea 1, 2o 3), el addressnumber valor de columna no se usa para ningún otro propósito.
Dataverse solo actualiza estos customeraddress registros a través de las columnas de registro del cliente correspondientes en lugar de actualizar las customeraddress filas directamente. Sin embargo, cualquier persona puede editar estos registros como registros de customeraddress, o agregar más registros de customeraddress asociados con el registro de account o el de contact que no están incrustados en los registros de cuenta y contacto.
No se permite la eliminación de filas de direcciones de cliente incrustadas
De forma predeterminada, si intenta eliminar uno de los registros incrustados customeraddress que hace referencia a , address1_addressidaddress2_addressido address3_addressid para un registro de cliente, obtendrá un error similar al siguiente mensaje de error:
Nombre:
CannotDeleteDueToAssociation
Código:0x80040227
Número:-2147220953
Mensaje: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
Obtenga información sobre cómo puede cambiar este comportamiento
Deshabilitación de la creación de registros vacíos
Cada fila de la customeraddress tabla cuenta con la capacidad de Dataverse que paga, por lo que es posible que quiera minimizar este costo.
Puede indicar a Dataverse que no cree filas de tabla vacías customeraddress para cada registro de cliente cambiando la opción Deshabilitar creación de registros de direcciones vacías en el Centro de administración de Power Platform. Antes de cambiar este comportamiento, considere si tiene personalizaciones existentes que dependen del comportamiento predeterminado.
Obtenga más información esta configuración.
Mientras esta configuración está activada, no se crean nuevas filas de tabla vacías customeraddress cuando se crean nuevos registros de cliente. Los registros solo se crean si la carga entrante contiene datos de dirección. Normalmente, la carga solo incluye columnas que tienen datos. Si no hay datos para las columnas, las columnas no se incluyen en la carga y los valores son NULL cuando se guarda el registro. Sin embargo, si la carga contiene columnas de dirección con valores establecidos en NULL, la dirección se crea con valores NULL. Si sigue viendo registros vacíos que se crean, compruebe cómo se crean y si esa aplicación cliente envía datos de columna con valores NULL.
Si la opción Deshabilitar la creación de registros de direcciones vacías está desactivada, se reanuda el comportamiento predeterminado. Al activar esta configuración, no se eliminan filas de tabla existentes customeraddress . Al volver a activar esta configuración después de desactivarla, no se vuelven a crear registros que no se crearon.
Detección de si la creación de registros de direcciones vacía está deshabilitada
Estas funciones de ejemplo muestran cómo detectar si la opción Deshabilitar la creación de registros de direcciones vacías está habilitada en el entorno.
Esta Test-IsEmptyAddressRecordCreationDisabled función de PowerShell usa el comando Microsoft Power Platform CLIpac env list-settings para comprobar un valor en la Organization.OrgDbOrgSettings columna.
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')
}
Eliminar registros de direcciones incrustados
De forma predeterminada, no se pueden eliminar filas de tabla incrustadas customeraddress a las que hacen referencia las address1_addressidcolumnas , address2_addressido address3_addressid de las tablas del cliente. Para obtener más información, consulte No se permite la eliminación de filas de direcciones de cliente incrustadas.
La opción Habilitar eliminación de registros de direcciones en el Centro de administración de Power Platform cambia este comportamiento. Obtenga más información esta configuración.
Detección de si la eliminación de registros de direcciones está habilitada
Estas funciones de ejemplo muestran cómo detectar si la opción Habilitar eliminación de registros de direcciones está habilitada en el entorno.
Esta Test-IsDeleteAddressRecordsEnabled función de PowerShell usa el comando Microsoft Power Platform CLIpac env list-settings para comprobar un EnableDeleteAddressRecords valor en la Organization.OrgDbOrgSettings columna.
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')
}
Eliminación masiva de registros de direcciones de cliente vacías
Después de deshabilitar la creación de registros de direcciones vacíos y habilitar la eliminación de registros de direcciones, use las siguientes funciones de ejemplo para eliminar de forma asincrónica los registros vacíos customeraddress mediante el BulkDelete mensaje.
Ejemplos de código de eliminación masiva
Estas funciones se basan en las columnas/atributos editables de Address (CustomerAddress) y no incluyen ninguna columna personalizada que pueda estar presente en su entorno. Es posible que quiera modificar estas consultas si necesita incluir las columnas personalizadas.
La Start-BulkDeleteEmptyCustomerAddressRecords función de PowerShell crea un trabajo del sistema para eliminar registros vacíos customeraddress mediante el comando de la CLIpac data bulk-delete schedule de Microsoft Power Platform.
Esta función depende del ejemplo Test-IsDeleteAddressRecordsEnabled y Test-IsEmptyAddressRecordCreationDisabled de las funciones descritas en Detección de si la eliminación de registros de direcciones está habilitada y Detectar si la creación de registros de direcciones vacía está deshabilitada, respectivamente. La función crea el trabajo solo cuando ambas opciones permiten eliminar todos los registros de direcciones de cliente vacíos y evitar que se creen nuevos registros vacíos.
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'
}