Бизнесс процессы
Хранение php кода в Activity
Шаблоны хранятся в таблице b_bp_workflow_template. Но код хранится в колонке TEMPLATE в виде бинарных данных, просто так не добраться.
Стоит использовать модель \Bitrix\Bizproc\Workflow\Template\Entity\WorkflowTemplateTable::class, в ней расписаны сериализаторы/десериализаторы для данных.
\Bitrix\Main\Loader::includeModule('bizproc');
$templates = \Bitrix\Bizproc\Workflow\Template\Entity\WorkflowTemplateTable::query()
->setSelect([
'NAME', 'TEMPLATE'
])
->where('DOCUMENT_TYPE', 'QUOTE')
->fetchAll()
;
Запуск бизнесс процесса из кода
CBPDocument::StartWorkflow- метод позволяет запустить Бизнесс процесс по его ID шаблонаCBPDocument::autoStartWorkflows- метод позволяет запустить бизнесс процессы, настроеннные на автозапуск. Например, запустить бизнесс процессы, помеченные на автозапуск при создании сделки
CBPDocument::StartWorkflow
CBPDocument::StartWorkflow(
int $workflowTemplateId,
array $documentId,
array $parameters,
array $errors
);
Параметры
$workflowTemplateId— ID шаблона бизнес-процесса.$documentId— массив, описывающий документ, для которого запускается бизнес-процесс:moduleId— код модуля, связанного с документом. Примеры:crm,iblock,lists.entity— имя класса-документа, реализующего методы для работы с сущностью.documentId— ID конкретного элемента (сделки, компании, элемента инфоблока и т. д.), для которого запускается бизнес-процесс. Для сделок передаётся в видеDEAL_{ID}. Например,DEAL_123
$parameters— массив параметров, передаваемых в бизнес-процесс. При запуске он автоматически дополняется служебными полями (см.\CBPDocument::prepareWorkflowParameters()). Некоторые служебные параметры:\CBPDocument::PARAM_TARGET_USER(TargetUser) — пользователь, от имени которого запускается процесс. Формат:user_{ID}, напримерuser_4.\CBPDocument::PARAM_DOCUMENT_EVENT_TYPE(DocumentEventType) — тип события, вызвавшего запуск. Все возможные значения описаны в\CBPDocumentEventType::class. Примеры:\CBPDocumentEventType::None(0) — не указано\CBPDocumentEventType::Create(1) — создание элемента\CBPDocumentEventType::Edit(2) — изменение элемента
$errors— массив, передаваемый по ссылке. В него записываются ошибки, возникшие при запуске бизнес-процесса.
entity
Имя класса-документа, реализующего методы для работы с сущностью.
Чтобы понять, как используются такие классы, можно поискать $entity в коде класса \CBPDocument::class.
Entity-классы для модуля crm описаны в методе \Bitrix\Bizproc\CCrmBizProcHelper::ResolveDocumentName()
Также можно посмотреть таблицу b_bp_workflow_template.ENTITY для примеров значений.
Примеры классов:
\Bitrix\Lists\BizprocDocumentLists::class— для универсальных списков\CIBlockDocument::class— для инфоблоков\CCrmDocumentDeal::class— для сделок CRM
Пример: запуск для сделки
$errors = [];
CBPDocument::StartWorkflow(
567, // ID шаблона бизнесс процесса
['crm', \CCrmDocumentDeal::class, 'DEAL_123'], // 123 - ID конкретной сделки
[
CBPDocument::PARAM_TAGRET_USER => 'user_257', // кто запустил
CBPDocument::PARAM_DOCUMENT_EVENT_TYPE => CBPDocumentEventType::Manual
],
$errors // $errors необходимо передавать по ссылке
);
Запуск для сделки
$documentId = ['crm', 'CCrmDocumentDeal', 'DEAL_33607'];
$parameters = [
CBPDocument::PARAM_TAGRET_USER => 'user_257', // кто запустил
CBPDocument::PARAM_DOCUMENT_EVENT_TYPE => CBPDocumentEventType::Manual,
];
Вариант через CCrmBizProcHelper
$arErrors = [];
\CCrmBizProcHelper::AutoStartWorkflows(
\CCrmOwnerType::Deal,
$dealId,
\CCrmBizProcEventType::Create,
$arErrors
);
Для универсальных списков
$documentType = ['lists', \Bitrix\Lists\BizprocDocumentLists::class, 'iblock_' . IBLOCK_ID];
$documentId = ['lists', \Bitrix\Lists\BizprocDocumentLists::class, $contractId];
$parameters = [];
$errors = [];
\CBPDocument::autoStartWorkflows(
$documentType,
\CBPDocumentEventType::Edit,
$documentId,
$parameters,
$errors
);
$documentType и $documentId отличаются только 3 параметром
$documentTypelists— имя модуля (b_bp_worflow_template.MODULE_ID)\Bitrix\Lists\BizprocDocumentLists::class— существующий класс (b_bp_worflow_template.ENTITY). Не изучал его смыслiblock_123— в доке написано: "код типа документа" (b_bp_worflow_template.DOCUMENT_TYPE)
$documentIdlists— имя модуля\Bitrix\Lists\BizprocDocumentLists::classIBLOCK_ELEMENT_ID— обновляемая запись универсального списка
Прикрепление файла
Для обработки параметра шаблона типа Файл используется класс
\Bitrix\Bizproc\BaseType\File::extractValue();
\Bitrix\Bizproc\BaseType\Base::extractValueSingle();
\Bitrix\Bizproc\FieldType::extractValue();
\CBPDocumentService::getFieldInputValue();
\CBPWorkflowTemplateLoader::checkWorkflowParameters();
\Bitrix\Bizproc\Api\Service\WorkflowService::prepareParameters();
Вывод в журнал логов
Для вывода информации в журнал логов можно использовать метод
Полезные классы и методы
\CCrmOwnerType::ResolveName()— метод для формирования первой частиdocumentId.documentId:DEAL_123\CBPDocumentEventType::class— список видов действий\Bitrix\Bizproc\CCrmBizProcHelper::ResolveDocumentName()— метод полученияentityпо коду сущности для crm