Пример разработки кастомного бизнес-процесса
Разработка кастомных бизнес-процессов дает возможность нам объединить требования к системе с возможностями бизнес-процессов 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 – Счетчик.