Бизнес-процессы очень популярны в Битрикс24. В СРМ используются роботы - заготовки бизнес-процессов, в живой ленте можно установить шаблоны стандартных бизнес-процессов - Утверждение счета, Отпуск и т.д.
А также бизнес-процессы можно создавать для списков, одного из типов инфоблоков, и сами бизнес-процессы это по сути тип инфоблока. Параметры бизнес-процесса - по сути свойства элементов инфоблока, но есть еще шаблон бизнес-процесса. И когда бизнес-процесс запущен, то существует так называемая среда выполнения данного шаблона бизнес-процесса над данным документом - элементом инфоблока. Рассмотрим АПИ Битрикс24 для получения этих данных на D7.
Собственно в документации ничего не найдем и пойдем смотреть исходники в папке /bitrix/modules/bizproc/lib.
Там мы видим три класса WorkflowInstanceTable, WorkflowTemplateTable, WorkflowStateTable.
Допустим у нас известен ID запущенного бизнес-процесса, как пример рассмотрим событие завершения бизнес-процесса OnWorkflowComplete.
$handler = Bitrix\Main\EventManager::getInstance()->addEventHandler( "bizproc", "OnWorkflowComplete", ["наш класс", "OnWorkflowCompleteHandler"] );
В функцию обработчик мы получаем ID запущенного экземпляра бизнес-процесса $workflowId и $status.
И можем получить ID документа и ID шаблона
Bitrix\Main\Loader::includeModule('bizproc');В полученном массиве будут такие поля:
$arBp=Bitrix\Bizproc\WorkflowInstanceTable::getList([
"filter"=>["ID"=>$workflowId],
"select"=>["ID","STATE"]])
->fetchAll();
'BIZPROC_WORKFLOW_ENTITY_WORKFLOW_INSTANCE_STATE_MODULE_ID' => 'lists',
'BIZPROC_WORKFLOW_ENTITY_WORKFLOW_INSTANCE_STATE_ENTITY' => 'BizprocDocument',
'BIZPROC_WORKFLOW_ENTITY_WORKFLOW_INSTANCE_STATE_DOCUMENT_ID' => '123',
'BIZPROC_WORKFLOW_ENTITY_WORKFLOW_INSTANCE_STATE_DOCUMENT_ID_INT' => '123',
'BIZPROC_WORKFLOW_ENTITY_WORKFLOW_INSTANCE_STATE_WORKFLOW_TEMPLATE_ID' => '1',
А как получить ID списка - инфоблока по этим данным? По шаблону получаем тип документа - это и будет наш инфоблок.
$arCurrentTemplate=Bitrix\Bizproc\WorkflowTemplateTable::getList([
"filter"=>["ID"=>$arBp[0]['BIZPROC_WORKFLOW_ENTITY_WORKFLOW_INSTANCE_STATE_WORKFLOW_TEMPLATE_ID']],
"select"=>["ID","DOCUMENT_TYPE"]])В полученном массиве будет поле 'DOCUMENT_TYPE' => 'iblock_3'
->fetchAll();
$arErrorsTmp = array();
$wfId = \CBPDocument::StartWorkflow(
$arTemplate["ID"],
array("bizproc", "CBPVirtualDocument", $arBp[0]['BIZPROC_WORKFLOW_ENTITY_WORKFLOW_INSTANCE_STATE_DOCUMENT_ID']),
array(),
$arErrorsTmp
);
$runtime = CBPRuntime::GetRuntime(); $runtime->StartRuntime(); $wf=new CBPWorkflow($workflowId, $runtime); $logService = $wf->GetService("TrackingService"); $logService-> Write($workflowId, 5, "-", 1, 0, "тест", "тест",$GLOBALS["USER"]->GetId());