← Назад к справке

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

Переменные и константы

Работа с переменными и константами бизнес-процессов в коробочном 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
);

Источники