2016-05-17 3 views
3

Привет StackOverflow сообщества,Microsoft Dynamics CRM - Сообщение об ошибке: Entity Id должен быть таким же, как значение, установленное в свойстве мешок

Я просто пытаюсь скопировать записи в «контакт» - Сущности из плагина или обычая рабочий процесс. Соответствующий Кодекс

  QueryExpression qe = new QueryExpression("contact") 
      { 
       ColumnSet = new ColumnSet("firstname", "lastname") 
      }; 
      EntityCollection entityCollection = _organizationService.RetrieveMultiple(qe); 
      foreach (Entity entity in entityCollection.Entities) 
      { 
       entity.Id = Guid.NewGuid(); 

       if (!entity.Attributes.Contains("firstname")) 
       { 
        entity.Attributes.Add("firstname", ""); 
       } 
       entity["firstname"] = (entity.GetAttributeValue<string>("firstname") ?? "") + "(Copy)"; 

       _organizationService.Create(entity); 
      } 

К сожалению, я получаю всегда сообщение об ошибке

«Entity Id должен быть таким же, как значение, установленное в пакете недвижимости».

Если я выхожу из линии

Entity.Id = Guid.NewGuid(); 

тогда я получаю ошибку

«Невозможно вставить дубликат ключа.»

Я также попробовал различные другие способы построения нового Guid, в том числе

byte [] bytes = new byte[16]; 
random.NextBytes(bytes); 
entity.Id = new Guid(bytes); 

или

entity.Id = Guid.Empty; 

что приводит также в

«Идентификатор объекта должен быть таким же, как множество значений в сумке собственности ".

С другой стороны, у меня есть настольное приложение, в котором я подключаюсь к своей системе Microsoft CRM 2016 Office 365 с помощью этой статьи https://msdn.microsoft.com/en-us/library/jj602970.aspx и может копировать записи в порядке.

Любая помощь очень ценится.

+0

Я думаю, что вы создаете плагин в майкрософт динамической CRM вам нужно зарегистрировать плагин для создания, обновления и так далее, и не нужно _organizationService.Create (лица); , –

ответ

6

QueryExpression всегда возвращает идентификатор, как в качестве фактического Entity.Id, так и его название собственности contactid. Вот почему вы получаете ошибку. Вы можете просто удалить этот атрибут, но лучше всего всегда создавать новый объект C# Contact, а не обновлять его из CRM. Кроме того, вы не хотите настраивать свой собственный GUID, поскольку CRM использует последовательные GUID, которые лучше оптимизированы для индексирования и упорядочения.

QueryExpression qe = new QueryExpression("contact") 
{ 
    ColumnSet = new ColumnSet("firstname", "lastname") 
}; 

foreach (Entity entity in _organizationService.RetrieveMultiple(qe).Entities) 
{ 
    var copy = new Entity(); 
    copy["firstname'] = (entity.GetAttributeValue<string>("firstname") ?? "") + "(Copy)"; 
    _organizationService.Create(copy); 
} 
+0

Большое спасибо. Эти решения работают для меня. Я также попробовал entity.Attributes.Remove (entity.LogicalName + «id»), но это не сработало. – user172501

 Смежные вопросы

  • Нет связанных вопросов^_^