Запуск бизнес-процессов из календаря
 
Запуск бизнес-процессов из календаря
16.05.2018 17:44:38
Модули
195
С событиями и встречами в календаре практически всегда бывают связаны какие-то дополнительные действия: перед командировкой надо заказать билеты, после нее - составить авансовый отчет, после встречи с клиентами необходимо написать протокол о достигнутых договоренностях и так далее. Было бы здорово иметь возможность запускать бизнес-процессы, эти действия автоматизирующие.
Для решения этой задачи мы создали модуль "Запуск БП при создании события календаря" (https://marketplace.1c-bitrix.ru/solutions/mcart.wffromcalender/). Модуль умеет запускать как обычные процессы на списках (в т.ч. процессы Живой ленты), так и standalone бизнес-процессы (те, что раньше были в разделе портала Сервисы/Бизнес-процессы).

После установки модуля на портал нужно указать его настройки:
  1. Для процессов на списках укажите id инфоблока списка и id шаблона бизнес-процесса, который нужно запустить.11cafc398e.jpg

  2. Для standalone бизнес-процесса укажите id бизнес-процесса (виден в адресной строке) в поле ID бизнес-процесса.
    eb954d390e.jpg

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

При запуске бизнес-процесса модуль передает ему параметры:
EVENT_ID - id события в календаре;
и AUTHOR_ID - id пользователя, создавшего событие.

Редактирование шаблона бизнес-процесса - Google Chrome.jpg

Применение модуля

Как мы используем этот модуль у себя на портале? По нашим регламентам после каждого колла и встречи с клиентом должен быть создан протокол события. Поэтому в бизнес-процессе, который запускается после создания события в календаре, мы проверяем, есть ли у события привязанные сущности CRM (это значит, что мы общались по клиентским вопросам или с клиентами, а не просто между собой). И если да, мы создаем задачу автору события с просьбой составить протокол. Все участники события ставятся наблюдателями в задачу. Ссылка на шаблон протокола также есть в задаче.

Единственное исключение, когда такая задача не ставится - это входящие звонки, которые идут на офис-менеджера. Привязка к CRM у них также имеется, но протоколы по ним составлять не нужно.

Ниже приложена схема нашего бизнес-процесса и код для получения информации о событии по его ID.
Редактирование шаблона бизнес-процесса - Google Chrome (1).jpg

Получение информации о событии по его ID

$ra = $this->GetRootActivity();

CModule::IncludeModule('calendar');
CModule::IncludeModule('iblock');

global $USER;
$spath = '{=Constant:spath_printable}'; //путь к порталу, для удобства вставки в уведомления

$eventid = '{=Template:EVENT_ID}'; //id события
$event = CCalendarEvent::GetById($eventid);

$maineventid = $event["PARENT_ID"]; //самое первое событие (если участников несколько, для каждого создается свое событие)
$mainevent = CCalendarEvent::GetById($maineventid);

$att = $event["~ATTENDEES"]; //id участников события
$att_arr = array();

foreach ($att as $attendee) {
    $att_arr[] = "user_".$attendee["USER_ID"];
}

$crm_arr = $mainevent["UF_CRM_CAL_EVENT"];
$crm_links = "";
$crmid_list = "";
$crmid = array();

if($mainevent["UF_CRM_CAL_EVENT"] =="") $crm_count = 0;
else $crm_count = count($crm_arr);

if ($crm_count >0){
    foreach($crm_arr as $link) {
        $crmid[] = $link;
        switch(substr($link,0,2)) {
            case "L_": $crm_links .= $spath."/crm/lead/details/".substr(stristr($link,"_"),1)."/\n"; break;
            case "D_": $crm_links .= $spath."/crm/deal/details/".substr(stristr($link,"_"),1)."/\n"; break;
            case "C_": $crm_links .= $spath."/crm/contact/details/".substr(stristr($link,"_"),1)."/\n";break;
            case "CO": $crm_links .= $spath."/crm/company/details/".substr(stristr($link,"_"),1)."/\n";break;
        }
    }
}

$crmid_list = implode(", ",$crmid);

$ra->SetVariable("crm_count", $crm_count); //кол-во привязок к CRM
$ra->SetVariable("event_name", $mainevent["NAME"]); //название события
$ra->SetVariable("event_author", "user_".$mainevent["CREATED_BY"]); //автор события
$ra->SetVariable("date_from", $mainevent["DATE_FROM"]); //дата начала события
$ra->SetVariable("crm_links", $crm_links); //привязки к CRM ссылками
$ra->SetVariable("crmid_list", $crmid_list); // привязки к CRM списком ID
$ra->SetVariable("viewer_list", $att_arr ); //список наблюдателей для задачи
Загрузка...