Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Таблицы учетных записей и контактов важны для идентификации клиентов, продажи продуктов и услуг и предоставления более высокого обслуживания клиентам. Таблица customeraddress хранит сведения об адресе и доставке для клиента.
Таблица учетных записей
Таблица счетов — это одна из таблиц в Dataverse, к которой большинство других таблиц присоединены или имеют связь. В Dataverse учетная запись представляет компанию, с которой у подразделения есть отношения. Сведения, включенные в учетную запись, — это все соответствующие контактные данные, сведения о компании, категория, тип отношений и адресная информация. Другие сведения, которые применяются, включают следующие элементы:
- Учетная запись может быть родительской для большинства типов таблиц, включая другую учетную запись.
- Учетная запись может быть автономной таблицей.
- У учетной записи может быть только одна учетная запись в качестве родительской.
- Учетные записи могут иметь несколько дочерних учетных записей и дочерних контактов.
Управление учетными записями является одной из важных концепций управления отношениями между бизнес-клиентами (Dynamics 365), так как организация хочет видеть все действия, которые они имеют с другой компанией. Все эти действия объединяются на уровне учетной записи. Просмотрите справочную информацию о таблице "Учетная запись".
Таблица контактов
В Dataverse контакт представляет человека, как правило, человека, с которым у подразделения есть отношения, такие как клиент, поставщик или коллега. Таблица контактов — это одна из таблиц, с которыми связаны большинство других таблиц. Контакт может быть автономной таблицей. В эту таблицу входят профессиональные, личные и семейные сведения, а также несколько адресов. Просмотрите ссылку на таблицу контактов.
Как учетные записи, так и контакты являются частью управления клиентами и связаны друг с другом следующим образом:
- Контакт может быть родительским элементом для каждой другой таблицы, кроме учетных записей и контактов.
- У контакта может быть только одна учетная запись в качестве родительской.
- Контакт можно пометить как основное контактное лицо для учетной записи, установив значение в столбце Account.PrimaryContactId .
В таблице контактов хранятся сведения о человеке, например адресе электронной почты, адресе улицы и номерах телефонов. Она также включает в себя другие связанные сведения, такие как дата рождения или годовщины человека. В зависимости от типа клиентов, которые имеются у бизнес-подразделения, могут требоваться только контакты или контакты и учетные записи, чтобы предоставить полное представление о своих клиентах.
Связывание таблиц, таких как действия и заметки к contact таблице, позволяет пользователю видеть все сообщения, которые пользователь имел с клиентом, любые действия, которые пользователь принял от имени клиента, и все сведения, необходимые пользователю о клиенте.
Таблица CustomerAddress
Эта таблица содержит дополнительные сведения об адресе и доставке для записей клиентов (учетная запись и контакт). По умолчанию Dataverse создает по крайней мере две customeraddress записи в этой таблице при создании новой записи клиента, даже если данные для этих записей отсутствуют.
Узнайте, как изменить это поведение
Все customeraddress записи, связанные с учетными и контактными записями, доступны через отношения Account_CustomerAddress и Contact_CustomerAddress соответственно. Оба этих отношения используют подстановку parentid, и столбец parentidtypecode указывает тип записи клиента, с которой адрес связан.
Адресные данные, встроенные в записи клиентов
Вы можете получить или изменить данные для двух или трех встроенных customeraddress записей, связанных с записью клиента.
- Записи учетной записи имеют столбцы
address1_addressidиaddress2_addressid. - Записи контактов имеют столбцы
address1_addressid,address2_addressidа такжеaddress3_addressid.
Эти столбцы хранят значения customeraddressid, и есть другие столбцы клиента, каждый из которых имеет префикс либо address1*, address2*, или address3*, и содержат соответствующие сведения об адресе из таблицы customeraddress.
Столбец customeraddressaddressnumber указывает, какой адрес применяется к столбцам записей родительского клиента. Вы не можете задать для столбца addressnumber значение, которое уже используется другой записью customeraddress, связанной с тем же самым родительским клиентом. Можно задать для существующего addressnumber значения значение 0 или NULL, а затем изменить значение другой записи, если вы хотите заменить относительную позицию записей для записей клиента. Хотя значение addressnumber увеличивается с каждой записью, созданной для клиента, значение столбца addressnumber не используется ни для каких других целей, за исключением управления соответствующим положением внедренного адреса в записи клиента (1, 2 или 3).
Dataverse обновляет только эти записи customeraddress через соответствующие столбцы записей клиента вместо обновления строк customeraddress напрямую. Однако любой пользователь может редактировать эти записи как записи customeraddress или добавлять дополнительные записи customeraddress, связанные с записью account или contact, которые не встроены в учетную запись или запись контакта.
Удаление встроенных строк адресов клиента запрещено
По умолчанию при попытке удалить одну из внедренных customeraddress записей, на которые ссылается ссылка в address1_addressid, address2_addressidили address3_addressid для записи клиента, вы получите ошибку, как показано ниже:
Имя:
CannotDeleteDueToAssociation
Код:0x80040227
Число:-2147220953
Сообщение: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
Узнайте, как изменить это поведение
Отключение создания пустой записи
Так как каждая строка в customeraddress таблице засчитывается в счет емкости Dataverse, которую вы оплачиваете, может потребоваться снизить эту стоимость.
Вы можете поручить Dataverse не создавать пустые строки таблицы для каждой записи клиента, изменив параметр "Отключить создание пустых записей адресов" в Центре администрирования Power Platform. Перед изменением этого поведения следует учитывать наличие существующих настроек, зависящих от поведения по умолчанию. Дополнительные сведения об этом параметре
Хотя этот параметр включен, при создании новых записей клиента новые пустые customeraddress строки таблицы не создаются. Записи создаются только в том случае, если входящие полезные данные содержат адресную информацию. Как правило, полезная нагрузка включает только те столбцы, которые содержат данные. Если для столбцов нет данных, столбцы не включаются в нагрузку, а значения становятся NULL при сохранении записи. Однако если полезные данные содержат столбцы адресов со значениями NULL, адрес создается со значениями NULL. Если вы продолжаете видеть созданные пустые записи, проверьте, как они создаются и отправляют ли это клиентское приложение данные столбцов со значениями NULL.
Если параметр отключить создание пустой записи адреса выключен, то стандартное поведение возобновляется. Включение этого параметра не удаляет существующие customeraddress строки таблицы. Переключение этого параметра обратно после отключения не создает записи, которые не были созданы.
Определить, отключено ли создание пустой записи адреса
Примеры этих функций демонстрируют, как определить, включён ли параметр Отключение создания пустой записи адресов в среде.
Этот статический IsEmptyAddressRecordCreationDisabled метод использует класс WhoAmIRequest и метод IOrganizationService.Retrieve для проверки значения в столбце 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";
}
Удалить внедренные записи адресов
По умолчанию не удается удалить встроенные строки customeraddress таблицы, на которые ссылаются столбцы address1_addressid, address2_addressid, или address3_addressid в таблицах клиентов. См. запрещено удалять встроенные строки адресов клиента
Параметр "Включить удаление записей адресов " в Центре администрирования Power Platform изменяет это поведение. Дополнительные сведения об этом параметре
Определение, включено ли удаление записей адресов
В этих примерах функций показано, как определить, включен ли параметр "Включить удаление записей адресов " в среде.
Этот статический IsDeleteAddressRecordsEnabled метод использует класс WhoAmIRequest и метод IOrganizationService.Retrieve для проверки значения в столбце 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";
}
Массовое удаление пустых записей адресов клиента
После отключения создания пустой записи адресов и включения удаления записей адресов можно использовать следующие функции для асинхронного удаления пустых customeraddress записей с помощью BulkDelete сообщения.
Эти функции основаны на адресных столбцах или атрибутах, доступных для записи (CustomerAddress), и не содержат пользовательские столбцы, которые могут иметься в вашей среде. Возможно, потребуется изменить эти запросы, если необходимо включить настраиваемые столбцы.
BulkDeleteEmptyCustomerAddressRecords Статический метод создает системное задание для удаления пустых customeradddress записей с помощью класса BulkDeleteRequest.
Этот метод использует примеры статических методов IsDeleteAddressRecordsEnabled и IsEmptyAddressRecordCreationDisabled, описанные в разделах Определение, включено ли удаление записей адресов и Определение, отключено ли создание пустых записей адресов, соответственно, чтобы обеспечить, что в этих параметрах включено удаление пустых записей адресов клиентов и запрещено создание новых таких записей.
/// <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;
}