Devtoid

Бизнес-процессы Битрикс24

Работа с бизнес-процессами в коробке Битрикс24

Получение запущенных БП по документу

CBPStateService::GetDocumentStates(['lists', 'BizprocDocument', 14377]);
/*
Array
(
    [67652a8fb94129.83810567] => Array
        (
            [ID] => 67652a8fb94129.83810567
            [TEMPLATE_ID] => 347
            [TEMPLATE_NAME] => "Название шаблона БП"
            [TEMPLATE_DESCRIPTION] => 
            [STATE_MODIFIED] => 20.12.2024 12:01:41
            [STATE_NAME] => A58693_6039_16951_65868
            [STATE_TITLE] => "Название текущего статуса БП"
            [STATE_PARAMETERS] => Array()
            [WORKFLOW_STATUS] => 3
            [STATE_PERMISSIONS] => Array()
            [DOCUMENT_ID] => Array
                (
                    [0] => lists
                    [1] => BizprocDocument
                    [2] => 14377
                )

            [STARTED] => 2024-12-20 11:27:59
            [STARTED_BY] => 534
            [STARTED_FORMATTED] => 20.12.2024 11:27:59
        )
)
*/

 

Получение названия статуса БП по коду статуса

$statusId = 2; // CBPWorkflowStatus::Completed;
$status = CBPWorkflowStatus::Out($statusId);
// $status = 'Completed'

 

Получение задачи БП

$arFields = CBPTaskService::GetList([], [
    'DOCUMENT_ID' => $documentId, // по ID документа
    'WORKFLOW_ID' => $wfId, // по ID воркфлоу
    'STATUS' => CBPWorkflowStatus::Created // по статусу задачи бп - текущая задача
], false, false, ['*'])->fetch();
/*
Array
(
    [ID] => 40408
    [WORKFLOW_ID] => 67652a8fb94129.83810567
    [ACTIVITY] => RequestInformationActivityModifiedNew
    [ACTIVITY_NAME] => A77512_47465_34790_43971
    [MODIFIED] => 20.12.2024 12:01:41
    [CREATED_DATE] => 20.12.2024 12:01:41
    [OVERDUE_DATE] => 
    [NAME] => 'Название активити'
    [DESCRIPTION] => 'Описание активити'
    [PARAMETERS] => Array
        (
            [0] => 
            [DOCUMENT_ID] => Array
                (
                    [0] => lists
                    [1] => BizprocDocument
                    [2] => 14377
                )

            [DOCUMENT_URL] => /bizproc/processes/?livefeed=y&list_id=74&element_id=14377
            [DOCUMENT_TYPE] => Array
                (
                    [0] => lists
                    [1] => BizprocDocument
                    [2] => iblock_74
                )

            [FIELD_TYPES] => Array() // описание типов полей
            [REQUEST] => Array() // поля и текущие значения

            [TaskButtonMessage] => Сохранить
            [CommentLabelMessage] => Комментарий
            [ShowComment] => N
            [CommentRequired] => N
            [AccessControl] => Y
        )

    [IS_INLINE] => N
    [DELEGATION_TYPE] => 0
    [STATUS] => 0
    [DOCUMENT_NAME] => "Название документа"
    [USER_ID] => 534
    [USER_STATUS] => 0
    [WORKFLOW_TEMPLATE_ID] => 347
    [MODULE_ID] => lists
    [ENTITY] => BizprocDocument
    [DOCUMENT_ID] => 14377
    [WORKFLOW_TEMPLATE_NAME] => "Название шаблона БП"
    [WORKFLOW_TEMPLATE_TEMPLATE_ID] => 347
    [WORKFLOW_STATE] => "Текст текущего статуса вркфлоу"
    [WORKFLOW_STARTED] => 20.12.2024 11:27:59
    [WORKFLOW_STARTED_BY] => 534
)
*/

 

Обновление значения полей в задаче БП

foreach ($arFields['PARAMETERS']['REQUEST'] as $key => $arParam) {
    if ($arParam['Name'] == 'FIELD_CODE') {
        $arFields['PARAMETERS']['REQUEST'][$key]['Default'] = 'Новое значение';
        break;
    }
}
CBPTaskService::update($arFields['ID'], $arFields);

 

Получене/изменение значения переменной БП

$workflowId = $arFields['WORKFLOW_ID'];

$workflow = CBPRuntime::GetRuntime()->GetWorkflow($workflowId, true);
$rootActivity = $workflow->getActivityByName('Template');

// Текущее значение переменной
$variable = $rootActivity->GetVariable('FIELD_CODE');

// Новое значение переменной
$rootActivity->SetVariable('FIELD_CODE', 'Новое значение');

CBPWorkflowPersister::GetPersister()->SaveWorkflow($rootActivity, true);

 

Получение шаблонов БП по ID инфоблока (списка)

$iblockId = 13;
$arWorkflowTemplates = CBPDocument::GetWorkflowTemplatesForDocumentType(['lists', 'BizprocDocument', 'iblock_' . $iblockId]);

 

Запуск БП по шаблону, у которого стоит автозапуск при добавлении

$documentId = 123;
global $arErrors;
foreach ($arWorkflowTemplates as $arTemplate) {
    if ($arTemplate['AUTO_EXECUTE'] == 1) {
        $id = CBPDocument::StartWorkflow($arTemplate['ID'], ["lists", "BizprocDocument", $documentId], [], $arErrors);
    }
}