Размер
Пример разработки кастомного бизнес-процесса
Play

Пример разработки кастомного бизнес-процесса

Разработка кастомных бизнес-процессов дает возможность нам объединить требования к системе с возможностями бизнес-процессов Microsoft CRM 4.0. Основными этими возможностями являются: настраиваемость через визуальный пользовательский интерфейс, многократность использования и т.д. Что делает реализацию той или иной задачи через бизнес-процессы весьма привлекательной.

Для примера разработки кастомного бизнес-процеса, рассмотрим такую часто встречающуюся заезжанную 🙂 задачу, как автонумирация записей. Как это будет выглядеть: поскольку каждая запись CRM уже сопровождается уникальным идентификатором, то велосипед изобретать не нужно – достаточно получить этот идентификатор (GUID). А чтобы как-то «отделить» его от GUID’а, добавим ему префикс «БП-» (сокращение от Бизнес-партнер — именно для него будем разрабатывать бизнес-процесс). Т.е. в конечном итоге наш номер будет иметь такой вид: «БП-» + GUID.

Настройка CRM

Прежде всего необходимо внести изменения в CRM – создайте в объекте Бизнес-партнер новой поле для хранения нашего номера:

  • Имя: autonumber;
  • Тип: текстовое.

Вынесите его на форму и сделайте доступным только для чтения.

Разработка бизнес-процесса

Для разработки кастомных бизнес-процессов используются следующие компоненты и инструменты:

  • Microsoft Visual Studio 2005/2008 (для 2005 Вам возможно понадобятся установить Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation));
  • Windows Workflow Foundation; (скачайте и установите его);
  • Plugin Registration Tool.
  • Откройте Visual Studio (я буду показывать на 2008) и перейдите File — New — New Project. Выберите новый C#-проект с типом Workflow и шаблоном Workflow Activity Library;
  • Откроется визуальный редактор Workflow – он нам не нужен – закройте его. Щелкните правой кнопкой мыши по файлу *.cs в Solution Explorer и выберите Code — таким образом Вы переключитесь на представление сгенерированного кода. Из этого кода видно, что сгенерированный класс работает в контексте SequenceActivity, которая в свою очередь основана на библиотеке Windows Workflow Foundation. Поэтому опеределение кастомного бизнес-процесса должно находится внутри этого класса. Чтобы шаг кастомного бизнес-процесса был доступен через пользовательский Microsoft CRM 4.0, Вы должны объявить класс с атрибутом CrmWorkflowActivity и передать в качестве его параметров Имя шага и Имя группы, в которую он входит. Затем необходимо переопределить метод Execute, который вызывается во время выполнения бизнес-процесса, и выполнить какие-либо необходимые Вам действия. При этом метроду Execute передается ActivityExecutionContext, чтобы получить доступ к контексту бизнес-процесса, который содержит информацию о данном (выполняемом) экземпляре бизнес-процесса. Из контекста Вы можете получить информацию о primary entity (название, id, pre- и post-снимки) задействованного в бизнес-процесса, метод CreateCrmService, который возвращает ссылку на CrmService и т.д. В основном, это все, что Вы должны сделать, чтобы внедрить кастомный бизнес-процесс в Microsoft CRM 4.0;
  • Добавьте ссылки на Microsoft.Crm.Sdk.dll и Microsoft.Crm.SdkTypeProxy.dll (найти их Вы сможете в папке \Bin, с установиленным Microsoft Dynamics CRM 4.0 SDK);
  • Замените существующий код на такой:

В этом коде происходит следующее:

  • Сначала задается имя нового кастомного шага и имя группы (шагов) в которую он будет входить;
  • Следующим этапом мы создаем новое поле, которое будет отображаться в настройках шага в CRM. Задаем тип этого поля – lookup. Определяем что в этот лукап можно подставить только Бизнес-партнера;
  • Получаем контекст выполнения бизнес-процесс, из которого создаем экземпляр класса CrmService;
  • Из лукапа бизнес-партнера заданного в кастомном шаге (и который подставится во время выполнения бизнес-процесс) вытаскиваем GUID (а т.к. мы подставим в этот лукап текущую запись, то это GUID текущей записи; этот же GUID можно вытащить через контекст бизнес-процесса, но об этом как-нибудь в другой раз 🙂 );
  • Формируем конечный вид номера: «БП-» + GUID;
  • Вытаскиваем из CRM текущую запись Бизнес-партнера (также по GUID’у) и обновляем в ней поле new_autonumber.

При написании кода кастомного бизнес-процесса не используйте одно и то же имя для класса и для пространства имен – это может вызвать проблемы при публикации такого workflow в CRM.

  • Т.к. сборку бизнес-процесса необходимо будет зарегистрировать в CRM, то необходимо ее подписать цифровым ключом: щелкните правой кнопкой мыши по названию проекта в Solution Explorer — Properties — Signing — поставьте галку Sign the assembly — выберите в ниспадающем списке <New…> и введите какое-нибудь название для ключа;
  • Соберите сборку и опубликуйте ее в CRM с помощью Plugin Registration Tool. При этом не нужно создавать никаких шагов – просто зарегистрируйте новую Assembly.

На этом собственно все – шаг кастомного бизнес-процесса теперь доуступен через пользовательский интерфейс CRM, поэтому можно тестировать…

Тестирование

  • Создайте новый бизнес-процесс в CRM для объекта Бизнес-партнер;
  • В качестве есдинственного шага выберите, только что созданный наши шаг бизнес-процесса;
  • В его настройках укажите подставлять в лукап динамическое значение: запись текущего Бизнес-партнера;
  • Опубликуйте бизнес-процесс и вызовите событие на которое Вы его зарегистрировали (я «ручками» запусти). Перйдите на закладку бизнес-процессов на форме Бизнес-партнеров и дождитесь пока экземпляр бизнес-процесса отработает. Затем обновите (F5) запись Бизнес-партнера и увидите что кастомное поле autonumber заполнено уникальным номером 🙂

Отладка кастомных бизнес-процессов

… мало чем отдичается от отладки плагинов: чтобы отладить кастомный бизнес-процесс, Вы должны скопировать файл *.pdb из папки \bin\Debug Вашего C#-проекта в папку <папка установки CRM>\Server\bin\assembly на Вашем CRM сервере, установить контрольные точки в методе Execute и подключить к проекту Asynchronous service (CrmAsyncService.exe).

Если у Вас не получается обновить файл в папке assembly, потому что уже есть другая копия файла, перезапуститеть пул сайта CRM в IIS (или перезагрузите сам IIS: iisreset) или и/или перезапускают MS Dynamics CRM Asynchronous service.

Обновление сборок

После окончания разработки кастомного бизнес-процесс, Вы должны регистрировать его с помощью Plugin Registration Tool. Но тут есть маленькая загвоздка: когда Вы пересобираете (измененную) сборку Вашего бизнес-процесса и с помощью Plugin Registration Tool обновляете ее в CRM – внесенные изменения не появляются сразу же в CRM. Это потому что, старый код закэшировался. Чтобы обновить его достаточно перезапустить пул приложений MS CRM в IIS’е (ну, или на крайняк рестартнуть сам IIS) и/или перезапускают MS Dynamics CRM Asynchronous service.

Кастомные входящие/исходящие поля для бизнес-процессов

Описание того, как добавить входящие и исходящие поля в Ваш кастомный бизнес-процесс Вы можете найти в статье на MSDN: http://msdn.microsoft.com/en-us/library/cc151132.aspx

Свойства контекста плагинов и бизнес-процессов

П.С. существует более функционально развитый плагин реализующий автонумерацию в CRM – Счетчик.

📎📎📎📎📎📎📎📎📎📎