← К документации

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

PHP-код в бизнес-процессах

Контекст действия, доступ к переменным и причины ошибок при повторном выполнении.

PHP-примеры относятся к коробочному Bitrix24. Код для действия «PHP-код» вставляется без открывающего тега PHP; ядро и контекст действия уже доступны.

Код выполняется внутри действия

$this — экземпляр действия бизнес-процесса. Для чтения переменной используется её технический идентификатор, а не подпись в дизайнере. Создайте в шаблоне строковые переменные source_text и result_text.

$root_activity = $this->GetRootActivity();
$source_text = (string) $root_activity->GetVariable('source_text');
$root_activity->SetVariable('result_text', trim($source_text));

Почему возникает Cannot redeclare

Именованная функция, объявленная в PHP-блоке, попадает в общую таблицу функций PHP. Второй проход цикла или другой экземпляр БП в том же запросе может объявить её ещё раз и остановить выполнение. Небольшую локальную обработку удобнее оформить замыканием.

$normalize_text = static function (string $value): string {
    return trim($value);
};

$root_activity = $this->GetRootActivity();
$root_activity->SetVariable(
    'result_text',
    $normalize_text((string) $root_activity->GetVariable('source_text'))
);

Общую бизнес-логику выносите в класс локального модуля. Обёртка function_exists скрывает повторное объявление, но оставляет глобальное имя и затрудняет обновление кода.

Что покажет журнал

Запись в конце блока подтверждает только достижение этой строки. При синтаксической ошибке весь блок может не начать выполняться. Поэтому отсутствие сообщения не отличает ошибку компиляции от незапущенного действия.

$this->WriteToTrackingService(
    'Нормализация строки завершена',
    0,
    \CBPTrackingType::Report
);

Для диагностики используйте журнал БП и журнал PHP. Не отключайте проверку пользовательских полей ради обхода ошибки сохранения: сначала разберите тип и обязательность конкретного поля.

Источники