Пример использования REST в процессах
Стандартное действие Задача не позволяет нам работать с чек-листами. Однако, используя rest-методы работы с задачами, это сделать можно. К тому же в данном примере работа будет вестись не через задания бизнес-процессов, а саму задачу, что так же нельзя реализовать, используя штатное действие.
Использование rest-методов
С помощью метода task.item.add задача будет создаваться. Чек-лист для задачи будет создан методом task.checklistitem.add. Этот чек-лист юристу и нужно будет выполнить.
if (!empty($_REQUEST['workflow_id']))
{
if (empty($_REQUEST['auth']))
die;
$taskId = (int) callB24Method($_REQUEST['auth'], 'task.item.add', array(
'TASKDATA' => array(
'TITLE' => $_REQUEST['properties']['taskName'],
'DESCRIPTION' => $_REQUEST['properties']['taskDescription'],
'CREATED_BY' => str_replace('user_', '', $_REQUEST['properties']['taskCreator']),
'RESPONSIBLE_ID' => str_replace('user_', '', $_REQUEST['properties']['taskUser'])
)
));
$ar = array();
foreach ($_REQUEST['properties']['checkList'] as $i => $checklist)
{
$ar[] = 'task.checklistitem.add?'.http_build_query(array(
'TASKID' => $taskId,
'FIELDS' => array(
'TITLE' => $checklist,
'IS_COMPLETE' => 'N',
'SORT_INDEX' => 10*($i+1)
)
));
}
callB24Method($_REQUEST['auth'], 'batch', array('cmd' => $ar));
$PDO->exec('INSERT INTO bp_events (WORKFLOW_ID, TASK_ID, EVENT_DATA) VALUES('
.$PDO->quote($_REQUEST['workflow_id']).','.$taskId.' ,'.$PDO->quote(serialize($_REQUEST)).')');
die;
}
Очень важно также зафиксировать, каким именно процессом будет создаваться задача. Выполнение задачи будет зависеть от вызова события OnTaskUpdate, и нам нужно чтобы необходимый процесс реагировал на изменения именно той задачи, что была им создана. Для этого необходимо зарегистрировать обработчик события.
BX24.callBind('OnTaskUpdate', '<?=ВР_APP_HANDLER?>');
Задание будет выполнено, только если задача будет закрыта, поэтому другие изменения задачи будут игнорироваться. Как только задача будет закрыта, действие будет анализировать чек-лист. Если все пункты чек-листа выполнены, то принимается решение об одобрении контрагента. Если хотя бы один пункт не закрыт, то контрагент одобрен не будет.
if (!empty($_REQUEST['data']['FIELDS_BEFORE']['ID']))
{
if (empty($_REQUEST['auth']))
die;
$taskId = (int) $_REQUEST['data']['FIELDS_BEFORE']['ID'];
$workflowData = $PDO->query('SELECT * FROM bp_events WHERE TASK_ID = '.$taskId.' LIMIT 1')->fetch(PDO::FETCH_ASSOC);
if (!$workflowData)
die;
$taskData = callB24Method($_REQUEST['auth'], 'task.item.getdata', array(
'TASKID' => $taskId
));
if ($taskData['REAL_STATUS'] != 5)
die;
$checklistData = callB24Method($_REQUEST['auth'], 'task.checklistitem.getlist', array(
'TASKID' => $taskId
));
$checkStatus = 'Y';
foreach ($checklistData as $item)
{
if ($item['IS_COMPLETE'] == 'N')
{
$checkStatus = 'N';
break;
}
}
$workflowEvent = unserialize($workflowData['EVENT_DATA']);
callB24Method($_REQUEST['auth'], 'bizproc.event.send', array(
"EVENT_TOKEN" => $workflowEvent["event_token"],
"RETURN_VALUES" => array(
'checkStatus' => $checkStatus
),
'LOG_MESSAGE' => 'Проверка завершена. Результат: '.($checkStatus=='Y'? 'одобрено' : 'отклонено')
));
$PDO->query('DELETE FROM bp_events WHERE ID = '.$workflowData['ID']);
die;
}
Установка и применение
Во время установки приложения обязательно установите разрешение приложению на работу с задачами, иначе оно работать не будет.

После установки действие отобразится в дизайнере бизнес-процессов в разделе Действия приложений и его можно будет размещать в шаблонах.

В настройках действия отобразятся созданные нами поля.

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

Когда юрист завершит выполнение задачи, в логе бизнес-процесса будет отображено решение относительно одобрения контрагента.

Полностью ознакомиться с действием можно здесь.
и Ваше мнение важно для нас