Бизнес-процессы
Переменные и константы
Работа с переменными и константами бизнес-процессов в коробочном Bitrix24: обычные переменные, константы, глобальные переменные и глобальные константы.
В PHP-блоке бизнес-процесса не стоит вставлять значения через шаблоны вида
{=Variable:name}. Надёжнее получать и изменять данные через методы
контекста бизнес-процесса.
Переменные процесса
Переменные принадлежат конкретному экземпляру бизнес-процесса.
Получить переменную
Значение переменной процесса читается через GetVariable(). Внутри обычного
действия «PHP-код» доступен контекст $this.
/**
* Получает строковую переменную бизнес-процесса.
*/
function fetchProcessStringVariable($context, string $variable_id): string
{
return (string) $context->GetVariable($variable_id);
}
$name = fetchProcessStringVariable($this, 'name');
$this->WriteToTrackingService(
'Имя из переменной: ' . $name,
0,
\CBPTrackingType::Report
); Установить переменную
Записать значение в переменную можно через SetVariable(). Это удобно, если
результат PHP-кода дальше используется в условиях или других действиях.
/**
* Сохраняет значение в переменную бизнес-процесса.
*/
function saveProcessVariable($context, string $variable_id, $variable_value): void
{
$context->SetVariable($variable_id, $variable_value);
}
$total_sum = 15000;
saveProcessVariable($this, 'total_sum', $total_sum);
Если переменная имеет тип «Пользователь» и должна хранить несколько пользователей,
обычно передают массив значений вида user_1, user_2.
$this->SetVariable(
'approvers',
[
'user_1',
'user_2',
]
); Корневая активность
Иногда в примерах используют корневую активность:
$this->GetRootActivity(). Это тоже рабочий способ получить доступ к
переменным процесса.
$root_activity = $this->GetRootActivity();
$name = (string) $root_activity->GetVariable('name');
$root_activity->SetVariable('name_copy', $name); Константы процесса
Константы процесса читаются из шаблона бизнес-процесса и обычно не меняются в ходе выполнения.
Получить константу
Константу конкретного шаблона можно получить через GetConstant().
/**
* Получает константу бизнес-процесса.
*/
function fetchProcessConstant($context, string $constant_id)
{
return $context->GetConstant($constant_id);
}
$manager_user = fetchProcessConstant($this, 'manager_user');
$this->SetVariable('manager_user_from_constant', $manager_user); Глобальные значения
Глобальные переменные и константы доступны из разных шаблонов бизнес-процессов с учётом настроек видимости.
Глобальные переменные
Глобальные переменные можно читать и изменять. Для работы с ними используется
\Bitrix\Bizproc\Workflow\Type\GlobalVar.
\Bitrix\Main\Loader::includeModule('bizproc');
/**
* Получает значение глобальной переменной.
*/
function fetchGlobalVariableValue(string $variable_id)
{
return \Bitrix\Bizproc\Workflow\Type\GlobalVar::getValue($variable_id);
}
/**
* Получает описание глобальной переменной.
*/
function fetchGlobalVariableProperty(string $variable_id): array
{
$variable_property = \Bitrix\Bizproc\Workflow\Type\GlobalVar::getById($variable_id);
return is_array($variable_property) ? $variable_property : [];
}
$global_value = fetchGlobalVariableValue('orderVacancy');
$this->SetVariable('global_variable_value', $global_value); Глобальные константы
Глобальные константы читаются похожим способом, но используются для значений, которые не должны меняться в ходе процесса.
\Bitrix\Main\Loader::includeModule('bizproc');
/**
* Получает значение глобальной константы.
*/
function fetchGlobalConstantValue(string $constant_id)
{
return \Bitrix\Bizproc\Workflow\Type\GlobalConst::getValue($constant_id);
}
/**
* Получает описание глобальной константы.
*/
function fetchGlobalConstantProperty(string $constant_id): array
{
$constant_property = \Bitrix\Bizproc\Workflow\Type\GlobalConst::getById($constant_id);
return is_array($constant_property) ? $constant_property : [];
}
$global_constant_value = fetchGlobalConstantValue('mainManager');
$this->SetVariable('main_manager', $global_constant_value); Изменить глобальную переменную
Для изменения глобальной переменной обычно получают её описание через
getById(), меняют Default и сохраняют через
upsert().
\Bitrix\Main\Loader::includeModule('bizproc');
/**
* Изменяет значение глобальной переменной.
*/
function updateGlobalVariableDefault(string $variable_id, $variable_value): bool
{
$global_variable = \Bitrix\Bizproc\Workflow\Type\GlobalVar::getById($variable_id);
if (!is_array($global_variable)) {
return false;
}
$global_variable['Default'] = $variable_value;
\Bitrix\Bizproc\Workflow\Type\GlobalVar::upsert($variable_id, $global_variable);
return true;
}
$is_updated = updateGlobalVariableDefault('orderVacancy', 'Y');
$this->WriteToTrackingService(
$is_updated ? 'Глобальная переменная обновлена' : 'Глобальная переменная не найдена',
0,
\CBPTrackingType::Report
);