...Человеческий поиск в разработке...
- Модуль: bizproc
- Путь к файлу: ~/bitrix/modules/bizproc/classes/general/workflow.php
- Класс: CBPWorkflow
- Вызов: CBPWorkflow::runQueuedItem
private function runQueuedItem(CBPActivity $activity, $activityOperation, Exception $exception = null) { /** @var $trackingService CBPTrackingService */ if ($activityOperation == CBPActivityExecutorOperationType::Execute) { if ($activity->executionStatus == CBPActivityExecutionStatus::Executing) { try { $newStatus = CBPActivityExecutionStatus::Closed; if ($activity->isActivated()) { $trackingService = $this->getService('TrackingService'); $trackingService->write( $this->getInstanceId(), CBPTrackingType::ExecuteActivity, $activity->getName(), $activity->executionStatus, $activity->executionResult, $activity->getTitle(), '' ); $newStatus = $activity->Execute(); //analyse robots - Temporary, it is prototype if ($trackingService->isForcedMode($this->GetInstanceId())) { $activityType = mb_substr(get_class($activity), 3); if (!in_array($activityType, [ 'SequentialWorkflowActivity', 'ParallelActivity', 'SequenceActivity', 'DelayActivity', 'IfElseActivity', 'IfElseBranchActivity' ])) { /** @var BitrixBizprocServiceAnalytics $analyticsService */ $analyticsService = $this->GetService("AnalyticsService"); if ($analyticsService->isEnabled()) { $analyticsService->write( $activity->GetDocumentId(), 'robot_run', $activityType ); } } } } if ($newStatus == CBPActivityExecutionStatus::Closed) { $this->CloseActivity($activity); } elseif ($newStatus != CBPActivityExecutionStatus::Executing) { throw new Exception('InvalidExecutionStatus'); } } catch (Exception $e) { throw $e; } } } elseif ($activityOperation == CBPActivityExecutorOperationType::Cancel) { if ($activity->executionStatus == CBPActivityExecutionStatus::Canceling) { try { $trackingService = $this->GetService("TrackingService"); $trackingService->Write($this->GetInstanceId(), CBPTrackingType::CancelActivity, $activity->GetName(), $activity->executionStatus, $activity->executionResult, ($activity->IsPropertyExists("Title") ? $activity->Title : ""), ""); $newStatus = $activity->Cancel(); if ($newStatus == CBPActivityExecutionStatus::Closed) $this->CloseActivity($activity); elseif ($newStatus != CBPActivityExecutionStatus::Canceling) throw new Exception("InvalidExecutionStatus"); } catch (Exception $e) { throw $e; } } } elseif ($activityOperation == CBPActivityExecutorOperationType::HandleFault) { if ($activity->executionStatus == CBPActivityExecutionStatus::Faulting) { try { $trackingService = $this->GetService("TrackingService"); $trackingService->Write($this->GetInstanceId(), CBPTrackingType::FaultActivity, $activity->GetName(), $activity->executionStatus, $activity->executionResult, ($activity->IsPropertyExists("Title") ? $activity->Title : ""), ($exception != null ? ($exception->getCode()? "[".$exception->getCode()."] " : '').$exception->getMessage() : "")); $newStatus = $activity->HandleFault($exception); if ($newStatus == CBPActivityExecutionStatus::Closed) $this->CloseActivity($activity); elseif ($newStatus != CBPActivityExecutionStatus::Faulting) throw new Exception("InvalidExecutionStatus"); } catch (Exception $e) { throw $e; } } } }