|
|
#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. |
|
|
|
|
#2 |
|
Участник
|
1. Плагин у Вас работает или нет.
Чтобы быстро определить это попробуйте поставить в метод Execute throw new InvalidPluginExecutionException("test"); Если ошибка произошла, значит все подключилось. Если нет, проверяйте регистрацию плагина. Он точно в синхронном режиме у Вас? Я последнее время отказываюсь от DEBUG вообще. Все делаю логированием с помощью спец библиотек или просто в файл пишу. |
|
|
|
|
#3 |
|
Moderator
|
Вы неправильно зарегистрировали шаг обработки. На системное событие подписан базовый класс, а не дочерний. С точки зрения системы плагин - это наследник интерфейса IPlugin. При регистрации сборки нужно указать корректных наследников и тогда система будет инстанцировать их.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#4 |
|
Moderator
|
Удобно. Так же можно отказаться от Visual Studio и компилировать сборки из командной строки.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#5 |
|
Участник
|
Цитата:
при этом только логирование помогло. Также на боевых серверах отладить решение невозможно. Особенно если баг не воспроизводится на разработческом. Логировать действия в плагине удобно, и можно выключить режим самого лога Debug и прочее, чтобы мелочь не выводить. Последний раз редактировалось g.Naukovych; 26.02.2013 в 23:29. |
|
|
|
|
#6 |
|
Участник
|
Цитата:
Сообщение от g.Naukovych
1. Плагин у Вас работает или нет.
Чтобы быстро определить это попробуйте поставить в метод Execute throw new InvalidPluginExecutionException("test"); Если ошибка произошла, значит все подключилось. Если нет, проверяйте регистрацию плагина. Он точно в синхронном режиме у Вас? Я последнее время отказываюсь от DEBUG вообще. Все делаю логированием с помощью спец библиотек или просто в файл пишу. Да, плагин точно в синхронном режиме. |
|
|
|
|
#7 |
|
Участник
|
Цитата:
Сообщение от Артем Enot Грунин
Вы неправильно зарегистрировали шаг обработки. На системное событие подписан базовый класс, а не дочерний. С точки зрения системы плагин - это наследник интерфейса IPlugin. При регистрации сборки нужно указать корректных наследников и тогда система будет инстанцировать их.
|
|
|
|
|
#8 |
|
Moderator
|
Можно увидеть доказательства?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#9 |
|
Участник
|
|
|
|
|
|
#10 |
|
Участник
|
Проблема была устранена при помощи полной перерегистрации всей сборки.
|
|
|
|
|
|