Kundentabellen (Konto, Kontakt und Kundenadresse)
Die Konto- - und Kontakttabellen sind von entscheidender Bedeutung für die Identifizierung und Verwaltung von Kunden, den Verkauf von Produkten und Dienstleistungen sowie die Bereitstellung eines erstklassigen Kundendienstes. In der Tabelle customeraddress werden Adress- und Versandinformationen eines Kunden gespeichert.
Konto-Tabelle
Die Tabelle „Konto“ ist eine der Tabellen in Dataverse, an die die meisten anderen Tabellen angehängt oder übergeordnet sind. In Dataverse steht eine Firma für ein Unternehmen, mit dem die Unternehmenseinheit eine Geschäftsbeziehung unterhält. Informationen, die zu einer Firma erfasst werden, sind alle relevanten Kontaktinformationen, Unternehmensinformationen, Kategorien, Beziehungstypen und Adresseinformationen. Weitere Informationen, die verwendet werden können, sind die folgenden Elemente:
- Ein Konto kann den meisten Tabellentypen übergeordnet sein, einschließlich eines anderen Kontos.
- Ein Konto kann eine eigenständige Tabelle sein.
- Eine Firma kann nur eine einzige Firma als übergeordnetes Element haben.
- Firmen können mehrere untergeordnete Firmen und untergeordnete Kontakte aufweisen.
Die Kontoverwaltung ist eines der wichtigsten Konzepte des Business-to-Business-Kundenbeziehungsmanagements (Dynamics 365), da ein Unternehmen alle Aktivitäten sehen möchte, die es mit einem anderen Unternehmen durchführt. Alle diese Aktivitäten werden auf Kontoebene zusammengeführt. Sehen Sie sich die Referenz zur Kontotabelle an.
Kontakt-Tabelle
In Dataverse kann ein Kontakt eine Person, in der Regel ein Individuum, mit dem eine Unternehmenseinheit eine Geschäftsbeziehung wie Kunde, Lieferant oder Kollege unterhält, darstellen. Die Kontakttabelle ist eine der Tabellen, mit denen die meisten anderen Tabellen verknüpft sind. Ein Kontakt kann eine eigenständige Tabelle sein. In dieser Tabelle sind berufliche, persönliche und familiäre Informationen sowie mehrere Adressen enthalten. Sehen Sie sich die Referenz zur Kontakttabelle an.
Firmen und Kontakte sind Bestandteil der Verwaltung von Kunden und stehen folgendermaßen in Beziehungen zueinander:
- Ein Kontakt kann übergeordnet zu jeder anderen Tabelle außer Konten und Kontakten sein.
- Ein Kontakt kann nur eine einzige Firma als übergeordnetes Element haben.
- Ein Kontakt kann als primäre Kontaktperson für ein Konto markiert werden, indem die Spalte Account.PrimaryContactId festgelegt wird.
In der Kontakttabelle werden Informationen zu einer Person gespeichert, beispielsweise E-Mail-Adresse, Anschrift und Telefonnummern. Es enthält außerdem weitere zugehörige Informationen, beispielsweise den Geburtstag oder den Jahrestag der Person. Je nach Kundentyp einer Unternehmenseinheit werden entweder nur Kontakte oder Kontakte und Firmen benötigt, um einen vollständigen Überblick über ihre Kunden bereitzustellen.
Durch die Verknüpfung von Tabellen wie Aktivitäten und Notizen mit der contact
Tabelle kann der Benutzer die gesamte Kommunikation sehen, die der Benutzer mit einem Kunden hatte, alle Aktionen, die der Benutzer im Namen des Kunden ausgeführt hat, und alle Informationen, die der Benutzer über den Kunden benötigt.
customeraddress-Tabelle
Diese Tabelle enthält weitere Adress- und Versandinformationen für Kundendatensätze (Konto und Kontakt). Standardmäßig werden bei der Erstellung eines neuen Kundendatensatzes mindestens zwei Datensätze in dieser Tabelle erstellt, auch wenn für diese Datensätze keine Daten vorhanden sind. Dataverse customeraddress
Erfahren Sie, wie Sie dieses Verhalten ändern können
Alle customeraddress
Datensätze im Zusammenhang mit Konto- und Kontaktdatensätzen sind über die Account_CustomerAddress bzw. Contact_CustomerAddress Beziehungen verfügbar. Diese Beziehungen verwenden beide die parentid -Suche, und die Spalte parentidtypecode gibt Aufschluss über den Typ des Kundendatensatzes, auf den sich die Adresse bezieht.
In Kundendatensätze eingebettete Adressdaten
Sie können die Daten für die zwei oder drei eingebetteten customeraddress
Datensätze mit dem Kundendatensatz abrufen oder ändern.
- Kontodatensätze haben die Spalten
address1_addressid
undaddress2_addressid
. - Kontaktdatensätze haben die Spalten
address1_addressid
,address2_addressid
undaddress3_addressid
.
In diesen Spalten werden customeraddressid
Werte gespeichert. Darüber hinaus gibt es weitere Kundenspalten, die jeweils mit address1*
, address2*
oder address3*
beginnen und die entsprechenden Adressinformationen aus der customeraddress
Tabelle enthalten.
Die Spalte customeraddress
Adressnummer gibt Aufschluss darüber, welche Adresse für die Kundendatensatzspalten übergeordnetes Element gilt. Sie können die addressnumber
Spalte nicht auf einen Wert setzen, der von einem anderen customeraddress
Datensatz verwendet wird, der sich auf denselben übergeordnetes Element-Kunden bezieht. Sie können einen vorhandenen addressnumber
Wert auf 0 oder Null setzen und dann den Wert eines anderen Datensatzes ändern, wenn Sie die relative Position der Datensätze für die Kundendatensätze vertauschen möchten. Während der addressnumber
Wert für jeden für einen Kunden erstellten Datensatz erhöht wird, wird der 1
Spaltenwert für keinen anderen Zweck verwendet, außer zur Steuerung der jeweiligen eingebetteten Adressposition im Kundendatensatz (entweder 2
, 3
oder addressnumber
).
Dataverse aktualisiert diese customeraddress
Datensätze nur über die entsprechenden Kundendatensatzspalten, anstatt die customeraddress
Zeilen direkt zu aktualisieren. Allerdings kann jeder diese Datensätze als customeraddress
Datensätze bearbeiten oder weitere customeraddress
Datensätze hinzufügen, die mit dem account
oder contact
Datensatz verknüpft sind, die nicht in die Konto- und Kontaktdatensätze eingebettet sind.
Das Löschen eingebetteter Kundenadresszeilen ist nicht zulässig
Wenn Sie versuchen, einen der eingebetteten customeraddress
Datensätze zu löschen, auf die in address1_addressid
, address2_addressid
oder address3_addressid
einem Kundendatensatz verwiesen wird, erhalten Sie standardmäßig eine Fehlermeldung wie die folgende:
Name:
CannotDeleteDueToAssociation
Code:0x80040227
Nummer:-2147220953
Nachricht: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
Erfahren Sie, wie Sie dieses Verhalten ändern können
Deaktivieren der Erstellung leerer Datensätze
Da jede Zeile in der customeraddress
Tabelle auf die Dataverse Kapazität angerechnet wird, für die Sie bezahlen, möchten Sie diese Kosten möglicherweise minimieren.
Sie können festlegen, dass für jeden Kundendatensatz keine leeren Dataverse Tabellenzeilen erstellt werden, indem Sie die Einstellung customeraddress
Erstellung leerer Adressdatensätze deaktivieren in Admin Center ändern Power Platform . Bevor Sie dieses Verhalten ändern, sollten Sie prüfen, ob Sie über vorhandene Anpassungen verfügen, die vom Standardverhalten abhängen. Weitere Informationen zu dieser Einstellung
Wenn diese Einstellung aktiviert ist, werden beim Anlegen neuer Kundendatensätze keine neuen leeren customeraddress
Tabellenzeilen erstellt. Datensätze werden nur erstellt, wenn die eingehende Nutzlast Adressdaten enthält. Normalerweise enthält die Nutzlast nur Spalten mit Daten. Wenn für die Spalten keine Daten vorhanden sind, werden die Spalten nicht in die Nutzlast aufgenommen und die Werte sind null, wenn der Datensatz gespeichert wird. Wenn die Nutzlast jedoch Adressspalten mit auf Null gesetzten Werten enthält, wird die Adresse mit Nullwerten erstellt. Wenn weiterhin leere Datensätze erstellt werden, überprüfen Sie, wie sie erstellt werden und ob diese Clientanwendung Spaltendaten mit Nullwerten sendet.
Wenn die Einstellung Erstellung leerer Adressdatensätze deaktivieren deaktiviert ist, wird das Standardverhalten wiederhergestellt. Durch das Aktivieren dieser Einstellung werden keine vorhandenen customeraddress
Tabellenzeilen gelöscht. Wenn Sie diese Einstellung nach dem Deaktivieren wieder aktivieren, werden nicht erstellte Datensätze nicht neu erstellt.
Erkennen, ob die Erstellung leerer Adressdatensätze deaktiviert ist
Diese Beispielfunktionen zeigen, wie erkannt wird, ob die Einstellung Erstellung leerer Adressdatensätze deaktivieren in Umgebung aktiviert ist.
Diese statische IsEmptyAddressRecordCreationDisabled
Methode verwendet die Klasse WhoAmIRequest und die Methode IOrganizationService.Retrieve , um einen Wert in der Spalte Organization.OrgDbOrgSettings zu überprüfen.
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";
}
Eingebettete Adressdatensätze löschen
Standardmäßig können Sie eingebettete customeraddress
Tabellenzeilen, auf die in den Spalten address1_addressid
, address2_addressid
oder address3_addressid
in Kundentabellen verwiesen wird, nicht löschen. Siehe Das Löschen eingebetteter Kundenadresszeilen ist nicht zulässig
Die Einstellung Löschen von Adressdatensätzen aktivieren in Power Platform Admin Center ändert dieses Verhalten. Weitere Informationen zu dieser Einstellung
Erkennen, ob das Löschen von Adressdatensätzen aktiviert ist
Diese Beispielfunktionen zeigen, wie erkannt wird, ob die Einstellung Löschen von Adressdatensätzen aktivieren in Umgebung aktiviert ist.
Diese statische IsDeleteAddressRecordsEnabled
Methode verwendet die WhoAmIRequest-Klasse und die IOrganizationService.Retrieve-Methode , um einen Wert in der Spalte Organization.OrgDbOrgSettings zu überprüfen.
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";
}
Massenlöschung leerer Kundenadressdatensätze
Nachdem Sie die Erstellung leerer Adressdatensätze deaktiviert und das Löschen von Adressdatensätzen aktiviert haben, können Sie die folgenden Beispielfunktionen verwenden, um leere customeraddress
Datensätze mithilfe der BulkDelete
Nachricht asynchron zu löschen.
Diese Funktionen basieren auf den beschreibbaren Spalten/Attributen der Adresse (CustomerAddress) und schließen keine benutzerdefinierten Spalten ein, die sich möglicherweise in Ihrem Umgebung befinden. Möglicherweise möchten Sie diese Abfragen ändern, wenn Sie Ihre benutzerdefinierten Spalten einschließen müssen.
Die statische BulkDeleteEmptyCustomerAddressRecords
Methode erstellt einen Systemjob zum Löschen leerer customeradddress
Datensätze mithilfe der BulkDeleteRequest-Klasse.
Diese Methode verwendet die in IsDeleteAddressRecordsEnabled
Erkennen, ob das Löschen von Adressdatensätzen aktiviert ist IsEmptyAddressRecordCreationDisabled
und Erkennen, ob die Erstellung leerer Adressdatensätze deaktiviert ist beschriebenen beispielhaften und statischen Methoden, um sicherzustellen, dass diese Einstellungen so konfiguriert sind, dass das Löschen aller leeren Kundenadressdatensätze zulässig ist und keine neuen erstellt werden.
/// <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;
}
Hinweis
Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)
Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).