Перейти к содержанию

Бизнесс процессы

Хранение 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 параметром

  • $documentType
    • lists — имя модуля (b_bp_worflow_template.MODULE_ID)
    • \Bitrix\Lists\BizprocDocumentLists::class — существующий класс (b_bp_worflow_template.ENTITY). Не изучал его смысл
    • iblock_123 — в доке написано: "код типа документа" (b_bp_worflow_template.DOCUMENT_TYPE)
  • $documentId
    • lists — имя модуля
    • \Bitrix\Lists\BizprocDocumentLists::class
    • IBLOCK_ELEMENT_ID — обновляемая запись универсального списка

Прикрепление файла

Для обработки параметра шаблона типа Файл используется класс

\Bitrix\Bizproc\BaseType\File::class;
\Bitrix\Bizproc\BaseType\File::extractValue()

\Bitrix\Bizproc\BaseType\File::extractValue();
\Bitrix\Bizproc\BaseType\Base::extractValueSingle();
\Bitrix\Bizproc\FieldType::extractValue();
\CBPDocumentService::getFieldInputValue();
\CBPWorkflowTemplateLoader::checkWorkflowParameters();
\Bitrix\Bizproc\Api\Service\WorkflowService::prepareParameters();

Вывод в журнал логов

Для вывода информации в журнал логов можно использовать метод

protected \CBPActivity::writeToTrackingService();

Полезные классы и методы

  • \CCrmOwnerType::ResolveName() — метод для формирования первой части documentId.documentId: DEAL_123
  • \CBPDocumentEventType::class — список видов действий
  • \Bitrix\Bizproc\CCrmBizProcHelper::ResolveDocumentName() — метод получения entity по коду сущности для crm