Разработка - Сообщения с тегом "бизнес-процесс"

  • Архив

    «   Март 2024   »
    Пн Вт Ср Чт Пт Сб Вс
            1 2 3
    4 5 6 7 8 9 10
    11 12 13 14 15 16 17
    18 19 20 21 22 23 24
    25 26 27 28 29 30 31
                 

Получение переменных из бизнес-процессов Битрикс для внешнего использования

Появилась задача пробежаться по бизнес-процессам за некоторое количество лет и получить тех, кто был за них ответственным. Ответственный хранится в переменной бизнес-процесса с названием Approver. Гугл ничего не дал, поэтому пошёл методом проб и ошибок. Этим методом удалось выяснить следующую последовательность действий:

В первую очередь получаем полностью инициализированный объект бизнес-процесса:
\Bitrix\Main\Loader::includeModule('bizproc');
// объект среды исполнения
$runtime = CBPRuntime::GetRuntime();
// из этой среды получаем бизнес-процесс по id
// вторым параметром сообщаем, что получаем его в тихом режиме, чтобы случайно что-нибудь попутно не запустилось.
$wf = $runtime->GetWorkflow('5ebb8da25f98d5.63283030', true);
В объекте бизнес-процесса $wf хранится приватная переменная rootActivity, которая нам и нужна. Геттера в классе не предусмотрено, поэтому чтобы ее получить, используем замыкание:
$sweetsThief = function (CBPWorkflow $wf) {
    return $wf->rootActivity;
};

$sweetsThief = Closure::bind($sweetsThief, null, $wf);
/** @var CBPSequentialWorkflowActivity $rootActivity */
$rootActivity = $sweetsThief($wf);
$approver = $rootActivity->GetVariable('Approver'); // Вуаля!
Таким же образом можно вызывать и другие методы объекта корневой активности, обычно доступные только "изнутри" бизнес-процесса. Например GetConstant, GetDocumentId, GetWorkflowStatus и др. Можно вызывать и сеттеры, но за результат таких действия автор ответственности не несет! :-)