#c# #.net-core #dynamics-crm #microsoft-dynamics #dataverse
Вопрос:
Я использую Microsoft.Силовая схема.Вселенная данных.Клиентская библиотека для получения и создания данных в мой Dynamics 365 env с помощью .Приложение Net core. Я пытаюсь создать учетную запись с контактом в том же запросе, используя этот метод.
Это отлично работает, но я не могу связать контакт «parentcustomerid» с учетной записью, которую я только что создал, все еще выполняя только один запрос.
Я нашел обходной путь, выполнив обновление после создания, но это противоречит тому факту, что я хочу выполнить только один запрос (время выполнения действительно должно быть как можно меньше). Существует код обходного пути:
var account = new Entity(this._options.Account.Name);
account[this._options.Account.Columns.AccountName] = accountName;
var contact = new Entity(this._options.Contact.Name);
contact[this._options.Contact.Columns.FirstName] = dataverseContact.FirstName;
contact[this._options.Contact.Columns.LastName] = dataverseContact.LastName;
contact[this._options.Contact.Columns.Email] = dataverseContact.Email;
var contactCollection = new EntityCollection();
contactCollection.Entities.Add(contact);
account.RelatedEntities[new Relationship("aci_account_contact_AccountId")] = contactCollection;
var accountId = this._serviceClient.Create(account);
var contactId = GetContactIdByEmail(dataverseContact.Email).Resu<
var updatedContact = new Entity(this._options.Contact.Name);
updatedContact.Id = contactId;
updatedContact[this._options.Contact.Columns.CompanyName] = new EntityReference(this._options.Account.Name, accountId);
this._serviceClient.UpdateAsync(updatedContact);
Тем не менее, я хотел бы что-то подобное (что не работает, так как у меня нет учетной записи до ее создания…):
var account = new Entity(this._options.Account.Name);
account[this._options.Account.Columns.AccountName] = accountName;
var contact = new Entity(this._options.Contact.Name);
contact[this._options.Contact.Columns.FirstName] = dataverseContact.FirstName;
contact[this._options.Contact.Columns.LastName] = dataverseContact.LastName;
contact[this._options.Contact.Columns.Email] = dataverseContact.Email;
// New line that is not working because I don't have the accountId
contact["parentcustomerid"] = new EntityReference(this._options.Account.Name, accountId);
var contactCollection = new EntityCollection();
contactCollection.Entities.Add(contact);
account.RelatedEntities[new Relationship("aci_account_contact_AccountId")] = contactCollection;
var accountId = this._serviceClient.Create(account);
Мне было интересно, есть ли решение для этого, или я застрял в том, чтобы каждый раз получать, а затем обновлять?
Ответ №1:
Вы должны сами сгенерировать некоторые идентификаторы Guid, но если вы это сделаете, это возможно.
См. Пример от корпорации Майкрософт: https://github.com/microsoft/PowerApps-Samples/blob/1adb4891a312555a2c36cfe7b99c0a225a934a0d/cds/orgsvc/C#/CreateUpdateRecordsWithRelatedRecords/CreateUpdateRecordsWithRelatedRecords/SampleProgram.cs
Ответ №2:
Если создать новый экземпляр entity
, у него нет идентификатора, потому что он не был создан в динамике до запуска. Экземпляр сущности находится только в вашей памяти.
Guid accountId = this._serviceClient.Create(account)
Чтобы связать учетную запись с контактом, вам нужен идентификатор учетной записи.
Поэтому, прежде чем вы свяжете объекты, вы должны позвонить
Guid accountId = this._serviceClient.Create(account)
Комментарии:
1. Это я знаю. Но вы все равно можете создавать несколько объектов одновременно, как я объяснял выше. Мой вопрос в том, как я могу связать «parentcustomerid» с учетной записью, когда я создаю сущности. Контакт связан с учетной записью с «account_contact_AccountId», но мне также нужно одновременно установить «parentcustomerid». Как я могу это сделать? Это мой вопрос.
2. Попробуй
contact.Attributes.Add("parentcustomerid", new EntityReference(this._options.Account.Name, accountId));
3. Да, это сработало бы, но у меня нет идентификатора учетной записи, так как я хочу создать все в одном запросе, отсюда мой вопрос.
4. Как я описал выше, это не работает, потому что вы получаете идентификатор компании только после того, как он был создан в Dynamics.
5. Хорошо, отлично. Я думал, что будет способ, так как мы можем создать контакт одновременно с учетной записью, используя отношения и связанные отношения. Благодарим вас за подтверждение невозможности привязки дополнительного поля к учетной записи при использовании только одной операции для всех созданий. Я буду продолжать обновлять parentcustomerId каждый раз, когда все будет создано.