/** * Triggers the workflows scheduled for running. */ public function runWorkflows() { $arrWorkflows = class_module_workflows_workflow::getWorkflowsByType(class_module_workflows_workflow::$INT_STATE_SCHEDULED); class_logger::getInstance(self::STR_LOGFILE)->addLogRow("running workflows, count: " . count($arrWorkflows), class_logger::$levelInfo); foreach ($arrWorkflows as $objOneWorkflow) { //lock the workflow $objLockmanager = new class_lockmanager($objOneWorkflow->getSystemid()); if ($objLockmanager->isLocked()) { class_logger::getInstance(self::STR_LOGFILE)->addLogRow("workflow " . $objOneWorkflow->getSystemid() . " is locked, can't be scheduled", class_logger::$levelWarning); continue; } $objLockmanager->lockRecord(); /** * @var interface_workflows_handler */ $objHandler = $objOneWorkflow->getObjWorkflowHandler(); //trigger the workflow class_logger::getInstance(self::STR_LOGFILE)->addLogRow("executing workflow " . $objOneWorkflow->getSystemid(), class_logger::$levelInfo); if ($objHandler->execute()) { //handler executed successfully. shift to state 'executed' $objOneWorkflow->setIntState(class_module_workflows_workflow::$INT_STATE_EXECUTED); class_logger::getInstance(self::STR_LOGFILE)->addLogRow(" execution finished, new state: executed", class_logger::$levelInfo); } else { //handler failed to execute. reschedule. $objHandler->schedule(); $objOneWorkflow->setIntState(class_module_workflows_workflow::$INT_STATE_SCHEDULED); class_logger::getInstance(self::STR_LOGFILE)->addLogRow(" execution finished, new state: scheduled", class_logger::$levelInfo); } $objOneWorkflow->setIntRuns($objOneWorkflow->getIntRuns() + 1); $objOneWorkflow->updateObjectToDb(); $objLockmanager->unlockRecord(true); } class_logger::getInstance(self::STR_LOGFILE)->addLogRow("running workflows finished", class_logger::$levelInfo); }