2014-02-11 3 views
2

Мой плагин огонь на Pre Создать операцию на Entity X. При попытке обновить поле на объект X с помощью следующего кода я получаю сообщение об ошибке:Plugin Pre Операция Create - ошибка поле Update

trEntity = (Entity)context.InputParameters["Target"]; 
trGuid = (Guid)trEntity.Id; 

tr = (Entity)service.Retrieve("EntityX", trGuid, 
        new ColumnSet(new string[] { "field_a", "field_b" })); 


tr["field_a"] = null; 
service.Update(tr); 

Ошибка Я получаю: объект X с Id = 11505683-2292-b537-e311-143710e56fb7 не существует

ответ

9

Поскольку вы в Pre-Create, предприятие еще не существует в базе данных.

Вам не нужно явно указывать Update в событии Pre. Вы можете просто обновить объект Target (trEntity в вашем случае), и сделанные вами изменения будут сохранены с помощью операции Create. Объект Target является фактическим сущностью, которая должна быть создана, поэтому не стесняйтесь обновлять поля непосредственно на Target в событии Pre.

trEntity = (Entity)context.InputParameters["Target"]; 
trEntity["field_a"] = null; 
+0

Спасибо, Джош. Итак, вы думаете, потому что это Pre Create, и я использую сервис для uodate. Я получаю ошибку? Я попробую использовать 'trEntity [" field_a "] = null;' вместо этого. – Nick

+0

Все нормально. У меня есть еще одна проблема: мне нужно получить значение атрибута, который является EntityReference. Когда я использую 'var tType = (EntityReference) trEntity.Attributes [" trTypeId "]; var trType = tType.Name; 'Я НЕ получаю значение и всегда получаю null. Пожалуйста посоветуй. – Nick

+0

Я могу получить идентификатор EntityReference, но не имя. Таким образом, следующий код работает нормально: 'var tType = (EntityReference) trEntity.Attributes [" trTypeId "]; var trType = tType.Id; ' – Nick

0

Как вы создашьку? Это также происходит, когда вы пытаетесь обновить запись за пределами текущей транзакции, то есть с помощью созданного вручную объекта OrganizationServiceProxy вместо того, чтобы использовать тот, который предоставляется IOrganizationServiceFactory.CreateOrganizationService.

+0

Я использую Developer toolkit и создаю службу следующим образом: 'IPluginExecutionContext context = localContext.PluginExecutionContext; Служба IOrganizationService = localContext.OrganizationService; ** ' – Nick

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