26.02.2013, 14:55 | #1 |
Участник
|
CRM 4.0 Отладка плагина
Добрый день!
Я пытаюсь отладить плагин, подключенный к событию Create кастомной сущности new_grmember. Начало плагина выглядит следующим образом: X++: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Crm.Sdk; using Microsoft.Crm.SdkTypeProxy; using Microsoft.Crm.Sdk.Query; using Microsoft.Win32; using Company.MsCrm40.Sdk; using Company.MsCrm40; using Company.Apps.Plugins.DataAccess; namespace Company.Apps.Plugins { public class PostCreateGroupMember : Plugin { public PostCreateGroupMember(string unsecureInfo, string secureInfo) : base(unsecureInfo, secureInfo) { } public override void Execute(IPluginExecutionContext context) { try { base.Execute(context); if (PluginConfiguration.LogIncomingMessages) { Logger.WriteInfo("PostCreateGroupMember Plug-in running.\nPluginExecutionContext:\n" + PluginHelper.GetContextXml(context)); } if (context.CallerOrigin is OfflineOrigin) return; _entity = (DynamicEntity)GetTargetEntity(_currentContext); if (context.MessageName == "Create" && TargetEntity.Properties.Contains("new_groupid")) { CreateVisits(); } UpdateGroupData(context); } catch (Exception ex) { StringBuilder errorMessage = new StringBuilder(); errorMessage.AppendFormat("Plug-in {0} failed\n", this.GetType().ToString()); errorMessage.AppendFormat("PrimaryEntityName: {0}\n", context.PrimaryEntityName); errorMessage.AppendFormat("MessageName: {0}\n", context.MessageName); errorMessage.AppendFormat("Error: {0}\n", ex.Message); InvalidPluginExecutionException invalidPluginExecutionException = new InvalidPluginExecutionException(errorMessage.ToString(), ex); invalidPluginExecutionException.Data.Add("PluginExecutionContext", PluginHelper.GetContextXml(context)); Logger.WriteError(invalidPluginExecutionException); throw invalidPluginExecutionException; } finally { UpdatePluginCheckeron(); Finally(); } } base.Execute(context); ничего не происходит. Т.е. при создании нового экземпляра сущности отрабатывает плагин без остановки в этой точке. Складывается ощущение, что этот код не отрабатывается в принципе. Зато если я ставлю точку останова в методе Execute класса Plugin, от которого унаследован класс PostCreateGroupMember, то отладчик на этой точке останавливается и дальше я могу отследить его работу (в метод Execute класса PostCreateGroupMember он так и не заходит). Вопрос: почему так происходит? По каким причинам плагин может не отрабатывать? Регистрировала плагин и подключалась к процессу так, как описано в этой статье: http://mmcrm.ru/?p=977. Последний раз редактировалось probka; 26.02.2013 в 15:55. |
|
26.02.2013, 17:30 | #2 |
Участник
|
1. Плагин у Вас работает или нет.
Чтобы быстро определить это попробуйте поставить в метод Execute throw new InvalidPluginExecutionException("test"); Если ошибка произошла, значит все подключилось. Если нет, проверяйте регистрацию плагина. Он точно в синхронном режиме у Вас? Я последнее время отказываюсь от DEBUG вообще. Все делаю логированием с помощью спец библиотек или просто в файл пишу. |
|
26.02.2013, 19:10 | #3 |
Moderator
|
Вы неправильно зарегистрировали шаг обработки. На системное событие подписан базовый класс, а не дочерний. С точки зрения системы плагин - это наследник интерфейса IPlugin. При регистрации сборки нужно указать корректных наследников и тогда система будет инстанцировать их.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
26.02.2013, 19:21 | #4 |
Moderator
|
Удобно. Так же можно отказаться от Visual Studio и компилировать сборки из командной строки.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
26.02.2013, 23:22 | #5 |
Участник
|
Цитата:
при этом только логирование помогло. Также на боевых серверах отладить решение невозможно. Особенно если баг не воспроизводится на разработческом. Логировать действия в плагине удобно, и можно выключить режим самого лога Debug и прочее, чтобы мелочь не выводить. Последний раз редактировалось g.Naukovych; 26.02.2013 в 23:29. |
|
27.02.2013, 09:28 | #6 |
Участник
|
Цитата:
Сообщение от g.Naukovych
1. Плагин у Вас работает или нет.
Чтобы быстро определить это попробуйте поставить в метод Execute throw new InvalidPluginExecutionException("test"); Если ошибка произошла, значит все подключилось. Если нет, проверяйте регистрацию плагина. Он точно в синхронном режиме у Вас? Я последнее время отказываюсь от DEBUG вообще. Все делаю логированием с помощью спец библиотек или просто в файл пишу. Да, плагин точно в синхронном режиме. |
|
27.02.2013, 09:30 | #7 |
Участник
|
Цитата:
Сообщение от Артем Enot Грунин
Вы неправильно зарегистрировали шаг обработки. На системное событие подписан базовый класс, а не дочерний. С точки зрения системы плагин - это наследник интерфейса IPlugin. При регистрации сборки нужно указать корректных наследников и тогда система будет инстанцировать их.
|
|
27.02.2013, 13:17 | #8 |
Moderator
|
Можно увидеть доказательства?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
27.02.2013, 14:17 | #9 |
Участник
|
|
|
05.03.2013, 10:18 | #10 |
Участник
|
Проблема была устранена при помощи полной перерегистрации всей сборки.
|
|
|
|