Есть ли способ связать контакт «parentcustomerid» с учетной записью при создании связанных объектов в одной операции в динамике?

#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 каждый раз, когда все будет создано.