Разработка
20
Июл
2

Создание кастомных Бизнес-процессов в CRM 2011

Рассмотрим небольшой пример создания в CRM 2011 кастомного Бизнес-процесса, который будет создавать Задачу после создания записи Организации. Это простой пример – Вы можете и стандартными шагами Бизнес-процесса реализовать подобное.

  1. Откройте Visual Studio 2010 и создайте новый проект Activity Library. Задайте для проекта .NET Framework 4;
  2. Проверьте что в настройках указан .NET Framework 4, а не .NET Framework Client Profile;
  3. Удалите автоматически созданный класс Activity1.xaml. Затем щелкните по проекту правой кнопкой мыши — Add — New Item и добавьте в проект .cs class;
  4. Добавьте ссылки на следующие сборки:
    • microsoft.xrm.sdk.dll
    • microsoft.xrm.sdk.workflow.dll
    • System.Runtime.Serialization
  5. Добавьте в начало кода определения using:
    using System.Activities;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Workflow;
    
  6. Сделайте добавленный класс наследуемым от CodeActivity (System.Activities), сделайте его публичным, а внутрь его поместите переопределение метода Execute (который собственно и выполняется при запуске Бизнес-процесса):
    public class CreateTaskClass : CodeActivity
    {
        protected override void Execute(CodeActivityContext context)
        {
    
        }
    }
    
  7. Перед объявлением класса поместите объявление входящих параметров для Бизнес-процесса (это название Темы для создаваемой Задачи и ее дефолтное значение):
    #region Input Properties
    [Input("Task Subject")]
    [Default("Empty Subject")]
    public InArgument<string>TaskSubject{ get; set; }
    #endregion
    
  8. Дальше добавьте основную бизнес-логику внутрь метода Execute:
    // Получаем контект Бизнес-процесса и IOrganizationService
    IWorkflowContext workflowContext = context.GetExtension<IWorkflowContext>();
    IOrganizationServiceFactory serviceFactory = context.GetExtension<IOrganizationServiceFactory>();
    IOrganizationService service = serviceFactory.CreateOrganizationService(workflowContext.UserId);
    
    // Определяем объект Задача
    Entity newTask = new Entity("task");
    // Тему берем из входящих парааметров
    newTask["subject"] = TaskSubject.Get<string>(context);
    // В поле В отношении помещаем запись Организации (в отношении которой работае Бизнес-процесс), ссылку на которую получаем из контекста
    newTask["regardingobjectid"] = new EntityReference("account", workflowContext.PrimaryEntityId);
    
    // Создаем Задачу в CRM
    Guid taskId = service.Create(newTask);
    

    Здесь мы:

    • Получаем контекст Бизнес-процесса и создаем инстанс сервиса организации;
    • Далее определяем объект Задача, для которой Тему получаем из входящих параметров, а значение для поля В отношении берем из контекста Бизнес-процесса (т.е. запись Организации в отношении которой сработал Бизнес-процесс);
    • Создаем запись Задачи в CRM.
  9. Щелкните правой кнопкой — Properties — Signing — Sign the assembly — New — введите названия файла (без пароля);
  10. Скомпилируйте проект и зарегистрируйте сборку в CRM с помощью PluginRegistrationTool;
  11. В PluginRegistrationTool в свойствах Workflow Activity задайте Name (имя шага) и WorkflowActivityGroupName (имя группы).





Тестируем:

  1. Создайте Бизнес-процесс для Организации на событие создания;
  2. Добавьте в Бизнес-процесс наш кастомный шаг и задайте в его свойствах Тему создаваемой Задачи;
  3. Сохраните и активируйте Бизнес-процесс;
  4. Для проверки создайте новую запись Организации. Через некоторое время в связанных Действиях создастся новая Задача.



Комментарии (2)
  • Алексей 20.07.2012

    Создал сборку и зарегистрировал. После пришлось добавить входные выходные параметры, но почему то они при повторной регистрации, или после обновления сборки не появляются в параметрах. Создается впечатление, что сборка закешировалась в БД и при повторной регистрации не обновляется. Что делать?

  • slivka_83 20.07.2012

    Попробуйте перезапустить асинхронный сервис и IIS.

*

code