/** * saveNewPattern * * @param string $sProcessUID Default value empty * @param string $sTaskUID Default value empty * @param string $sNextTask Default value empty * @param string $sType Default value empty * @param boolean $sDelete * @return array void */ public function saveNewPattern($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '', $sDelete = '') { try { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn('COUNT(*) AS ROUTE_NUMBER'); $oCriteria->addSelectColumn('GAT_UID AS GATEWAY_UID'); $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); $oCriteria->add(RoutePeer::ROU_TYPE, $sType); $oDataset = RoutePeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aRow = $oDataset->getRow(); $aFields['PRO_UID'] = $sProcessUID; $aFields['TAS_UID'] = $sTaskUID; $aFields['ROU_NEXT_TASK'] = $sNextTask; $aFields['ROU_TYPE'] = $sType; $aFields['ROU_CASE'] = (int) $aRow['ROUTE_NUMBER'] + 1; $sGatewayUID = $aRow['GATEWAY_UID']; if ($sDelete && $sGatewayUID != '') { $oGateway = new Gateway(); $oGateway->remove($sGatewayUID); } //Getting Gateway UID after saving gateway //if($sType != 'SEQUENTIAL' && $sGatewayUID == '' && $sDelete == '1') if ($sType != 'SEQUENTIAL') { $oProcessMap = new processMap(); $sGatewayUID = $oProcessMap->saveNewGateway($sProcessUID, $sTaskUID, $sNextTask); } $aFields['GAT_UID'] = isset($sGatewayUID) ? $sGatewayUID : ''; $oRoute = new Route(); $oRoute->create($aFields); } catch (Exception $oError) { throw $oError; } }
/** * creates row tasks from an Route Array * @param string $aTasks * @return array */ public function createRouteRows($aRoutes) { $routeID = array(); $aField = array(); $taskParallel = ''; $taskSecJoin = ''; $taskEvaluate = ''; $taskParallelEv = ''; $taskSelect = ''; $taskDiscriminator = ''; foreach ($aRoutes as $key => $row) { $sRouteType = $row['ROU_TYPE']; $oRoute = new Route(); $oProcessMap = new processMap(); $oTask = new Task(); $oEvent = new Event(); //unset ($row['ROU_UID']); //Saving Gateway into the GATEWAY table $idTask = $row['TAS_UID']; $nextTask = $row['ROU_NEXT_TASK']; if ($nextTask == "-1") { $end = 1; } if ($sRouteType != 'SEQUENTIAL') { switch ($sRouteType) { case 'PARALLEL': if ($idTask != $taskParallel) { $taskParallel = $idTask; $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); } break; case 'SEC-JOIN': if ($nextTask != $taskSecJoin) { $taskSecJoin = $nextTask; $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); } break; case 'EVALUATE': if ($idTask != $taskEvaluate) { $taskEvaluate = $idTask; $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); } break; case 'PARALLEL-BY-EVALUATION': if ($idTask != $taskParallelEv) { $taskParallelEv = $idTask; $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); } break; case 'SELECT': if ($idTask != $taskSelect) { $taskSelect = $idTask; $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); } break; case 'DISCRIMINATOR': if ($nextTask != $taskDiscriminator) { $taskDiscriminator = $nextTask; $sGatewayUID = $oProcessMap->saveNewGateway($row['PRO_UID'], $row['TAS_UID'], $row['ROU_NEXT_TASK']); } break; } $row['GAT_UID'] = $sGatewayUID; } if ($oRoute->routeExists($row['ROU_UID'])) { $oRoute->remove($row['ROU_UID']); } $routeID = $oRoute->create($row); //saving end event while import old processes if (isset($end) && $end == 1) { if (!$oEvent->existsByTaskUidFrom($idTask)) { if ($sRouteType == "SEQUENTIAL") { $aTaskDetails = $oTask->load($idTask); $positionX = $aTaskDetails['TAS_POSX'] + $aTaskDetails['TAS_WIDTH'] / 2; $positionY = $aTaskDetails['TAS_POSY'] + $aTaskDetails['TAS_HEIGHT'] + 10; $aData['PRO_UID'] = $row['PRO_UID']; $aData['EVN_TYPE'] = 'bpmnEventEmptyEnd'; $aData['EVN_POSX'] = $positionX; $aData['EVN_POSY'] = $positionY; $aData['EVN_TAS_UID_FROM'] = $idTask; $aData['EVN_STATUS'] = 'ACTIVE'; $aData['EVN_RELATED_TO'] = 'MULTIPLE'; $aData['EVN_WHEN'] = '1'; $aData['EVN_ACTION'] = ''; $sEvn_uid = $oEvent->create($aData); $aField['ROU_UID'] = $routeID; $aField['ROU_EVN_UID'] = $sEvn_uid; $oRoute->update($aField); $end = 0; } } } } return; }