Разработка
08
Фев
8

Plug-in vs. Workflow

Требование Plug-in Workflow
Синхронные/асинхронные действия. И то и другое. Выполняются только асинхронно (и для этого на сервере должна работать асинхронная служба).
Выполнение до или после выполнения базовой операции. Немедленно (синхронно) выполняются до или после базовой работы.

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

Плагины также могут быть поставлены в очередь, чтобы асинхронно выполниться после базовой работы.
Всегда ставится в очередь и выполняется асинхронно после базовой операции.
Одна и та же логика должна выполняться для различных событий и возможно на различных объектах. Да. Да.
Потребность в повышении привилегий (олицетворение). Плагины выполняются под контекстом безопасности пула веб-приложения CRM (обычно это NETWORK SERVICE). Эта учетная запись обычно соответствует универсальному пользователю CRM – SYSTEM.

Однако, в пределах плагинов Вы можете использовать олицетворение, чтобы выполнять их под учетной записью пользователя, который выполняет запрос. Для этого Вам нужно передать True методу CreatCrmService. Если Вы должны всегда выполнять код под определенным пользователем, Вы должны передать методу CreatCrmService True и установить атрибут impersonatinguserid при регистрации плагина. Заметьте, что сменна олицетворения не работает офлайн. В этом случае всегда используются учетные данные залогиневшегося пользователя.
Бизнес-процесс запущенный автоматически работает под контекстом безопасности владельца Бизнес-процесса. Напротив, если Бизнес-процесс запущен вручную, будет использоваться контекст безопасности пользователя, который его запустил.
Логика должна запускаться на различные события. Плагины могут быть зарегистрированы на множество различных событий: Create, Update, Delete, Retrieve, Retrieve Multiple, Send, Set-state, Assign, Route, Merge и еще кучу других. Бизнес-процессы включают в себя ограниченный набор событий: Создание, Обновление, Удалите, Изменение состояния, Назначение.
Выполнение либо длительного, либо бесконечного процесса. Синхронные плагины в этом случаем не помогут. Они обязательно должны закончить выполнение, чтобы пользователь смог продолжить работу. Если обязательно нужны плагины, то рассмотрите возможность задействования асинхронных плагинов.

Бизнес-процессы могут быть поставлены в ожидание одного из двух событий: определенного времени, либо изменения значения какого-либо поля. По этой причине существуют не хитрые способы создания бесконечных бизнес-процессов.

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

Однако учтите, что дочерние Бизнес-процессы (как и любые другие Бизнес-процессы) всегда работают асинхронно, что означает, что Вы не сможете получить результаты их работы в основном Бизнес-процессе, чтобы принять на их основе какое-либо решение.
Воздействие на производительность. Синхронные плагины могут увеличить время отклика платформы, поскольку они являются частью основной обработки платформы и требуют ожидания своего завершения. Т.о. плохо разработанный плагин может подвесить платформу. Из-за асинхронности у Бизнес-процессов меньше негативное воздействие на время отклика платформы.
Ограничения безопасности. Для регистрации плагина в системе требует роль Системного администратора или роль Настройщика, а также роль Администратора развертывания. В отличие от плагинов пользователи могут в интерактивном режиме создавать Бизнес-процессы через пользовательский интерфейс. Но для этого у пользователей должны быть те же самые роли безопасности, что и для регистрации плагинов.
Короткое или длинное время вычисления. Плагин, зарегистрированный на синхронное выполнение, лучше всего использовать для коротких задач. В то время как асинхронный плагин более подходит для задач требующих интенсивных вычислений. Однако асинхронные плагины могут выполниться только после завершения базовой операции. Подходят как для коротких так и длинных задач обработки.
Онлайновое или офлайновое выполнение. Поддерживается как онлайн так и офлайн. Бизнес-процессы не выполняются в офлайновом режиме работы Outlook-клиента.
Комментарии (8)
  • Евгений 08.02.2011

    Несогласен относительно плагинов в пунктах «Выполнение либо длительного, либо бесконечного процесса» и «Короткое или длинное время вычисления». Да, в синхронном режиме плагин должен как-можно быстрее отрабатывать, чтобы не подвешивать систему, но в асинхронном режиме, как и в бизнес-процессах, можно спокойно делать длительные процессы.

  • slivka_83 08.02.2011

    А там чего написано? 🙂
    > В то время как асинхронный плагин более подходит для задач требующих интенсивных вычислений.

  • Евгений 08.02.2011

    ОК. Уточню 🙂
    В пункте «Выполнение либо длительного, либо бесконечного процесса» указано, что плагины тут не помогут. Именно этого касалось моё замечание.
    В пункте «Короткое или длинное время вычисления» указано, что асинхронный плагин более подходит для задач требующих интенсивных вычислений. По сути одно опровергает другое.

  • slivka_83 08.02.2011

    Спасибо 🙂 Подправил 🙂

  • Александр 08.02.2011

    однако в хелпе не рекомендуют использовать плагины для длительных задач

    Regardless of whether a plug-in executes synchronously or asynchronously, there is a 2 minute time limit imposed on the execution of a (message) request. If the execution of your plug-in logic exceeds the time limit, a System.TimeoutException is thrown. If a plug-in needs more processing time than the 2 minute time limit, consider using a workflow or other background process to accomplish the intended task.

  • Endymion 08.02.2011

    Здравствуйте, а вы бы не могли подсказать. Как сделать workflow step при добавлении которого не будет отображаться кнопка «Set properties».
    И как сделать workflow в котором вместо «Set properties» можно сделать listbox с параметрами как у стандартного степа Change status. Google и MSDN не очень помогли(((

  • slivka_83 08.02.2011

    Добрый день.
    По первому вопросу не уверен — может быть если не задавать входные параметры, то Set properties не будет.
    Во второму, такого нельзя.
    Да и в целом не вижу проблему — настройку БП видят разработчики и админы, так что красота тут ни к чему.

  • Endymion 08.02.2011

    Спасибо за ответ.

*

code