2014-10-03 2 views
0

Есть ли связь между Retrieve и Update в плагине Dynamic CRM? Например, если я извлечения только одно поле:Связь между обновлением и обновлением в динамическом CRM PLUGIN

Entity e = (Entity)service.Retrieve("EntityLogicalName", EntityGuid, 
new ColumnSet(new string[] {"entityid"})); 

Могу ли я обновить еще одно поле в Entity е, не загруженное? Например:

e.Attributes["AnotherEntityField1] = "test1"; 
e.Attributes["AnotherEntityField2] = "test2"; 
service.update(e); 

не включая все поля, которые должны быть обновлены в Восстановите, могут это дело некоторые скрытые проблемы?

ответ

2

Предполагая, как это кажется, что вы только получение первичного ключа сущности, entityid, вам не нужно будет сделать извлечение.

Entity e = new Entity("EntityLogicalName") { Id = EntityGuid }; 
e.Attributes.Add("AnotherEntityField1", "test1"); 
e.Attributes.Add("AnotherEntityField2", "test2"); 
service.Update(e); 

Если вы делаете процесс восстановления, чтобы подтвердить запись существует вам нужно попробовать/поймать или использовать выборки нескольких поскольку Retrieve будет сгенерировано исключение, если запись не существует.

1

То, что вы пытаетесь сделать, вполне приемлемо и не вызовет никаких проблем. Поскольку вы получили экземпляр Entity с помощью операции Retrieve, необходимое логическое имя и идентификатор будут правильно установлены для обновления.

Ваш код должен будет читать, как указано ниже, для добавления новых атрибутов, которые не были извлечены изначально, иначе вы получите KeyNotFoundException, так как тип Entity - это всего лишь обертка более Dictionary<string,string>.

e.Attributes.Add("AnotherEntityField2","test2"); 
0

Когда вы пытаетесь обновить сущность, вам не нужно, чтобы в сборке атрибутов существовало поле, но чтобы исключить исключение «Указанный ключ не представлен в словаре» - это хорошая практика, чтобы сначала проверить если Colletion Attributes содержит поле, которое вы хотите обновить. Если да, просто обновите его, иначе вы должны добавить его в кол-во атрибутов объекта.

if(e.Attributes.Contains("AnotherEntityField1")) 
{ 
e.Attributes["AnotherEntityField1"] = "test1"; 
} 
else 
{ 
e.Attributes.Add("AnotherEntityField1", "test1"); 
} 

// теперь обновить операции

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