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. - Changed table sequence to lock read to write.
This commit is contained in:
@@ -388,6 +388,7 @@ class Application extends BaseApplication
|
|||||||
}
|
}
|
||||||
|
|
||||||
$this->setAppNumber($maxNumber);
|
$this->setAppNumber($maxNumber);
|
||||||
|
$oSequences->changeSequence('APP_NUMBER', $maxNumber);
|
||||||
|
|
||||||
if ($this->validate()) {
|
if ($this->validate()) {
|
||||||
$con->begin();
|
$con->begin();
|
||||||
@@ -403,7 +404,6 @@ class Application extends BaseApplication
|
|||||||
$con->commit();
|
$con->commit();
|
||||||
|
|
||||||
$oSequences->unlockSequenceTable();
|
$oSequences->unlockSequenceTable();
|
||||||
$oSequences->changeSequence('APP_NUMBER', $maxNumber);
|
|
||||||
return $this->getAppUid();
|
return $this->getAppUid();
|
||||||
} else {
|
} else {
|
||||||
$msg = '';
|
$msg = '';
|
||||||
@@ -412,7 +412,7 @@ class Application extends BaseApplication
|
|||||||
$msg .= $objValidationFailure->getMessage() . "<br/>";
|
$msg .= $objValidationFailure->getMessage() . "<br/>";
|
||||||
}
|
}
|
||||||
$oSequences->unlockSequenceTable();
|
$oSequences->unlockSequenceTable();
|
||||||
$oSequences->changeSequence('APP_NUMBER', $maxNumber);
|
|
||||||
throw (new PropelException('The APPLICATION row cannot be created!', new PropelException($msg)));
|
throw (new PropelException('The APPLICATION row cannot be created!', new PropelException($msg)));
|
||||||
}
|
}
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class Sequences extends BaseSequences {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create Sequences Table
|
* Create Sequences Table
|
||||||
*
|
*
|
||||||
* @param type $aData
|
* @param type $aData
|
||||||
* @return type
|
* @return type
|
||||||
* @throws type
|
* @throws type
|
||||||
@@ -46,11 +46,11 @@ class Sequences extends BaseSequences {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Change Sequence with native query
|
* Change Sequence with native query
|
||||||
*
|
*
|
||||||
* @param type $seqName
|
* @param type $seqName
|
||||||
* @param type $seqValue
|
* @param type $seqValue
|
||||||
* @return type
|
* @return type
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function changeSequence($seqName, $seqValue)
|
public function changeSequence($seqName, $seqValue)
|
||||||
{
|
{
|
||||||
@@ -65,22 +65,22 @@ class Sequences extends BaseSequences {
|
|||||||
$rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
|
$rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
|
||||||
return $rs;
|
return $rs;
|
||||||
} catch(Exception $e) {
|
} catch(Exception $e) {
|
||||||
// throw ($e);
|
// throw ($e);
|
||||||
throw new Exception( G::LoadTranslation('ID_ERROR_CHANGE_SEQUENCE_NUMBER'));
|
throw new Exception( G::LoadTranslation('ID_ERROR_CHANGE_SEQUENCE_NUMBER'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lock Sequence Table
|
* Lock Sequence Table
|
||||||
*
|
*
|
||||||
* @return type
|
* @return type
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function lockSequenceTable()
|
public function lockSequenceTable()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$con = Propel::getConnection('workflow');
|
$con = Propel::getConnection('workflow');
|
||||||
$sql = "LOCK TABLES SEQUENCES READ, APPLICATION READ ";
|
$sql = "LOCK TABLES SEQUENCES WRITE, APPLICATION READ ";
|
||||||
|
|
||||||
$stmt = $con->createStatement();
|
$stmt = $con->createStatement();
|
||||||
$rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
|
$rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
|
||||||
@@ -92,13 +92,13 @@ class Sequences extends BaseSequences {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Unlock Sequence Table
|
* Unlock Sequence Table
|
||||||
*
|
*
|
||||||
* @return type
|
* @return type
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function unlockSequenceTable()
|
public function unlockSequenceTable()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$con = Propel::getConnection('workflow');
|
$con = Propel::getConnection('workflow');
|
||||||
$sql = "UNLOCK TABLES ";
|
$sql = "UNLOCK TABLES ";
|
||||||
$stmt = $con->createStatement();
|
$stmt = $con->createStatement();
|
||||||
@@ -106,12 +106,12 @@ class Sequences extends BaseSequences {
|
|||||||
return $rs;
|
return $rs;
|
||||||
} catch(Exeption $e) {
|
} catch(Exeption $e) {
|
||||||
throw ($e);
|
throw ($e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name Exists
|
* Name Exists
|
||||||
*
|
*
|
||||||
* @param type $seqName
|
* @param type $seqName
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*
|
*
|
||||||
@@ -132,7 +132,7 @@ class Sequences extends BaseSequences {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Load Sequences
|
* Load Sequences
|
||||||
*
|
*
|
||||||
* @param type $seqName
|
* @param type $seqName
|
||||||
* @return type
|
* @return type
|
||||||
* @throws type
|
* @throws type
|
||||||
@@ -157,7 +157,7 @@ class Sequences extends BaseSequences {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Update Sequences
|
* Update Sequences
|
||||||
*
|
*
|
||||||
* @param type $fields
|
* @param type $fields
|
||||||
* @return type
|
* @return type
|
||||||
* @throws type
|
* @throws type
|
||||||
@@ -185,7 +185,7 @@ class Sequences extends BaseSequences {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove Sequences
|
* Remove Sequences
|
||||||
*
|
*
|
||||||
* @param type $seqName
|
* @param type $seqName
|
||||||
* @return type
|
* @return type
|
||||||
* @throws type
|
* @throws type
|
||||||
@@ -208,7 +208,7 @@ class Sequences extends BaseSequences {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get new sequece number
|
* Get new sequece number
|
||||||
*
|
*
|
||||||
* @param type $seqName
|
* @param type $seqName
|
||||||
* @return type
|
* @return type
|
||||||
* @throws type
|
* @throws type
|
||||||
|
|||||||
Reference in New Issue
Block a user