2014-10-29 3 views
0

У меня есть плагин Dynamics CRM, зарегистрированный в «Предварительная проверка» и триггер при удалении. У меня есть запрос LINQ, который извлекает максимальное значение поля даты для записей детей для определенной родительской записи.Плагин Dynamics CRM - запрос LINQ в 'Предварительная проверка'

Вот мой код:

var q = (from e1 in serviceContext.CreateQuery<entity1>() 
     join e2 in serviceContext.CreateQuery<entity2>() on e1.typeid.Id equals e2.codeId 
     where e1.statecode == 0 && e1.ParentId.Id.Equals(new Guid(ParentGuidStr)) 
     orderby e1.dt descending 
     select new {e1.dt, e2.code}).ToList(); 

Я получаю следующее сообщение об ошибке на приведенном выше запросе Когда запись о том, что плагин триггеров НЕАКТИВНО:

PreValidateEntity1Delete PlugIn Error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentNullException: Value cannot be null. Parameter name: g

Я не знаю, почему я я получаю вышеуказанную ошибку, и если связь между неактивной дочерней записью и родительской записью была нарушена в запросе LINQ или есть другая причина.

ответ

2

Во-первых, убедитесь, что все записи детей имеют ссылку на родительскую запись. Затем измените где contidion в:

where e1.statecode == 0 && e1.ParentId != null && e1.ParentId.Id.Equals(new Guid(ParentGuidStr)) 

Проблема состоит в том, что поле EntityReference (e1.ParentId) может быть пустым и при попытке получить доступ к нулевому объекту, появляется ошибка.

Тогда из-за этого вы также должны убедиться, что e1.typeid не равно null в состоянии соединения.

Или вы можете попробовать обходное решение с двумя отдельными запросами и собрать информацию из своих результатов.

Удачи вам!

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