Немножко теории…

Плагины это.NET сборки, которые можно использовать, чтобы прервать события, сгенерированные CRM системой, чтобы выполнить множество различных действий. Например:

  • Добавить новые способы обработки данных или изменить существующие;
  • Выполнение сложной подпрограммы обновления для объектов CRM и/или их атрибутов, когда это непрактично при использовании JavaScript или бизнес-процессов;
  • Получение данных от другой системы и обновление данных в CRM, когда создана или обновлена запись объекта;
  • Обновление данных другой системы из CRM (например, системы бухучета).

Т.к. код плагинов выполняется на сервере, то он будет выполниться даже тогда, когда объект создается при помощи импорта или вызова API Web Service.

Разрабатывая плагины важно понимать конвейер выполнения событий. Сообщения в CRM это такие операции как создание, обновление, удаление и т.д., которые вызываются для объекта. Всякий раз, когда приходят сообщение, конвейер выполнения проходит следующие этапы:

Pre-Event > Core Operation (осуществленная в CRM) > Post-Event

Плагин можно написать только для выполнения либо в Pre-Event (т.е. плагин будет выполнятся до выполнения основного события), либо в Post- Event (плагин будет выполнятся после выполнения основного события). Схематически порядок выполнения конвейера можно представить так:

Разработка

Чтобы создать плагин выполните следующие шаги:

  • В первую очередь скачайте и установите Microsoft Dynamics CRM 4.0 SDK. Далее нам понадобятся из него некоторые сборки (dll-файлы);
  • Создайте новый проект в Visual Studio (2005 или 2008): File — New — Project – на панели Project types, выберите Visual C# — на панели Templates нажмите Class Library. Введите имя Вашего проекта и OK.

Visual Studio

Microsoft Dynamics CRM 4.0 основан на.NET Framework 2.0, таким образом Вы должны использовать либо Visual Studio 2005 либо Visual Studio 2008 для создания class libraries. Вы также можете создать проекты на различных языках, таких как Visual Basic.NET или C#.

  • В результате создастся новый public class. Теперь Вы должны добавить в проект ссылку на две cборки:
    • Microsoft.Crm.Sdk.dll
    • Microsoft.Crm.SdkTypeProxy.dll

    В Solution Explorer, щелкните правой кнопкой мыши по папке References и выберите Add Reference. На вкладке Browse перейдите к местоположению папке SDK\Bin. Выделите Microsoft.Crm.Sdk.dll и Microsoft.Crm.SdkTypeProxy.dll и OK.

CRM SDK Assemblies

Microsoft Dynamics CRM SDK включает следующие сборки:

  • Microsoft.Crm.Sdk.dll — содержит базовые классы, которые необходимы для разработать кастомной логики и действий бизнес-процессов. Также содержит вспомогательные классы, которые могут использоваться при разработки плагинов и бизнес-процессов.
  • Microsoft.Crm.SdkTypeProxy.dll — содержит типы необходимые для разработки плагинов и кастомных бизнес-процессов. Включает классы запросов/ответов и ряд методов, которые используются для того, чтобы проиллюстрировать типы CRM, может быть найден soft.Crm.SdkTypeProxy.CrmTypes.
    Эта сборка также включает тот же набор классов объекта, как, например, account class. Однако они используются только для внутренних нужд. Когда Вы работаете с экземплярами объектов, Вы должны использовать класс Microsoft.Crm.Sdk.DynamicEntity или добавить CrmService WSDL в Ваш код и использовать классы объектов оттуда.
  • Microsoft.Crm.Outlook.Sdk.dll — содержит методы и типы необходимые для разработки под Microsoft Dynamics CRM для Microsoft Office Outlook.
  • Microsoft.Crm.Tools.EmailProviders.dll — содержит методы и типы необходимый для разработки кастомных компонентов (E-mail Provider) для Microsoft Dynamics CRM E-mail Router.

32/64

И 32-разрядные и 64-битовые версии этих сборок могут быть найдены в папке SDK\Bin. Используйте ту, которая соответствует Вашей среде развертывания.

CrmServiceWsdl

Вы можете также создать Web reference используя http://crmserver/mscrmservices/2007/CrmServiceWsdl.aspx и обозвав его как связать базу данных с visual studio как-нить (например, CrmServiceRef) ссылаться на него в коде. Но при этом возникают некоторые проблемы, о которых я расскажу в другом посте.

  • Добавить требуемые пространства имен в код проекта: откройте файл.cs (в Solution Explorer) и добавьте в него такие строки: using Microsoft.Crm.Sdk; using Microsoft.Crm.SdkTypeProxy;

    Каждый плагин должен использовать интерфейс IPlugin, чтобы подписаться на события платформы, запущенные во время выполнения метода Execution. После объявления класса добавьте двоеточие и слово IPlugin. Например:

    ExamplePlugIn : IPlugin

    Метод Execute, берет контекст выполнения как параметр. Контекст плагина содержит информацию относительно сообщения запроса, передаваемого через конвейер выполнения события. Он также содержит информацию относительно любых параметров, которые передаются сообщению запроса, и снимкам объекта до и после основной операции. Добавить метод Execute, который вызывается при запуске плагина.
    Execute(IPluginExecutionContext context)

Для данного примера сделайте Ваш код таким (это на C#):

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Crm.Sdk; using Microsoft.Crm.SdkTypeProxy; namespace ExamplePlugIn { public class HelloWorldPlugin : IPlugin { public void Execute(IPluginExecutionContext context) { // Здесь вызываем Microsoft Dynamics CRM Web services или выполняем какую-либо другую полезную работу // Для данного примера просто выдаем окно с сообщением при возникновении какого-либо события, на которое мы зарегистрируем наш плагин позже throw new InvalidPluginExecutionException("Превед"); } } }

«Мульти-плагин»

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

IPluginExecutionContext

Действительная мощь плагинов находится в обширной контекстной информации, которая передается в плагин и в способности изменить часть этой информации (или с помощью этой информации и вызовов методов CRM Srvices выполныть множество другой полезной работы). Для доступа к контекстной информации используется IPluginExecutionContext.

IPluginExecutionContext – является параметром метода Execute и содержит контекстную информацию. Из этого объекта Вы можете запросить значения все свойств, связанные с объектом и контекстом события, в котором метод Execute выполнен.

Этот класс содержит следующие свойства:

BusinessUnitId — это свойство возвращает Global Unique Identifier (GUID) подразделения объекта.

CallerOrigin — возвращает того, кто вызвал метод плагина. Эта свойство – экземпляр класса CallerOrigin, у которого есть следующие свойства:

  • Application — означает, что событие создало веб-приложение;
  • AsyncService — означает, что событие создал асинхронный сервис;
  • WebServiceApi — означает, что событие создал Web Service;

Вы можете использовать это свойство чтобы, определить, откуда вызвано событие и запретить, например, создание или обновление записи через веб-интерфейс. Например, так:

if (context.CallerOrigin is ApplicationOrigin) { throw new Exception("You are not allowed to updated this record from this interface."); } else if (context.CallerOrigin is AsyncServiceOrigin) { // ok, do something } else if (context.CallerOrigin is WebServiceApiOrigin) { // ok, do something }

CorrelationId — возвращает GUID экземпляра события плагина. Каждый раз, когда происходит событие, создается новый GUID, который может быть прочитан из этого свойства.

Вы можете использовать эту свойство для отслеживания плагинов, особенно когда их у Вас больше чем один на одно и то же событие.

CorrelationUpdatedTime — возвращает дату и время возникновения события (имеет тип CrmDateTime).

Depth — возвращает глубину возникновения случая. Имеет тип integer и растет как только выполнение плагина идет «в глубь» – это может случиться, когда, например, плагин вызывает Web Service, чтобы обновить другое объект, которое также инициирует событие для выполнения другого плагина. Имеет ограничение в восемь вложенных вызовов (необходимо для предотвращения блокировок). Если это значение превысит цифру 8, то будет вызвано исключение.

InputParameters — возвращает параметры запроса, связанного с событием. Вы можете использовать это свойство, чтобы получить объект, для которого инициировано событие. Например, так:

DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties["Target"];

InvocationSource — используется, чтобы определить, был ли плагин вызван в родительском или дочернем конвейере. Эта свойство имеет тип integer, где:

  • 0 = Parent
  • 1 = Child

IsExecutingInOfflineMode — эта свойство используется только для Outlook клиента и определяет, находится ли он в офлайн или онлайн режиме (соответственно true = offline mode).

Чтобы проверить в каком режиме (online или offline) выполняется плагин, Вы можете также использовать следующие код:

CrmService myService = (CrmService)context.CreateCrmService(true); if ( service.Url.StartsWith("http://mmcrm.ru:2525") ) { // running in offline mode } else { // running in online mode }

MessageName — возвращает имя события, которое вызвало выполнение плагина (например, Update, Create, Delete и т.д.).

Mode — это свойство возвращает способ запуска плагина. Может быть синхронным или асинхронным:

  • 0 = synchronous
  • 1 = asynchronous

OrganizationId — возвращает GUID организации, в которой плагин запущен.

OrganizationName — аналогичен OrganizationId, но только возвращает не GUID, а название организации.

OutputParameters — это свойство – коллекция свойств, возвращенных событием. Основной выходной параметр – GUID, возвращаемый при создании объекта. Будьте осторожны, задействую эти параметры на Pre стадии, потому что они могут появляется только после отработки основной операции. Например accountid появляется на Post стадии события Create:

Guid myAccountID = (Guid)context.OutputParameters.Properties[ParameterName.Id];

ParentContext — это свойство получает доступ к экземпляру IPluginExecutionContext родительского плагина, когда Ваш плагин выполняется как дочерний. Эта свойство возвращает пустой объект, если плагин выполняете как родительский.

PostEntityImages — это свойство содержит коллекцию параметров доступных после того, как система выполняет основную операцию.

Примечание:
Вы должны определить, какие параметры хотите иметь в этой коллекции, при регистрации плагина (а точнее регистрации снимка).

PreEntityImages — это свойство содержит коллекцию параметров доступных до того, как система выполнит основную операцию. Это свойство очень полезно, например, на Post стадиях, для того, чтобы видеть, что было до и что после основной операции.

Примечание:
Как и с PostEntityImages, Вы должны определить, какие параметры хотите видеть в этой коллекцией с помощью снимка.

PrimaryEntityName — это свойство получает имя первичного объекта, которое Вы определили при регистрации плагина (например, Account, Contact и т.д.).

SecondaryEntityName — это свойство получает имя вторичного объекта, которое Вы определили (и если определили) при регистрации плагина. Если такой не был определен, то возвращается строка none.

SharedVariables — это свойство используется как общий «склад», чтобы хранить свойства, которые расширил плагин. Оно полезно, когда Вы должны передать какие-либо значения от одного плагина до другого, который выполняется в событии того же самого конвейера.

Stage — возвращает стадию, которая может быть либо Pre, либо Post (тип integer):

  • 10 = Pre
  • 50 = Post

Примечание:
Другие стадии (20, 30, и 40) зарезервированы для внутренних событий CRM и не могут использоваться.

UserId — возвращает GUID пользователя, который вызвал операцию.

Класс IPluginExecutionContext также содержит следующие методы:

CreateCrmServiceЭтот — метод инициирует CRM SDK Web Service. Вы также можете создать в Вашем плагине Web Reference, чтобы вызвать и использовать эту Веб-службу, но метод CreateCrmService оптимизирован для лучшей работы.

CreateMetadataService — этот метод инициирует CRM Metadata Web Service. Этот метод оптимизирован для работы лучше, нежели Web Reference.

  • Подпишите свой плагин сложным ключом (strong-key). Этот ключ необходим по соображениям безопасности, чтобы, например, сборка могла выполнить внешний код, такой как вызов веб-службы. Чтобы сделать это щелкните правой кнопкой мыши на названии проекта и выберите Properties, нажмите по вкладке Signing, выберите Sign the assembly и <New…> в ниспадающем списке. Введите какой-нибудь ключь (например, myplugin) и снимите флажок the Protect my key file with a password. OK.
  • Соберите сборку: Build — Build Solution. Скомпилированную сборку Вы сможете найти в папке bin\Debug или в папке bin\Release (в папке проекта) в зависимости от настроек проекта (уточнить который Вы сможете на странице Build, раздел Output в ствойствах проекта). Скопируйте.dll файл в папку <crmroot>\Server\bin\assembly Вашего Microsoft Dynamics CRM сервера.

Лень – двигатель прогресса 🙂

Если при регистрации плагинов Вы будете хранить свои сборки в папке assembly, то можете немного облегчить себе жизнь (особенно при разработке и отладки), автоматизировав процесс их обновления. Для этого необходимо привязать к процессу сборки плагина в VS пару команд, которые будут автоматически перезапускать IIS и копировать сборки в папку assembly. Для этого в свйоствах проекта на страницк Build Events повесьте такие команды:

  • Prebuild cscript C:\Inetpub\AdminScripts\adsutil.vbs stop_server W3svc/AppPools/CRMAppPool cscript C:\Inetpub\AdminScripts\adsutil.vbs start_server W3svc/AppPools/CRMAppPool
  • Postbuild xcopy "$(TargetPath)" "C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly" /y

Регистрация

Plug-in Registration Tool дает возможность Вам зарегистрировать плагин для специфического события в Microsoft Dynamics CRM. Когда это заданное событие произойдет, сработает Ваш плагин…

Безопасность

Есть ограничение безопасности, которое позволяет регистрировать плагины только пользователям с системной учетной записью, существующей в группе Deployment Administrators в Deployment Manager’е. У этой учетной записи также должны быть роли либо System Administrator или System Customizer в Microsoft Dynamics CRM.

Также учтите, что запускать инструмент нужно из того местоположении, где Вы сможете использовать аутентификацию Active Directory – иначе инструмент работать не будет.

Более короткий путь…

Можно встроить запуск Plug-in Registration Tool прямо в Visual Studio. Для этого перейдите Tools — External Tools, в диалоговом окне External Tools щелкните Add, введите имя, например, на CRM Plug-In Registration и укажите путь к PluginRegistration.exe в поле Command. После этого можете запускать его через Tools — CRM Plug-in Registration Tool.

  • Введите параметры подключения к CRM серверу.

По умолчанию

Если Вы не введете имя пользователя и пароль, то будут использоваться значения, введенные при входе в Windows.

  • Жмите Connect. Отобразится список доступных организаций: дважды щелкните на той, в которой хотите развернуть плагин. После этого Вы увидите в основном окне список всех сборок, шагов и плагинов, которые в данный момент зарегистрированы для выбранной организации.
  • Перейдите Register — Register New Assembly.
  • В окне Register New Plugin нажмите кнопку (…) и перейдите к местоположению Вашей сборки и выделите ее.
    Установите галки Select All (если хотите регистрировать не все классы – выделите нужные в дереве), а местом хранения плагина укажите Database и нажмите Register Selected Plugins.
    Отобразится Registration Log с информацией о процессе регистрации. Ок.

Места хранения плагинов.

Всего их три:

  • Database – файлы хранится в базе данных, позволяя пользователям обновлять файл сборки через Plug-in Registration Tool сколь угодно много раз и без необходимости выполнять «iisreset» (в случаи же хранения сборок на диске, система на даст Вам их заменить, пока Вы не перезагрузите IIS). Также в этом случае не нужно беспокоится о переносе сборок dll при переносе CRM сервера.
  • Disk – это опция позволяет Вам хранить файл сборки в папке <crmroot>\Server\bin\assembly. Преимущества: нет необходимости перерегистрировать плагин – для этого достаточно заменить dll-файл сборки в assembly. Но перед этим необходимо перезагрузить application pool (в некоторых случаях этого не достаточно и нужно перезапустить весь web-сервер: IISRESET). Если этого не сделать, то можете получить ошибку «file in use».
  • GAC – (Global Assembly Cache) является центральным репозиторием для управления общедоступными файлами сборок. Например с помощью GAC’а, Вы можете вынести в отдельную сборку классы подключения к БД и сделать их общедоступными для других сборок.

Теперь нужно зарегистрировать шаги. С помощью шагов мы можем задать такую информацию, как объект и событие (сообщение), которое заставит плагин выполняться, а так же стадию (pre-event или post-event).

  • Выделите Ваш плагин в «дереве» и перейдите Register — Register New Step (тоже самое можно сделать из контекстного меню).

Пункты меню доступные в Plug-in Registration Tool:

  • Register
    • Register New Assembly – регистрирует новую сборку, которая код плагина;
    • Register New Step – позволяет настроить событие, которое вызывает выполнение плагина. Например, чтобы запустить определенный код после/прежде, чем будет создана, обновлена какая-либо запись и т.д.;
    • Register New Image – позволяет зарегистрировать xml-«снимок» объекта (а точнее, значений определенных его атрибутов) До и После основного события. Он может использоваться, чтобы узнать какое-либо значение записи, до и/или после того, как запись создана, обновлена, и т.д. Например, если Вы зарегистрировали событие постобновление бизнес-партнера, и хотите проверить значение поля перед обновлением, для этого Вам нужно зарегистрировать снимок перед обновлением. Кроме того, на этом «снимках», Вы можете выбрать, какие атрибуты Вы хотите, отслеживать.Примечание!
      Вы не можете зарегистрировать снимок pre-create (т.е. для события Create), т.к. в этом случаи у записи пока не существует никаких атрибутов.
  • Import/Export
    • Export Solution Xml – позволяет пользователю экспортировать xml-файл, который содержит названия сборки, шаги и/или снимки, зарегистрированные ранее. Это позволяет настроить плагин один раз, а затем переместить на другой сервер;
    • Import Solution Xml – позволяет пользователю импортировать xml-файл, упомянутый выше.
  • View – отображение списка плагинов, шагов и снимков в различных разрезах.
  • Unregister, Refresh & Search – и так понятно 🙂
  • В диалоговом окне Register New Step, введите информацию о шаге. В данном примере параметры такие:
    • Message: Create
    • Primary Entity: account

    Остальные параметры оставьте по дефолту. Жмите Register New Step.

Параметры диалогового окна Register New Step:

  • Message – событие (обновление, создание, назначение и т.д.) при возникновении которого начинает работать плагин.
  • Primary Entity — объект, для которого отслеживается событие заданное в Message
  • Secondary Entity — должен быть определен только когда плагин вызывается для случая, требующего двух объектов, как например, событие «SetRelated».
  • Filtering Attributes — позволяет фильтровать атрибуты объекта, которые должны вызов работу плагина (если соответствующие событие указано в Message). Например, если Вы хотите, чтобы плагин срабатывал только при изменении названия бизнес-партнера, то Вы должны указать в Message – Update, а в Filtering Attributes — Name. По умолчанию выбраны все атрибуты.
  • Plugin – выберите сборку и класс, который вы хотите связать c этом шагом.
  • Run In Users Context — по умолчанию это установлено в calling user, что означает, что плагин будет запускаться от имени текущего пользователя. Вы можете определить других пользователей, чтобы выполнять плагины от их имени (таким образом, плагин может получить доступ к данным, к которым у текущего пользователя нет доступа). Список предварительно заполнен учетками всех пользователей CRM.
  • Execution order — иногда для завершения одной асинхронной операции требуется завершение другой. Порядок выполнения позволяет Вам определять, когда плагин предполагается запускать.
  • Event Sate — определяет, должен ли плагин быть запущен Перед или После выполнения самого события.
  • Pre-Stage выполняется синхронно и по этой причине в основном применяется для:
    • Изменения данные прежде, чем они будут записаны в базу данных;
    • Прервать событие;
    • Проверка введенных данных.
  • Post-Stage может быть как синхронной, так и асинхронной. Из за свойства асинхронности может выполнятся параллельно с работой пользователя, вызвавшего выполнение плагина. И при этом пользователю нет необходимости дожидаться его завершения.
  • Execution Mode – задает синхронное или асинхронное выполнение плагина. Асинхронно зарегистрированные плагины ставятся в очередь для последующего выполнения.
    Синхронный способ блокирует процесс в CRM до окончания выполнения плагина. Поэтому его использование не рекомендуется, если выполнение плагина может занять много времени.
    При асинхронном же способе пользователь может продолжить работать, в то время как плагин выполняется. По этой причине асинхронный способ не может быть использован в Pre стадии.
  • Step Deployment – дает возможность развернуть плагин на сервере и/или офлайн клиенте (т.е. для Outlook клиента в офлайн режиме).
  • Triggering Pipeline – допустим, у Вас есть бизнес-партнер с действиями и Вы переназначаете этого бизнес-партнера на другого пользователя. В результате все действия также переназначаются на него. Если дополнение к программе было регистрировано на объект Действия, то это событие не заставит плагин сработать, потому что переназначение Действий происходит как часть другой операции. Поэтому, чтобы заставить плагин сработать в этом случаи, Вы должны установить конвейер в «Child Pipeline».
  • Unsecure Configuration — если Вы хотите определить какие-либо переменные, которые будут менятся, напримр, в зависимости от среды развертования и при этом Вы не хотите их хардкодить, то можете их значения здесь. Например, это может быть URL сервера CRM.
  • Secure Configuration — то же самое что и Unsecure Configuration, но предназначено для безопасного хранения более конфиденциальной информации. Доступ к этой информации можно получить только под ролью сисадмина 🙂

Все! Плагин создан и зарегистрирован. Теперь можете вызвать событие в CRM (в данном примере это создание Бизнес-партнера), на которое его зарегистрировали и посмотреть на результат.

Отладка плагинов

Есть два способа отладить Ваш плагин. Первый присоединяет отладчик к процессу w3p.exe, а другой вызывает отладчик из плагина. Любой из этих методов рекомендуется использовать в тестовой среде, поскольку они оба требуют Visual Studio (альтернативой может быть использование удаленного debugger’а).

Прежде, чем попробовать любой из этих методов, Вы должны собрать свой плагин и поместить PDB (project data base) файл, созданный в результате компиляции, по следующему пути:

C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly

После копирования.pdb файла Вы должны будете перезапустить IIS (введя, например, в командной строке «iisreset»). И должны копировать этот файл и перезапускать IIS каждый раз, когда пересобираете плагин.

w3wp.exe

При этом способе необходимо присоедините Debugger к процессу w3wp.exe…

  • Сначала откройте свой плагин в Visual Studio и вставить контрольные точки там, где Вы хотите остановить работу кода и отладить его. Чтобы поместить контрольную точку, нажмите F9 (или Debug — Toggle Breakpoint).
  • Присоедините процесс w3wp.exe к debugger’у: Debug – Attach to Process. Появится диалоговое окно Attach to Process в котором выделите процесса w3wp.exe и нажмите кнопку Attach (возможно, Вам придется выбрать «Show Processes from all users» и «Show processes in all sessions», чтобы увидеть w3wp.exe).

Процессы

В различных ситуциях в окне Attach to Process нужно подключатся к различным процессам:

  • w3wp.exe — для онлайн плагинов;
  • Microsoft.Crm.Application.Hoster.exe — для офлайн плагинов;
  • CrmAsyncService.exe — для плагинов, зарегистрированных асинхронно или кастомных бизнес-процессов.

«Игра в прятки»

Если Вы не видите процесс w3wp.exe попробуйте открыть Вашу организацию в CRM. Таким образом, IIS загрузит application pool представленный w3wp.exe. Вы также можете увидеть несколько экземпляров этого процесса. Тогда выберите их все с помощью клавиши CTRL.

  • Соберите (не забудьте скопировать PDB-файл в папку assembly) и зарегистрируйте Ваш плагин в Plug-in Registration Tool на нужное Вам событие. А потом вызовите это событие в CRM. При этом Вы сразу же переключитесь к Visual Studio и остановитесь на первой контрольной точке. Чтобы перейти к следующей контрольной точке нажмите F11.
  • Когда Вы закончите отладку остановите debugger: Debug — Stop Debugging;

Удаленная отладка

Зачастую на продуктивном CRM сервере отсутствует Visual Studio, но бывает так, что ошибки воспроизводятся только на прдуктивном сервере. И чтобы в этом случаи выполнить отладку плагинов на удаленном сервере нужно подключить VS к процессам происходящем на нем:

  • На Вашей машине найдете папку C:/Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger, который содержит папку x86. Скопируйте ее на сервер MS CRM и запустите msvsmon.exe.
  • Затем в открывшейся программе щелкните Tools -> Permissions и выберите юзвера под которым будет осуществляться доступ.
  • Дальше делаем все то же самое, что описано Выше за одним исклчением — Вам нужно подключится к процессу w3wp.exe на удаленной машине. Для этого в Debug — Attach to Process должны быть такие параметры:
    • Transport: Default
    • Qualifier: <домен>\<имя пользователя запустившего msvsmon.exe на CRM сервере>@<имя CRM сервера>

Diagnostics.Debugger.Launch()

Способ заключается в том, чтобы вынудить CRM вызвать debugger. Тут все просто! Нужно всего лишь добавить следующую строку в код, где Вы хотите вызвать debugger:
System.Diagnostics.Debugger.Launch();
После того как Вы зарегистрируете плагин с таким кодом и произойдет событие, на которое Вы его зарегистрировали, появится диалоговое окно Visual Studio Just-In-Time Debugger. Нажмите Yes, чтобы открыть Microsoft Debugger, в котором выполнение кода остановится на выше указанной строке.

Учтите, что при этом способе, где бы Вы не вызвали debugger, окно с предложением открыть отладчик Visual Studio появится только на сервере, а не на машине клиента.

Дополнительные материалы

  • Если Вам не понятен синтаксис C#, можете прочитать вот эту маленькую книжку C# для школьников. Очень понятно и наглядно 🙂
  • CRM Developer Ramp-Up Kit – большой набор статей (презентаций и «лабораторных» работ) и инструментальных средств для.NET программирования под платформу MS CRM;
  • Microsoft Dynamics CRM Developer Toolkit – предоставляет разработчикам возможность создавать и управлять CRM решениями в интегрированной с Visual Studio среде. Позволяет просматривать, создавать и обновлять объекты в CRM. генерировать начальный код для плагинов, нтегрировать процесс сборки и развертывания и еще много чего… 🙂
  • CRM SDK начиная с версии 4.0.9 включает в себя шаблоны для Visual Studio для разработки следующих комонентов:
    • Plug-in
    • Workflow activity
    • CRM Add-on web page

    Каждый шаблон включает readme.doc файл с инструкциями по установки и использованию.

    Чтобы установить их, создайте в папке %Documents and Settings%\Visual Studio 2008\Templates\ProjectTemplates\Visual C# подпапку CRM и скопируйте в нее файлы template.zip от трех шаблонов (из папки visualstudiotemplates в которую был установлен SDK). После этого можете открывать их VS через создание нового проекта и дорабатывать 🙂

  • Microsoft Dynamics CRM Developer Center – портал, содержащий кучу полезной информации для CRM разработчиков.

C#, Plug-ins


Источник: http://mmcrm.ru/?p=977



Рекомендуем посмотреть ещё:


Закрыть ... [X]

К чему снятся Носки во сне по 90 сонникам! Если видишь во сне Носки Начало подросткового возраста связано с

Как связать базу данных с visual studio Как связать базу данных с visual studio Как связать базу данных с visual studio Как связать базу данных с visual studio Как связать базу данных с visual studio Как связать базу данных с visual studio Как связать базу данных с visual studio Как связать базу данных с visual studio