From 792fda0a21e2ced7c4b1d9d2b3592f2c99581290 Mon Sep 17 00:00:00 2001 From: Victor Saisa Lopez Date: Thu, 4 Aug 2016 11:36:58 -0400 Subject: [PATCH] HOR-1504 "Almacenar la info de la(s) siguiente(s) derivaciones..." SOLVED Issue: Almacenar la info de la(s) siguiente(s) derivaciones, solo cuando sea necesario (asignacion manual) Cause: Nuevo requerimiento de funciones Solution: Se a implementado esta nueva funcionalidad --- workflow/engine/classes/class.derivation.php | 108 ++++++++++++++++-- workflow/engine/classes/class.wsBase.php | 6 - .../model/map/ApplicationMapBuilder.php | 2 + .../classes/model/om/BaseApplication.php | 60 +++++++++- .../classes/model/om/BaseApplicationPeer.php | 23 ++-- workflow/engine/config/schema.xml | 1 + workflow/engine/data/mysql/schema.sql | 1 + .../Project/Adapter/BpmnWorkflow.php | 2 +- 8 files changed, 177 insertions(+), 26 deletions(-) diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 05ca8e023..074131d0a 100755 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -803,6 +803,47 @@ class Derivation /*----------------------------------********---------------------------------*/ } + /** + * Get valid origin Task + * + * @param string $applicationUid Unique id of Case + * @param int $delIndex Delegation index + * + * @return string Returns valid origin Task + */ + private function __getTaskUidOrigin($applicationUid, $delIndex) + { + $taskUidOrigin = ''; + + do { + $criteria = new Criteria('workflow'); + + $criteria->addSelectColumn(AppDelegationPeer::DEL_PREVIOUS); + $criteria->addSelectColumn(TaskPeer::TAS_UID); + $criteria->addSelectColumn(TaskPeer::TAS_TYPE); + + $criteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::INNER_JOIN); + $criteria->add(AppDelegationPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $delIndex, Criteria::EQUAL); + + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteria->next()) { + $record = $rsCriteria->getRow(); + + if (preg_match('/^(?:' . 'NORMAL|SCRIPT\-TASK|WEBENTRYEVENT|START\-MESSAGE\-EVENT|START\-TIMER\-EVENT' . ')$/', $record['TAS_TYPE'])) { + $taskUidOrigin = $record['TAS_UID']; + } + + $delIndex = $record['DEL_PREVIOUS']; + } + } while ($taskUidOrigin == ''); + + //Return + return $taskUidOrigin; + } + /** Derivate * * @param array $currentDelegation @@ -828,6 +869,8 @@ class Derivation //Get data for this DEL_INDEX current $appFields = $this->case->loadCase( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] ); + unset($appFields['APP_ROUTING_DATA']); + //We close the current derivation, then we'll try to derivate to each defined route $this->case->CloseCurrentDelegation( $currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX'] ); @@ -1043,6 +1086,7 @@ class Derivation break; default: $iNewDelIndex = $this->doDerivation($currentDelegation, $nextDel, $appFields, $aSP); + if($iNewDelIndex !== 0){ $arrayDerivationResult[] = ['DEL_INDEX' => $iNewDelIndex, 'TAS_UID' => $nextDel['TAS_UID'], 'USR_UID' => (isset($nextDel['USR_UID']))? $nextDel['USR_UID'] : '']; } @@ -1091,15 +1135,22 @@ class Derivation foreach ($arrayTaskNextDelNextDelegations as $key2 => $value2) { $arrayTaskNextDelNextDel = $value2; - if($arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_ASSIGN_TYPE"] == 'MULTIPLE_INSTANCE'){ - $aUserAssigned = true; - if(!isset($arrayTaskNextDelNextDel["NEXT_TASK"]["USER_ASSIGNED"]["0"]["USR_UID"])){ - throw new Exception(G::LoadTranslation("ID_NO_USERS")); - } - } else { - if (!isset($arrayTaskNextDelNextDel["NEXT_TASK"]["USER_ASSIGNED"]["USR_UID"])) { - throw new Exception(G::LoadTranslation("ID_NO_USERS")); - } + switch ($arrayTaskNextDelNextDel['NEXT_TASK']['TAS_ASSIGN_TYPE']) { + case 'MANUAL': + $arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['USR_UID'] = ''; + break; + case 'MULTIPLE_INSTANCE': + if (!isset($arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['0']['USR_UID'])) { + throw new Exception(G::LoadTranslation('ID_NO_USERS')); + } + + $arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['USR_UID'] = ''; + break; + default: + if (!isset($arrayTaskNextDelNextDel['NEXT_TASK']['USER_ASSIGNED']['USR_UID'])) { + throw new Exception(G::LoadTranslation('ID_NO_USERS')); + } + break; } $rouPreType = ""; @@ -1110,6 +1161,7 @@ class Derivation $rouPreType = $arrayTaskNextDelNextDel["NEXT_TASK"]["ROU_PREVIOUS_TYPE"]; $rouPreTask = $arrayTaskNextDelNextDel["NEXT_TASK"]["ROU_PREVIOUS_TASK"]; } + $nextDelegationsAux[++$i] = array( "TAS_UID" => $arrayTaskNextDelNextDel["NEXT_TASK"]["TAS_UID"], "USR_UID" => $arrayTaskNextDelNextDel["NEXT_TASK"]["USER_ASSIGNED"]["USR_UID"], @@ -1217,15 +1269,39 @@ class Derivation function doDerivation ($currentDelegation, $nextDel, $appFields, $aSP = null) { + $case = new \ProcessMaker\BusinessModel\Cases(); + $arrayApplicationData = $case->getApplicationRecordByPk($currentDelegation['APP_UID'], [], false); + + $arrayRoutingData = (!is_null($arrayApplicationData['APP_ROUTING_DATA']) && $arrayApplicationData['APP_ROUTING_DATA'] != '')? unserialize($arrayApplicationData['APP_ROUTING_DATA']) : []; + $iAppThreadIndex = $appFields['DEL_THREAD']; $delType = 'NORMAL'; $sendNotificationsMobile = false; + $taskNextDel = TaskPeer::retrieveByPK($nextDel["TAS_UID"]); + + $taskUidOrigin = $this->__getTaskUidOrigin($currentDelegation['APP_UID'], $currentDelegation['DEL_INDEX']); + $taskUidDest = $taskNextDel->getTasUid(); + + if (array_key_exists($taskUidOrigin . '/' . $taskUidDest, $arrayRoutingData)) { + $nextDel['USR_UID'] = $arrayRoutingData[$taskUidOrigin . '/' . $taskUidDest]['USR_UID']; + + unset($arrayRoutingData[$taskUidOrigin . '/' . $taskUidDest]); + } + + if ($taskNextDel->getTasType() == 'NORMAL' && + $taskNextDel->getTasAssignType() != 'SELF_SERVICE' && + (is_null($nextDel['USR_UID']) || $nextDel['USR_UID'] == '') + ) { + throw new Exception(G::LoadTranslation('ID_NO_USERS')); + } + if (is_numeric( $nextDel['DEL_PRIORITY'] )) { $nextDel['DEL_PRIORITY'] = (isset( $nextDel['DEL_PRIORITY'] ) ? ($nextDel['DEL_PRIORITY'] >= 1 && $nextDel['DEL_PRIORITY'] <= 5 ? $nextDel['DEL_PRIORITY'] : '3') : '3'); } else { $nextDel['DEL_PRIORITY'] = 3; } + switch ($nextDel['TAS_ASSIGN_TYPE']) { case 'CANCEL_MI': case 'STATIC_MI': @@ -1267,6 +1343,20 @@ class Derivation break; } + if (array_key_exists('NEXT_ROUTING', $nextDel) && is_array($nextDel['NEXT_ROUTING']) && !empty($nextDel['NEXT_ROUTING'])) { + if (array_key_exists('TAS_UID', $nextDel['NEXT_ROUTING'])) { + $arrayRoutingData[$currentDelegation['TAS_UID'] . '/' . $nextDel['NEXT_ROUTING']['TAS_UID']] = $nextDel['NEXT_ROUTING']; + } else { + foreach ($nextDel['NEXT_ROUTING'] as $value) { + $arrayRoutingData[$currentDelegation['TAS_UID'] . '/' . $value['TAS_UID']] = $value; + } + } + } + + $application = new Application(); + $result = $application->update(['APP_UID' => $currentDelegation['APP_UID'], 'APP_ROUTING_DATA' => serialize($arrayRoutingData)]); + + //APP_THREAD $iAppThreadIndex = $appFields['DEL_THREAD']; switch ($currentDelegation['ROU_TYPE']) { diff --git a/workflow/engine/classes/class.wsBase.php b/workflow/engine/classes/class.wsBase.php index 2df12068c..8f2ad869b 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -2379,12 +2379,6 @@ class wsBase } foreach ($derive as $key => $val) { - if ($val['NEXT_TASK']['TAS_ASSIGN_TYPE'] == 'MANUAL') { - $result = new wsResponse(15, G::LoadTranslation('ID_TASK_DEFINED_MANUAL_ASSIGNMENT')); - - return $result; - } - //Routed to the next task, if end process then not exist user $nodeNext = array(); $usrasgdUid = null; diff --git a/workflow/engine/classes/model/map/ApplicationMapBuilder.php b/workflow/engine/classes/model/map/ApplicationMapBuilder.php index 167f35e29..6bd09a85a 100755 --- a/workflow/engine/classes/model/map/ApplicationMapBuilder.php +++ b/workflow/engine/classes/model/map/ApplicationMapBuilder.php @@ -107,6 +107,8 @@ class ApplicationMapBuilder $tMap->addColumn('APP_DRIVE_FOLDER_UID', 'AppDriveFolderUid', 'string', CreoleTypes::VARCHAR, false, 32); + $tMap->addColumn('APP_ROUTING_DATA', 'AppRoutingData', 'string', CreoleTypes::LONGVARCHAR, false, null); + $tMap->addValidator('APP_STATUS', 'validValues', 'propel.validator.ValidValuesValidator', 'DRAFT|TO_DO|PAUSED|COMPLETED|CANCELLED', 'Please select a valid status.'); } // doBuild() diff --git a/workflow/engine/classes/model/om/BaseApplication.php b/workflow/engine/classes/model/om/BaseApplication.php index 437bdd259..f04ca84c1 100755 --- a/workflow/engine/classes/model/om/BaseApplication.php +++ b/workflow/engine/classes/model/om/BaseApplication.php @@ -153,6 +153,12 @@ abstract class BaseApplication extends BaseObject implements Persistent */ protected $app_drive_folder_uid = ''; + /** + * The value for the app_routing_data field. + * @var string + */ + protected $app_routing_data; + /** * Flag to prevent endless save loop, if this object is referenced * by another object which falls in this transaction. @@ -482,6 +488,17 @@ abstract class BaseApplication extends BaseObject implements Persistent return $this->app_drive_folder_uid; } + /** + * Get the [app_routing_data] column value. + * + * @return string + */ + public function getAppRoutingData() + { + + return $this->app_routing_data; + } + /** * Set the value of [app_uid] column. * @@ -960,6 +977,28 @@ abstract class BaseApplication extends BaseObject implements Persistent } // setAppDriveFolderUid() + /** + * Set the value of [app_routing_data] column. + * + * @param string $v new value + * @return void + */ + public function setAppRoutingData($v) + { + + // Since the native PHP type for this column is string, + // we will cast the input to a string (if it is not). + if ($v !== null && !is_string($v)) { + $v = (string) $v; + } + + if ($this->app_routing_data !== $v) { + $this->app_routing_data = $v; + $this->modifiedColumns[] = ApplicationPeer::APP_ROUTING_DATA; + } + + } // setAppRoutingData() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -1019,12 +1058,14 @@ abstract class BaseApplication extends BaseObject implements Persistent $this->app_drive_folder_uid = $rs->getString($startcol + 20); + $this->app_routing_data = $rs->getString($startcol + 21); + $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 21; // 21 = ApplicationPeer::NUM_COLUMNS - ApplicationPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 22; // 22 = ApplicationPeer::NUM_COLUMNS - ApplicationPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating Application object", $e); @@ -1291,6 +1332,9 @@ abstract class BaseApplication extends BaseObject implements Persistent case 20: return $this->getAppDriveFolderUid(); break; + case 21: + return $this->getAppRoutingData(); + break; default: return null; break; @@ -1332,6 +1376,7 @@ abstract class BaseApplication extends BaseObject implements Persistent $keys[18] => $this->getAppDuration(), $keys[19] => $this->getAppDelayDuration(), $keys[20] => $this->getAppDriveFolderUid(), + $keys[21] => $this->getAppRoutingData(), ); return $result; } @@ -1426,6 +1471,9 @@ abstract class BaseApplication extends BaseObject implements Persistent case 20: $this->setAppDriveFolderUid($value); break; + case 21: + $this->setAppRoutingData($value); + break; } // switch() } @@ -1533,6 +1581,10 @@ abstract class BaseApplication extends BaseObject implements Persistent $this->setAppDriveFolderUid($arr[$keys[20]]); } + if (array_key_exists($keys[21], $arr)) { + $this->setAppRoutingData($arr[$keys[21]]); + } + } /** @@ -1628,6 +1680,10 @@ abstract class BaseApplication extends BaseObject implements Persistent $criteria->add(ApplicationPeer::APP_DRIVE_FOLDER_UID, $this->app_drive_folder_uid); } + if ($this->isColumnModified(ApplicationPeer::APP_ROUTING_DATA)) { + $criteria->add(ApplicationPeer::APP_ROUTING_DATA, $this->app_routing_data); + } + return $criteria; } @@ -1722,6 +1778,8 @@ abstract class BaseApplication extends BaseObject implements Persistent $copyObj->setAppDriveFolderUid($this->app_drive_folder_uid); + $copyObj->setAppRoutingData($this->app_routing_data); + $copyObj->setNew(true); diff --git a/workflow/engine/classes/model/om/BaseApplicationPeer.php b/workflow/engine/classes/model/om/BaseApplicationPeer.php index 508479f0b..bd869e1b7 100755 --- a/workflow/engine/classes/model/om/BaseApplicationPeer.php +++ b/workflow/engine/classes/model/om/BaseApplicationPeer.php @@ -25,7 +25,7 @@ abstract class BaseApplicationPeer const CLASS_DEFAULT = 'classes.model.Application'; /** The total number of columns. */ - const NUM_COLUMNS = 21; + const NUM_COLUMNS = 22; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -94,6 +94,9 @@ abstract class BaseApplicationPeer /** the column name for the APP_DRIVE_FOLDER_UID field */ const APP_DRIVE_FOLDER_UID = 'APPLICATION.APP_DRIVE_FOLDER_UID'; + /** the column name for the APP_ROUTING_DATA field */ + const APP_ROUTING_DATA = 'APPLICATION.APP_ROUTING_DATA'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -105,10 +108,10 @@ abstract class BaseApplicationPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid', 'AppTitle', 'AppDescription', 'AppNumber', 'AppParent', 'AppStatus', 'ProUid', 'AppProcStatus', 'AppProcCode', 'AppParallel', 'AppInitUser', 'AppCurUser', 'AppCreateDate', 'AppInitDate', 'AppFinishDate', 'AppUpdateDate', 'AppData', 'AppPin', 'AppDuration', 'AppDelayDuration', 'AppDriveFolderUid', ), - BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID, ApplicationPeer::APP_TITLE, ApplicationPeer::APP_DESCRIPTION, ApplicationPeer::APP_NUMBER, ApplicationPeer::APP_PARENT, ApplicationPeer::APP_STATUS, ApplicationPeer::PRO_UID, ApplicationPeer::APP_PROC_STATUS, ApplicationPeer::APP_PROC_CODE, ApplicationPeer::APP_PARALLEL, ApplicationPeer::APP_INIT_USER, ApplicationPeer::APP_CUR_USER, ApplicationPeer::APP_CREATE_DATE, ApplicationPeer::APP_INIT_DATE, ApplicationPeer::APP_FINISH_DATE, ApplicationPeer::APP_UPDATE_DATE, ApplicationPeer::APP_DATA, ApplicationPeer::APP_PIN, ApplicationPeer::APP_DURATION, ApplicationPeer::APP_DELAY_DURATION, ApplicationPeer::APP_DRIVE_FOLDER_UID, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'APP_TITLE', 'APP_DESCRIPTION', 'APP_NUMBER', 'APP_PARENT', 'APP_STATUS', 'PRO_UID', 'APP_PROC_STATUS', 'APP_PROC_CODE', 'APP_PARALLEL', 'APP_INIT_USER', 'APP_CUR_USER', 'APP_CREATE_DATE', 'APP_INIT_DATE', 'APP_FINISH_DATE', 'APP_UPDATE_DATE', 'APP_DATA', 'APP_PIN', 'APP_DURATION', 'APP_DELAY_DURATION', 'APP_DRIVE_FOLDER_UID', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ) + BasePeer::TYPE_PHPNAME => array ('AppUid', 'AppTitle', 'AppDescription', 'AppNumber', 'AppParent', 'AppStatus', 'ProUid', 'AppProcStatus', 'AppProcCode', 'AppParallel', 'AppInitUser', 'AppCurUser', 'AppCreateDate', 'AppInitDate', 'AppFinishDate', 'AppUpdateDate', 'AppData', 'AppPin', 'AppDuration', 'AppDelayDuration', 'AppDriveFolderUid', 'AppRoutingData', ), + BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID, ApplicationPeer::APP_TITLE, ApplicationPeer::APP_DESCRIPTION, ApplicationPeer::APP_NUMBER, ApplicationPeer::APP_PARENT, ApplicationPeer::APP_STATUS, ApplicationPeer::PRO_UID, ApplicationPeer::APP_PROC_STATUS, ApplicationPeer::APP_PROC_CODE, ApplicationPeer::APP_PARALLEL, ApplicationPeer::APP_INIT_USER, ApplicationPeer::APP_CUR_USER, ApplicationPeer::APP_CREATE_DATE, ApplicationPeer::APP_INIT_DATE, ApplicationPeer::APP_FINISH_DATE, ApplicationPeer::APP_UPDATE_DATE, ApplicationPeer::APP_DATA, ApplicationPeer::APP_PIN, ApplicationPeer::APP_DURATION, ApplicationPeer::APP_DELAY_DURATION, ApplicationPeer::APP_DRIVE_FOLDER_UID, ApplicationPeer::APP_ROUTING_DATA, ), + BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'APP_TITLE', 'APP_DESCRIPTION', 'APP_NUMBER', 'APP_PARENT', 'APP_STATUS', 'PRO_UID', 'APP_PROC_STATUS', 'APP_PROC_CODE', 'APP_PARALLEL', 'APP_INIT_USER', 'APP_CUR_USER', 'APP_CREATE_DATE', 'APP_INIT_DATE', 'APP_FINISH_DATE', 'APP_UPDATE_DATE', 'APP_DATA', 'APP_PIN', 'APP_DURATION', 'APP_DELAY_DURATION', 'APP_DRIVE_FOLDER_UID', 'APP_ROUTING_DATA', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ) ); /** @@ -118,10 +121,10 @@ abstract class BaseApplicationPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'AppTitle' => 1, 'AppDescription' => 2, 'AppNumber' => 3, 'AppParent' => 4, 'AppStatus' => 5, 'ProUid' => 6, 'AppProcStatus' => 7, 'AppProcCode' => 8, 'AppParallel' => 9, 'AppInitUser' => 10, 'AppCurUser' => 11, 'AppCreateDate' => 12, 'AppInitDate' => 13, 'AppFinishDate' => 14, 'AppUpdateDate' => 15, 'AppData' => 16, 'AppPin' => 17, 'AppDuration' => 18, 'AppDelayDuration' => 19, 'AppDriveFolderUid' => 20, ), - BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID => 0, ApplicationPeer::APP_TITLE => 1, ApplicationPeer::APP_DESCRIPTION => 2, ApplicationPeer::APP_NUMBER => 3, ApplicationPeer::APP_PARENT => 4, ApplicationPeer::APP_STATUS => 5, ApplicationPeer::PRO_UID => 6, ApplicationPeer::APP_PROC_STATUS => 7, ApplicationPeer::APP_PROC_CODE => 8, ApplicationPeer::APP_PARALLEL => 9, ApplicationPeer::APP_INIT_USER => 10, ApplicationPeer::APP_CUR_USER => 11, ApplicationPeer::APP_CREATE_DATE => 12, ApplicationPeer::APP_INIT_DATE => 13, ApplicationPeer::APP_FINISH_DATE => 14, ApplicationPeer::APP_UPDATE_DATE => 15, ApplicationPeer::APP_DATA => 16, ApplicationPeer::APP_PIN => 17, ApplicationPeer::APP_DURATION => 18, ApplicationPeer::APP_DELAY_DURATION => 19, ApplicationPeer::APP_DRIVE_FOLDER_UID => 20, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'APP_TITLE' => 1, 'APP_DESCRIPTION' => 2, 'APP_NUMBER' => 3, 'APP_PARENT' => 4, 'APP_STATUS' => 5, 'PRO_UID' => 6, 'APP_PROC_STATUS' => 7, 'APP_PROC_CODE' => 8, 'APP_PARALLEL' => 9, 'APP_INIT_USER' => 10, 'APP_CUR_USER' => 11, 'APP_CREATE_DATE' => 12, 'APP_INIT_DATE' => 13, 'APP_FINISH_DATE' => 14, 'APP_UPDATE_DATE' => 15, 'APP_DATA' => 16, 'APP_PIN' => 17, 'APP_DURATION' => 18, 'APP_DELAY_DURATION' => 19, 'APP_DRIVE_FOLDER_UID' => 20, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ) + BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'AppTitle' => 1, 'AppDescription' => 2, 'AppNumber' => 3, 'AppParent' => 4, 'AppStatus' => 5, 'ProUid' => 6, 'AppProcStatus' => 7, 'AppProcCode' => 8, 'AppParallel' => 9, 'AppInitUser' => 10, 'AppCurUser' => 11, 'AppCreateDate' => 12, 'AppInitDate' => 13, 'AppFinishDate' => 14, 'AppUpdateDate' => 15, 'AppData' => 16, 'AppPin' => 17, 'AppDuration' => 18, 'AppDelayDuration' => 19, 'AppDriveFolderUid' => 20, 'AppRoutingData' => 21, ), + BasePeer::TYPE_COLNAME => array (ApplicationPeer::APP_UID => 0, ApplicationPeer::APP_TITLE => 1, ApplicationPeer::APP_DESCRIPTION => 2, ApplicationPeer::APP_NUMBER => 3, ApplicationPeer::APP_PARENT => 4, ApplicationPeer::APP_STATUS => 5, ApplicationPeer::PRO_UID => 6, ApplicationPeer::APP_PROC_STATUS => 7, ApplicationPeer::APP_PROC_CODE => 8, ApplicationPeer::APP_PARALLEL => 9, ApplicationPeer::APP_INIT_USER => 10, ApplicationPeer::APP_CUR_USER => 11, ApplicationPeer::APP_CREATE_DATE => 12, ApplicationPeer::APP_INIT_DATE => 13, ApplicationPeer::APP_FINISH_DATE => 14, ApplicationPeer::APP_UPDATE_DATE => 15, ApplicationPeer::APP_DATA => 16, ApplicationPeer::APP_PIN => 17, ApplicationPeer::APP_DURATION => 18, ApplicationPeer::APP_DELAY_DURATION => 19, ApplicationPeer::APP_DRIVE_FOLDER_UID => 20, ApplicationPeer::APP_ROUTING_DATA => 21, ), + BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'APP_TITLE' => 1, 'APP_DESCRIPTION' => 2, 'APP_NUMBER' => 3, 'APP_PARENT' => 4, 'APP_STATUS' => 5, 'PRO_UID' => 6, 'APP_PROC_STATUS' => 7, 'APP_PROC_CODE' => 8, 'APP_PARALLEL' => 9, 'APP_INIT_USER' => 10, 'APP_CUR_USER' => 11, 'APP_CREATE_DATE' => 12, 'APP_INIT_DATE' => 13, 'APP_FINISH_DATE' => 14, 'APP_UPDATE_DATE' => 15, 'APP_DATA' => 16, 'APP_PIN' => 17, 'APP_DURATION' => 18, 'APP_DELAY_DURATION' => 19, 'APP_DRIVE_FOLDER_UID' => 20, 'APP_ROUTING_DATA' => 21, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ) ); /** @@ -264,6 +267,8 @@ abstract class BaseApplicationPeer $criteria->addSelectColumn(ApplicationPeer::APP_DRIVE_FOLDER_UID); + $criteria->addSelectColumn(ApplicationPeer::APP_ROUTING_DATA); + } const COUNT = 'COUNT(APPLICATION.APP_UID)'; diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index d3bf953bb..e2b2f3ab6 100755 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -42,6 +42,7 @@ + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index c346956bb..2756f916c 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -33,6 +33,7 @@ CREATE TABLE `APPLICATION` `APP_DURATION` DOUBLE default 0, `APP_DELAY_DURATION` DOUBLE default 0, `APP_DRIVE_FOLDER_UID` VARCHAR(32) default '', + `APP_ROUTING_DATA` MEDIUMTEXT, PRIMARY KEY (`APP_UID`), KEY `indexApp`(`PRO_UID`, `APP_STATUS`, `APP_UID`), KEY `indexAppNumber`(`APP_NUMBER`), diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index d7154ebfa..7f0196df1 100755 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -2106,7 +2106,7 @@ class BpmnWorkflow extends Project\Bpmn //Update Process $process = \ProcessPeer::retrieveByPk($this->wp->getUid()); - $arrayActionDone = ($process->getProActionDone() != '')? unserialize($process->getProActionDone()) : []; + $arrayActionDone = (!is_null($process->getProActionDone()) && $process->getProActionDone() != '')? unserialize($process->getProActionDone()) : []; $arrayActionDone[] = $actionDone; $this->wp->update(['PRO_ACTION_DONE' => serialize($arrayActionDone)]);