В бизнес-процессе есть переменная, в которой указан id пользователя, на которого назначаются определённый задачи. Необходимо сделать так, чтобы при делегировании этим пользователем текущей задачи другому пользователю, все последующие задачи назначались другому пользователю. Самое очевидное решение - изменить значение переменной.
Что я делаю:
- по событию onTaskDelegate я получаю id текущей задачи и id пользователя, которому делегировали задачу
- с помощью CBPTaskService::GetList я получаю worflow id бизнес-процесса
- затем обновляю переменную таким образом
Код |
---|
$persister = CBPWorkflowPersister::GetPersister();
$rootActivity = $persister->LoadWorkflow($task['WORKFLOW_ID'], true);
/**@var $rootActivity CBPActivity */
$rootActivity->SetVariable('SCANS_RESPONSIBLE', 'user_' . $userId);
|
- если тут же проверить эту переменную $rootActivity->GetVariable('SCANS_RESPONSIBLE'), то выводится изменённое значение, но задачи продолжают назначаться на изначально указанного в переменной пользователя. ,т.е., значение не меняется. Не могу понять, как это работает и что сделать, чтобы изменить значение в текущем БП.
Весь код примерно выглядит так:
Код |
---|
function OnTaskDelegateHandler($taskId, $fromUserId, $toUserId)
{
$task = CBPTaskService::GetList(
[],
['ID' => $taskId],
false,
[],
['ID', 'WORKFLOW_ID']
)->fetch();
$persister = CBPWorkflowPersister::GetPersister();
$rootActivity = $persister->LoadWorkflow($task['WORKFLOW_ID'], true);
\Bitrix\Main\Diag\Debug::writeToFile($rootActivity->GetVariable('SCANS_RESPONSIBLE')); // Выводит изначальное значение
$rootActivity->SetVariable('SCANS_RESPONSIBLE', 'user_' . $toUserId);
\Bitrix\Main\Diag\Debug::writeToFile($rootActivity->GetVariable('SCANS_RESPONSIBLE')); // Выводит новое значение
} |