PM-475 "16052 - Revisar problema de self-service con Value-based de grupos" SOLVED
Issue:
El CasesList es lento cuando existen casos con tipo de asignacion "Self Service Value Based Assignment"
Cause:
Para todos los casos se esta verificando si su asignacion es de tipo "Self Service Value Based Assignment"
Solution:
- Se ha creado una nueva tabla "APP_ASSIGN_SELF_SERVICE_VALUE", en la misma se registraran los casos
con asignacion "Self Service Value Based Assignment"
- Se ha agregado la opcion "database-generate-self-service-by-value" al comando "./processmaker", para poder
generar los registros de la nueva tabla.
Ej: $ ./processmaker database-generate-self-service-by-value myWorkspace
This commit is contained in:
@@ -330,61 +330,47 @@ class AppCacheView extends BaseAppCacheView
|
||||
|
||||
public function getSelfServiceCasesByEvaluate($userUid)
|
||||
{
|
||||
$cases = array();
|
||||
try {
|
||||
G::LoadClass("groups");
|
||||
|
||||
//check groups assigned to SelfService task
|
||||
G::LoadClass('groups');
|
||||
$group = new Groups();
|
||||
$aGroups = $group->getActiveGroupsForAnUser($userUid);
|
||||
$arrayApplicationUid = array();
|
||||
|
||||
$c = new Criteria();
|
||||
$c->clearSelectColumns();
|
||||
$c->addSelectColumn(TaskPeer::TAS_UID);
|
||||
$c->addSelectColumn(TaskPeer::PRO_UID);
|
||||
$c->addSelectColumn(TaskPeer::TAS_GROUP_VARIABLE);
|
||||
$c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN);
|
||||
$c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN);
|
||||
$c->add(ProcessPeer::PRO_STATUS, 'ACTIVE');
|
||||
$c->add(TaskPeer::TAS_ASSIGN_TYPE, 'SELF_SERVICE');
|
||||
$c->add(TaskPeer::TAS_GROUP_VARIABLE, '', Criteria::NOT_EQUAL);
|
||||
$rs = TaskPeer::doSelectRS($c);
|
||||
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$rs->next();
|
||||
//Get APP_UIDs
|
||||
$group = new Groups();
|
||||
|
||||
if ($rs->getRecordCount() > 0) {
|
||||
if (!class_exists('Cases')) {
|
||||
G::loadClass('case');
|
||||
}
|
||||
$caseInstance = new Cases();
|
||||
while ($row = $rs->getRow()) {
|
||||
$tasGroupVariable = str_replace(array('@', '#'), '', $row['TAS_GROUP_VARIABLE']);
|
||||
$c2 = new Criteria();
|
||||
$c2->clearSelectColumns();
|
||||
$c2->addSelectColumn(AppDelegationPeer::APP_UID);
|
||||
$c2->addSelectColumn(ApplicationPeer::APP_DATA);
|
||||
$c2->addJoin(AppDelegationPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN);
|
||||
$c2->add(AppDelegationPeer::TAS_UID, $row['TAS_UID']);
|
||||
$c2->add(AppDelegationPeer::USR_UID, '');
|
||||
$c2->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN');
|
||||
$rs2 = AppDelegationPeer::doSelectRS($c2);
|
||||
$rs2->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
$rs2->next();
|
||||
while ($row2 = $rs2->getRow()) {
|
||||
$caseData = $caseInstance->unserializeData($row2['APP_DATA']);
|
||||
$arrayGroup = $group->getActiveGroupsForAnUser($userUid); //Get Groups of User
|
||||
|
||||
if (isset($caseData[$tasGroupVariable])) {
|
||||
if (trim($caseData[$tasGroupVariable]) != '') {
|
||||
if (in_array(trim($caseData[$tasGroupVariable]), $aGroups)) {
|
||||
$cases[] = $row2['APP_UID'];
|
||||
}
|
||||
}
|
||||
}
|
||||
$rs2->next();
|
||||
if (count($arrayGroup) > 0) {
|
||||
$criteria = new Criteria("workflow");
|
||||
|
||||
$criteria->setDistinct();
|
||||
$criteria->addSelectColumn(AppAssignSelfServiceValuePeer::APP_UID);
|
||||
|
||||
$arrayCondition = array();
|
||||
$arrayCondition[] = array(AppAssignSelfServiceValuePeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::EQUAL);
|
||||
$arrayCondition[] = array(AppAssignSelfServiceValuePeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX, Criteria::EQUAL);
|
||||
$arrayCondition[] = array(AppAssignSelfServiceValuePeer::TAS_UID, AppDelegationPeer::TAS_UID, Criteria::EQUAL);
|
||||
$criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN);
|
||||
|
||||
$criteria->add(AppDelegationPeer::USR_UID, "", Criteria::EQUAL);
|
||||
$criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", Criteria::EQUAL);
|
||||
$criteria->add(AppAssignSelfServiceValuePeer::GRP_UID, $arrayGroup, Criteria::IN);
|
||||
|
||||
$rsCriteria = AppAssignSelfServiceValuePeer::doSelectRS($criteria);
|
||||
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||
|
||||
while ($rsCriteria->next()) {
|
||||
$row = $rsCriteria->getRow();
|
||||
|
||||
$arrayApplicationUid[] = $row["APP_UID"];
|
||||
}
|
||||
$rs->next();
|
||||
}
|
||||
|
||||
//Return
|
||||
return $arrayApplicationUid;
|
||||
} catch (Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
return $cases;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1210,7 +1196,7 @@ class AppCacheView extends BaseAppCacheView
|
||||
$rs1 = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
|
||||
$rs1->next();
|
||||
$row = $rs1->getRow();
|
||||
|
||||
|
||||
if ($row['PRIVILEGE_TYPE'] == 'SUPER') {
|
||||
$super = G::LoadTranslation('ID_TRUE'); //true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user