BUG 11510 Números de casos duplicados SOLVED
- Al parecer existe un problema de concurrencia al crear los casos en processmaker, de tal forma que si se intenta crear 2 casos al mismo tiempo el número del caso termina siendo el mismo para ambos casos. - Added sequences table for control of the applications.
This commit is contained in:
@@ -347,6 +347,7 @@ class Application extends BaseApplication
|
||||
*/
|
||||
public function create($sProUid, $sUsrUid)
|
||||
{
|
||||
require_once ("classes/model/Sequences.php");
|
||||
$con = Propel::getConnection('workflow');
|
||||
|
||||
try {
|
||||
@@ -371,15 +372,21 @@ class Application extends BaseApplication
|
||||
$c = new Criteria();
|
||||
$c->clearSelectColumns();
|
||||
|
||||
$c->addSelectColumn('MAX(' . ApplicationPeer::APP_NUMBER . ')'); //the appnumber is based in all processes
|
||||
//active, not only in the specified
|
||||
//process guid
|
||||
$oSequences = new Sequences();
|
||||
$oSequences->lockSequenceTable();
|
||||
|
||||
$result = ApplicationPeer::doSelectRS($c);
|
||||
$result->next();
|
||||
$row = $result->getRow();
|
||||
if ($oSequences->nameExists("APP_NUMBER") ) {
|
||||
$maxNumber = $oSequences->getSequeceNumber("APP_NUMBER");
|
||||
} else {
|
||||
$c->addSelectColumn('MAX(' . ApplicationPeer::APP_NUMBER . ')'); //the appnumber is based in all processes
|
||||
//active, not only in the specified
|
||||
//process guid
|
||||
$result = ApplicationPeer::doSelectRS($c);
|
||||
$result->next();
|
||||
$row = $result->getRow();
|
||||
$maxNumber = $row[0] + 1;
|
||||
}
|
||||
|
||||
$maxNumber = $row[0] + 1;
|
||||
$this->setAppNumber($maxNumber);
|
||||
|
||||
if ($this->validate()) {
|
||||
@@ -395,6 +402,8 @@ class Application extends BaseApplication
|
||||
|
||||
$con->commit();
|
||||
|
||||
$oSequences->unlockSequenceTable();
|
||||
$oSequences->changeSequence('APP_NUMBER', $maxNumber);
|
||||
return $this->getAppUid();
|
||||
} else {
|
||||
$msg = '';
|
||||
@@ -402,7 +411,8 @@ class Application extends BaseApplication
|
||||
foreach ($this->getValidationFailures() as $objValidationFailure) {
|
||||
$msg .= $objValidationFailure->getMessage() . "<br/>";
|
||||
}
|
||||
|
||||
$oSequences->unlockSequenceTable();
|
||||
$oSequences->changeSequence('APP_NUMBER', $maxNumber);
|
||||
throw (new PropelException('The APPLICATION row cannot be created!', new PropelException($msg)));
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
|
||||
Reference in New Issue
Block a user