Бизнес-процессы
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. Не отключайте проверку пользовательских полей ради обхода ошибки сохранения: сначала разберите тип и обязательность конкретного поля.