15 $result = (int) \
Bitrix\Main\Config\Option::get(
'bizproc',
'delay_min_limit', 0);
62 $workflowId = preg_replace(
'#[^a-z0-9.]#i',
'', $workflowId);
63 $eventName = preg_replace(
'#[^a-z0-9._-]#i',
'', $eventName);
65 $minLimit = static::getDelayMinLimit(
false);
68 $minExpiresAt = time() + $minLimit;
69 if ($minExpiresAt > $expiresAt)
71 $expiresAt = $minExpiresAt;
75 return self::addAgent($workflowId, $eventName, $expiresAt);
78 private static function addAgent($workflowId, $eventName, $expiresAt,
$counter = 0)
80 $params =
'[\'SchedulerService\' => \'OnAgent\', \'Counter\' => '.((int)
$counter).
']';
81 $name =
"CBPSchedulerService::OnAgent('{$workflowId}', '{$eventName}', {$params});";
82 return self::addAgentInternal(
$name, $expiresAt);
90 public static function onAgent($workflowId, $eventName, $eventParameters =
array())
94 CBPRuntime::SendExternalEvent($workflowId, $eventName, $eventParameters);
98 if ($e->getCode() === \CBPRuntime::EXCEPTION_CODE_INSTANCE_LOCKED)
100 $counter = isset($eventParameters[
'Counter']) ? (int) $eventParameters[
'Counter'] : 0;
101 $expiresAt = self::getExpiresTimeByCounter(
$counter);
105 self::addAgent($workflowId, $eventName, $expiresAt,
$counter);
109 $e->getCode() !== \CBPRuntime::EXCEPTION_CODE_INSTANCE_NOT_FOUND
110 && $e->getCode() !== \CBPRuntime::EXCEPTION_CODE_INSTANCE_TARIFF_LIMIT_EXCEED
113 self::logUnknownException($e);
137 if (!SchedulerEventTable::isSubscribed($workflowId, $eventHandlerName, $eventModule, $eventName,
$entityId))
140 'WORKFLOW_ID' => (
string)$workflowId,
141 'HANDLER' => (
string)$eventHandlerName,
142 'EVENT_MODULE' => (
string)$eventModule,
143 'EVENT_TYPE' => (
string)$eventName,
146 $resultId = (int)
$result->getId();
153 'CBPSchedulerService',
157 array($eventModule, $eventName, $entityKey)
170 "CBPSchedulerService",
173 array($workflowId, $eventHandlerName,
array(
'SchedulerService' =>
'OnEvent',
'EntityId' =>
$entityId))
192 SchedulerEventTable::deleteBySubscription($workflowId, $eventHandlerName, $eventModule, $eventName,
$entityId);
194 if (!SchedulerEventTable::hasSubscriptions($eventModule, $eventName))
200 'CBPSchedulerService',
203 array($eventModule, $eventName, $entityKey)
210 $event = SchedulerEventTable::getList([
211 'select' => [
'WORKFLOW_ID',
'HANDLER',
'EVENT_MODULE',
'EVENT_TYPE',
'ENTITY_ID'],
212 'filter' => [
'=ID' => $eventId]
222 $entityKey ? [$entityKey =>
$event[
'ENTITY_ID']] :
$event[
'ENTITY_ID']
233 public static function onEvent($workflowId, $eventName, $arEventParameters =
array())
235 $num = func_num_args();
238 for (
$i = 3;
$i < $num;
$i++)
239 $arEventParameters[] = func_get_arg(
$i);
242 if (is_array($arEventParameters[
"EntityId"]))
244 foreach ($arEventParameters[
"EntityId"] as
$key => $value)
246 if (!isset($arEventParameters[0][
$key]) || $arEventParameters[0][
$key] != $value)
250 elseif ($arEventParameters[
"EntityId"] !=
null && $arEventParameters[
"EntityId"] != $arEventParameters[0])
253 global $BX_MODULE_EVENT_LAST;
254 $lastEvent = $BX_MODULE_EVENT_LAST;
258 CBPRuntime::SendExternalEvent($workflowId, $eventName, $arEventParameters);
264 $e->getCode() === \CBPRuntime::EXCEPTION_CODE_INSTANCE_NOT_FOUND
265 && $lastEvent[
'TO_MODULE_ID'] ==
'bizproc'
266 && $lastEvent[
'TO_CLASS'] ==
'CBPSchedulerService'
267 && $lastEvent[
'TO_METHOD'] ==
'OnEvent'
268 && is_array($lastEvent[
'TO_METHOD_ARG'])
269 && $lastEvent[
'TO_METHOD_ARG'][0] == $workflowId
273 $lastEvent[
'FROM_MODULE_ID'],
274 $lastEvent[
'MESSAGE_ID'],
276 "CBPSchedulerService",
279 $lastEvent[
'TO_METHOD_ARG']
282 elseif ($e->getCode() !== \CBPRuntime::EXCEPTION_CODE_INSTANCE_NOT_FOUND)
284 self::logUnknownException($e);
289 public static function sendEvents($eventModule, $eventName, $entityKey)
291 if ($eventModule ===
'bizproc' && $eventName ===
'OnWorkflowComplete' && $entityKey ===
null)
298 'CBPSchedulerService',
301 array($eventModule, $eventName, $entityKey)
307 $eventParameters =
array(
308 'SchedulerService' =>
'OnEvent',
309 'eventModule' => $eventModule,
310 'eventName' => $eventName
313 $num = func_num_args();
316 for (
$i = 3;
$i < $num;
$i++)
317 $eventParameters[] = func_get_arg(
$i);
321 '=EVENT_MODULE' => $eventModule,
322 '=EVENT_TYPE' => $eventName
326 if ($entityKey === 0 && isset($eventParameters[0]))
328 elseif ($entityKey !==
null && isset($eventParameters[0][$entityKey]))
329 $entityId = (string)$eventParameters[0][$entityKey];
340 $event[
'EVENT_PARAMETERS'] = $eventParameters;
341 self::sendEventToWorkflow(
$event);
347 $iterator = SchedulerEventTable::getById($eventId);
350 if (
$event && Loader::includeModule(
$event[
'EVENT_MODULE']))
360 CBPRuntime::SendExternalEvent(
$event[
'WORKFLOW_ID'],
$event[
'HANDLER'],
$event[
'EVENT_PARAMETERS']);
364 if ($e->getCode() === \CBPRuntime::EXCEPTION_CODE_INSTANCE_NOT_FOUND)
366 SchedulerEventTable::delete(
$event[
'ID']);
368 elseif ($e->getCode() === \CBPRuntime::EXCEPTION_CODE_INSTANCE_LOCKED)
372 else if ($e->getCode() === \CBPRuntime::EXCEPTION_CODE_INSTANCE_TARIFF_LIMIT_EXCEED)
378 self::logUnknownException($e);
383 private static function filterEventParameters(
array $parameters)
386 foreach ($parameters as
$key => $parameter)
388 if (is_scalar($parameter))
390 $filtered[
$key] = $parameter;
392 elseif (is_array($parameter))
394 $filtered[
$key] = self::filterEventParameters($parameter);
402 $expiresAt = self::getExpiresTimeByCounter(
$counter);
408 $filteredParameters = self::filterEventParameters(
$event[
'EVENT_PARAMETERS']);
409 SchedulerEventTable::update(
$event[
'ID'], [
'EVENT_PARAMETERS' => $filteredParameters]);
414 $name =
"CBPSchedulerService::repeatEvent({$eventId}, {$counter});";
415 self::addAgentInternal(
$name, $expiresAt);
419 private static function addAgentInternal(
$name, $expiresAt)
435 private static function getExpiresTimeByCounter(
$counter = 0)
440 return time() + [0 => (1 * $minute), 1 => (5 * $minute), 2 => (10 * $minute)][
$counter];
445 private static function logUnknownException(Throwable $exception): void
447 \Bitrix\Main\Application::getInstance()->getExceptionHandler()->writeToLog($exception);
static set($moduleId, $name, $value="", $siteId="")
unSubscribeOnEvent($workflowId, $eventHandlerName, $eventModule, $eventName, $entityId=null)
subscribeOnEvent($workflowId, $eventHandlerName, $eventModule, $eventName, $entityId=null)
subscribeOnTime($workflowId, $eventName, $expiresAt)
static repeatEvent($eventId, $counter=0)
unSubscribeByEventId(int $eventId, $entityKey=null)
static onEvent($workflowId, $eventName, $arEventParameters=array())
static getDelayMinLimit($withType=false)
static onAgent($workflowId, $eventName, $eventParameters=array())
static setDelayMinLimit($limit, $type='s')
static sendEvents($eventModule, $eventName, $entityKey)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
RegisterModuleDependences($FROM_MODULE_ID, $MESSAGE_ID, $TO_MODULE_ID, $TO_CLASS="", $TO_METHOD="", $SORT=100, $TO_PATH="", $TO_METHOD_ARG=[])
UnRegisterModuleDependences($FROM_MODULE_ID, $MESSAGE_ID, $TO_MODULE_ID, $TO_CLASS="", $TO_METHOD="", $TO_PATH="", $TO_METHOD_ARG=[])
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
$GLOBALS['_____370096793']