Всем привет!
Столкнулся вот с какой проблемой: пишу обработчик события добавления нового элемента инфоблока (событие AfterIBlockElementAddHandler).
Вот код в init.php:
Код в файле \local\php_interface\events\iblockelement.php:
Код метода Common::getWorkFlowInstanceIdByElementId:
Подскажите, почему когда я в отладчике ставлю точку останова после строки $workFlowId = Common::getWorkFlowInstanceIdByElementId($arFields["ID"]); то мне отладчик показывает, что переменная $workFlowId=0 ??
Потом я прям из PHPStorm останавливаю выполнение скрипта, смотрю этот элемент а админке - там показывает что бизнес-процесс не запущен.
А если я после добавления элемента инфоблока, подождав, когда все скрипты отработают, смотрю из админки этот элемент - то там уже показывается, что у элемента бизнес-процесс нормально запустился.
Подскажите, почему когда я нахожусь внутри обработчика события OnAfterIBlockElementAdd то у только что созданного элемента инфоблока ещё не запущен бизнес-процесс?
Я то думал, что если элемент инфоблока уже добавлен, то и экземпляр бизнес-процесса, привязанный к этому новому элементу тоже уже запущен, а оказалось не так.
Подскажите, как мне получить ID экземпляра бизнес-процесса, привязанного к только что добавленному элементу инфоблока?
Столкнулся вот с какой проблемой: пишу обработчик события добавления нового элемента инфоблока (событие AfterIBlockElementAddHandler).
Вот код в init.php:
| Код |
|---|
if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/local/php_interface/events/iblockelement.php")) require_once($_SERVER["DOCUMENT_ROOT"] . "/local/php_interface/events/iblockelement.php"); $eventManager->addEventHandler( "iblock", "OnAfterIBlockElementAdd", ["IblockElement", "OnAfterIBlockElementAddHandler"] ); |
Код в файле \local\php_interface\events\iblockelement.php:
| Код |
|---|
use Bitrix\Main\Loader;Loader::includeModule("bizproc");
use Common;
class IblockElement
{
const PAYMENT_IBLOCK_CODE = 'gis-gmp-PaymentInfo';
const CHARGES_IBLOCK_CODE = 'importedcharge';
const PAYMENTS_WORKFLOW_ID = 41;//TODO исправить на динамическое получение
public static function OnAfterIBlockElementAddHandler(&$arFields)
{
$paymentIblockId = Helper::getIblockIdByCode(self::PAYMENT_IBLOCK_CODE);
if ($arFields["IBLOCK_ID"] == $paymentIblockId) {
//Вот тут возникает ошибка. $workFlowId всегда возвращает 0
$workFlowId = Common::getWorkFlowInstanceIdByElementId($arFields["ID"]);
}
}
} |
Код метода Common::getWorkFlowInstanceIdByElementId:
| Код |
|---|
public static function getWorkFlowInstanceIdByElementId(int $elementId): string{
$workFlowInstanceId = 0;
\Bitrix\Main\Loader::includeModule("bizproc");
$workflowIds = \Bitrix\Bizproc\WorkflowInstanceTable::getIdsByDocument(['iblock', 'CIBlockDocument', $elementId]);
if ($workflowIds) {
$workFlowInstanceId = $workflowIds[0];
}
return $workFlowInstanceId;
} |
Подскажите, почему когда я в отладчике ставлю точку останова после строки $workFlowId = Common::getWorkFlowInstanceIdByElementId($arFields["ID"]); то мне отладчик показывает, что переменная $workFlowId=0 ??
Потом я прям из PHPStorm останавливаю выполнение скрипта, смотрю этот элемент а админке - там показывает что бизнес-процесс не запущен.
А если я после добавления элемента инфоблока, подождав, когда все скрипты отработают, смотрю из админки этот элемент - то там уже показывается, что у элемента бизнес-процесс нормально запустился.
Подскажите, почему когда я нахожусь внутри обработчика события OnAfterIBlockElementAdd то у только что созданного элемента инфоблока ещё не запущен бизнес-процесс?
Я то думал, что если элемент инфоблока уже добавлен, то и экземпляр бизнес-процесса, привязанный к этому новому элементу тоже уже запущен, а оказалось не так.
Подскажите, как мне получить ID экземпляра бизнес-процесса, привязанного к только что добавленному элементу инфоблока?