Tableaux clients (compte, contact et adresse client)
Les tableaux compte et contact sont essentiels pour identifier et gérer les clients, vendre des produits et services et fournir un service de qualité supérieure. aux clients. La table customeraddress stocke l’adresse et les informations d’expédition d’un client.
Table Account
La table Account est l’une des tables dans Dataverse à laquelle la plupart des autres tables sont jointes ou apparentées. Dans Dataverse, un compte représente une société avec laquelle la division a une relation. Les informations incluses dans un compte sont toutes les coordonnées appropriées, les informations sur la société, la catégorie, le type de relation et l’adresse. D’autres informations utiles incluent les éléments suivants :
- Un compte peut être le parent de la plupart des types de tables, y compris d’un autre compte.
- Un compte peut être une table autonome.
- Un compte ne peut avoir qu’un compte parent.
- Les comptes peuvent avoir plusieurs comptes enfants et plusieurs contacts enfants.
La gestion des comptes est l’un des concepts importants de la gestion de la relation client interentreprises (Dynamics 365), car une organisation souhaite voir toutes les activités qu’elle mène avec une autre entreprise. Toutes ces activités sont regroupées au niveau du compte. Consultez la référence de la table Compte.
Table Contact
Dans Dataverse, un contact représente une personne, généralement un individu, avec qui une division a une relation, telles qu’un client, un fournisseur ou un collègue. La table Contact est l’une des tables à laquelle la plupart des autres tables sont liées. Un contact peut être une table autonome. Cette table regroupe les informations professionnelles, personnelles et familiales, ainsi que plusieurs adresses. Consultez la référence de la table Contact.
Les comptes et les contacts font partie de la gestion des clients et sont associés les uns aux autres des façons suivantes :
- Un contact peut être un parent de toute autre table, à l’exception des comptes et des contacts.
- Un contact ne peut avoir qu’un compte parent.
- Un contact peut être marqué comme personne de contact principale pour un compte en définissant la colonne Account.PrimaryContactId .
La table de contacts stocke des informations sur une personne telles qu’une adresse e-mail, une adresse postale et des numéros de téléphone. Il comprend également d’autres informations connexes, telles que l’anniversaire ou la date d’anniversaire de la personne. En fonction du type de client d’une division, elle n’a besoin que de contacts, ou de contacts et de comptes, pour afficher une vue d’ensemble de ses clients.
La liaison de tableaux tels que des activités et des notes au contact
table permet à l’utilisateur de voir toutes les communications que l’utilisateur a eues avec un client, toutes les actions que l’utilisateur a entreprises au nom du client et toutes les informations dont l’utilisateur a besoin sur le client. .
Table CustomerAddress
Ce tableau contient plus d’informations sur l’adresse et l’expédition des enregistrements clients (compte et contact). Par défaut, Dataverse crée au moins deux customeraddress
enregistrements dans cette table lorsqu’un nouvel enregistrement client est créé, même s’il n’existe aucune donnée pour ces enregistrements. Découvrez comment vous pouvez modifier ce comportement
Tous les customeraddress
enregistrements liés aux enregistrements de compte et de contact sont disponibles via l’ Account_CustomerAddress et Contact_CustomerAddress Relations respectivement. Ces Relations utilisent tous deux la recherche parentid , et la colonne parentidtypecode vous indique le type de client, enregistrez l’adresse. est liée à.
Données d’adresse intégrées aux dossiers clients
Vous pouvez récupérer ou modifier les données des deux ou trois enregistrements customeraddress
intégrés à l’enregistrement client.
- Les enregistrements de compte comportent des colonnes
address1_addressid
etaddress2_addressid
. - Les enregistrements de contact comportent des colonnes
address1_addressid
,address2_addressid
etaddress3_addressid
.
Ces colonnes stockent customeraddressid
des valeurs, et il existe d’autres colonnes client chacune préfixée par address1*
, address2*
ou address3*
qui contiennent le correspondant informations d’adresse de la customeraddress
table.
La colonne customeraddress
numéro d’adresse vous indique quelle adresse s’applique aux colonnes de l’enregistrement client parent. Vous ne pouvez pas définir la addressnumber
colonne sur une valeur utilisée par un autre customeraddress
enregistrement lié au même client parent. Vous pouvez définir une valeur addressnumber
existante sur 0 ou null, puis modifier la valeur d’un autre enregistrement si vous souhaitez échanger la position relative des enregistrements contre celle des enregistrements client. Tandis que la addressnumber
valeur augmente pour chaque enregistrement créé pour un client, outre le contrôle de la position de l’adresse intégrée respective dans l’enregistrement client (soit 1
, 2
, soit 3
), la valeur addressnumber
de la colonne n’est utilisée à aucune autre fin.
Dataverse met à jour ces customeraddress
enregistrements uniquement via les colonnes d’enregistrement client correspondantes au lieu de mettre à jour les customeraddress
lignes directement. Cependant, n’importe qui peut modifier ces enregistrements en tant qu’ customeraddress
enregistrements, ou ajouter d’autres customeraddress
enregistrements associés à l’ account
ou contact
enregistrement qui ne sont pas t intégré aux enregistrements de compte et de contact.
La suppression des lignes d’adresses client intégrées n’est pas autorisée
Par défaut, si vous tentez de supprimer l’un des enregistrements customeraddress
intégrés référencés dans les address1_addressid
, address2_addressid
ou address3_addressid
pour un enregistrement client, vous obtenez une erreur comme la suivante :
Nom:
CannotDeleteDueToAssociation
Code:0x80040227
Nombre:-2147220953
Message: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
Découvrez comment vous pouvez modifier ce comportement
Désactiver la création d’enregistrements vides
Étant donné que chaque ligne du customeraddress
tableau est prise en compte dans la Dataverse capacité que vous payez, vous souhaiterez peut-être minimiser ce coût.
Vous pouvez indiquer Dataverse de ne pas créer de lignes de tableau customeraddress
vides pour chaque enregistrement client en modifiant le paramètre Désactiver la création d’enregistrements d’adresses vides . dans le Power Platform centre d’administration. Avant de modifier ce comportement, vous devez déterminer si vous disposez de personnalisations existantes qui dépendent du comportement par défaut. En savoir plus sur ce paramètre
Lorsque ce paramètre est activé, aucune nouvelle ligne de tableau customeraddress
vide n’est créée lors de la création de nouveaux enregistrements client. Les enregistrements ne sont créés que si la charge utile entrante contient des données d’adresse. Normalement, la charge utile inclut uniquement les colonnes contenant des données. S’il n’y a pas de données pour les colonnes, les colonnes ne sont pas incluses dans la charge utile et les valeurs sont nulles lorsque l’enregistrement est enregistré. Toutefois, si la charge utile contient des colonnes d’adresse avec des valeurs définies sur null, l’adresse est créée avec des valeurs nulles. Si vous continuez à voir des enregistrements vides créés, vérifiez comment ils sont créés et si cette application cliente envoie des données de colonne avec des valeurs nulles.
Si le paramètre Désactiver la création d’enregistrements d’adresses vides est désactivé, le comportement par défaut reprend. L’activation de ce paramètre ne supprime aucune customeraddress
ligne de tableau existante. La réactivation de ce paramètre après sa désactivation ne recrée pas les enregistrements qui n’ont pas été créés.
Détecter si la création d’enregistrements d’adresse vides est désactivée
Ces exemples de fonctions montrent comment détecter si le paramètre Désactiver la création d’enregistrements d’adresses vides est activé dans l’environnement.
Cette méthode statique IsEmptyAddressRecordCreationDisabled
utilise la classe WhoAmIRequest et la méthode IOrganizationService.Retrieve pour vérifier une valeur dans la colonne Organization.OrgDbOrgSettings.
static bool IsEmptyAddressRecordCreationDisabled(IOrganizationService service)
{
Guid orgId = ((WhoAmIResponse)service
.Execute(new WhoAmIRequest())).OrganizationId;
Entity organization = service
.Retrieve("organization", orgId, new ColumnSet("orgdborgsettings"));
XDocument orgdborgsettings = XDocument
.Parse((string)organization["orgdborgsettings"]);
XElement? element = orgdborgsettings
.XPathSelectElement("//CreateOnlyNonEmptyAddressRecordsForEligibleEntities");
// Return true only when the element exists and has the value of 'true'
return element != null && element.Value == "true";
}
Supprimer les enregistrements d’adresses intégrés
Par défaut, vous ne pouvez pas supprimer les lignes de tableau customeraddress
incorporées référencées par les colonnes address1_addressid
, address2_addressid
ou address3_addressid
dans les tables client. Voir La suppression des lignes d’adresses client intégrées n’est pas autorisée.
Le paramètre Activer la suppression des enregistrements d’adresses dans le Power Platform Centre d’administration modifie ce comportement. En savoir plus sur ce paramètre
Détecter si la suppression des enregistrements d’adresse est activée
Ces exemples de fonctions montrent comment détecter si le paramètre Activer la suppression des enregistrements d’adresses est activé dans l’environnement.
Cette méthode statique IsDeleteAddressRecordsEnabled
utilise la classe WhoAmIRequest et la méthode IOrganizationService.Retrieve pour vérifier une valeur dans la colonne Organization.OrgDbOrgSettings
static bool IsDeleteAddressRecordsEnabled(IOrganizationService service)
{
Guid orgId = ((WhoAmIResponse)service
.Execute(new WhoAmIRequest())).OrganizationId;
Entity organization = service
.Retrieve("organization", orgId, new ColumnSet("orgdborgsettings"));
XDocument orgdborgsettings = XDocument
.Parse((string)organization["orgdborgsettings"]);
XElement? element = orgdborgsettings
.XPathSelectElement("//EnableDeleteAddressRecords");
// Return true only when the element exists and has the value of 'true'
return element != null && element.Value == "true";
}
Suppression groupée des enregistrements d’adresses client vides
Après avoir désactivé la création d’enregistrements d’adresse vides et activé la suppression des enregistrements d’adresse, vous pouvez utiliser les exemples de fonctions suivants pour supprimer de manière asynchrone les customeraddress
enregistrements vides à l’aide du BulkDelete
message.
Ces fonctions sont basées sur les colonnes/attributs d’adresse (CustomerAddress) inscriptibles et n’incluent aucune colonne personnalisée susceptible de se trouver dans votre environnement. Vous souhaiterez peut-être modifier ces requêtes si vous devez inclure vos colonnes personnalisées.
La méthode static BulkDeleteEmptyCustomerAddressRecords
crée une tâche système pour supprimer les enregistrements customeradddress
vides à l’aide de la classe BulkDeleteRequest.
Cette méthode utilise les exemples IsDeleteAddressRecordsEnabled
et IsEmptyAddressRecordCreationDisabled
de méthodes statiques décrites dans Détecter si la suppression des enregistrements d’adresse est activée et Détectez si la création d’enregistrements d’adresses vides est désactivée respectivement pour garantir que ces paramètres sont configurés pour permettre la suppression de tous les enregistrements d’adresses client vides et garantir qu’aucun nouveau n’est créé.
/// <summary>
/// Create a Bulk Delete job to delete empty customer address records
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance.</param>
/// <returns>The Id of the system job</returns>
/// <exception cref="Exception"></exception>
static Guid BulkDeleteEmptyCustomerAddressRecords(IOrganizationService service)
{
if (!IsDeleteAddressRecordsEnabled(service))
{
throw new Exception("Enable deletion of address records" +
" before running this method.");
}
if (!IsEmptyAddressRecordCreationDisabled(service))
{
throw new Exception("Disable empty address record creation" +
" before running this method.");
}
var query = new QueryExpression("customeraddress")
{
ColumnSet = new ColumnSet("customeraddressid"),
Criteria =
{
Conditions =
{
new ConditionExpression("city", ConditionOperator.Null),
new ConditionExpression("country", ConditionOperator.Null),
new ConditionExpression("county", ConditionOperator.Null),
new ConditionExpression("fax", ConditionOperator.Null),
new ConditionExpression("freighttermscode", ConditionOperator.Null),
new ConditionExpression("latitude", ConditionOperator.Null),
new ConditionExpression("line1", ConditionOperator.Null),
new ConditionExpression("line2", ConditionOperator.Null),
new ConditionExpression("line3", ConditionOperator.Null),
new ConditionExpression("longitude", ConditionOperator.Null),
new ConditionExpression("postalcode", ConditionOperator.Null),
new ConditionExpression("postofficebox", ConditionOperator.Null),
new ConditionExpression("primarycontactname", ConditionOperator.Null),
new ConditionExpression("shippingmethodcode", ConditionOperator.Null),
new ConditionExpression("stateorprovince", ConditionOperator.Null),
new ConditionExpression("telephone1", ConditionOperator.Null),
new ConditionExpression("telephone2", ConditionOperator.Null),
new ConditionExpression("telephone3", ConditionOperator.Null),
new ConditionExpression("upszone", ConditionOperator.Null),
new ConditionExpression("utcoffset", ConditionOperator.Null)
}
}
};
BulkDeleteRequest request = new()
{
QuerySet = new QueryExpression[] { query },
StartDateTime = DateTime.UtcNow,
RecurrencePattern = string.Empty,
SendEmailNotification = false,
JobName = "Delete empty customer address records",
ToRecipients = new List<Guid>().ToArray(),
CCRecipients = new List<Guid>().ToArray()
};
var response = (BulkDeleteResponse)service.Execute(request);
return response.JobId;
}
Notes
Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)
Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour