BUG 12029 "Sent By column blank in sub process" SOLVED

- "Sent By" column blank in sub process
- Problema:
  Al crear un Proceso y un Sub Proceso, cuando se inicia una tarea del Proceso Padre y se deriva a la tarea del Sub Proceso,
  en el Inbox el usuario autorizado en el Sub Proceso de la tarea al visualizar la columna "Sent By" no indica quien
  derivo la tarea mostrando siempre vacia.

- Solucion:
  Cuando se crea un Proceso y Sub Proceso, al iniciar la tarea del Proceso Padre y al derivar el caso a la tarea del
  Sub Proceso, en el Inbox el usuario autorizado de esa tarea visualizara la columna "Sent By" con el usuario quien derivo
  el caso.
  - Se ha creado el trigger SUB_APPLICATION_INSERT para la tabla SUB_APPLICATION, ya que en este punto se crea las
    delegaciones del Sub Proceso.
    El trigger corrige el campo PREVIOUS_USR_UID de la tabla APP_CACHE_VIEW que siempre esta vacio, esto cuando la delegacion
    es de un Sub Proceso.
  - Se ha añgo SQL al archivo "app_cache_view_insert.sql" para corregir el campo en conflicto "APP_CACHE_VIEW.PREVIOUS_USR_UID",
    ya que este SQL es utilizado para reconstruir la tabla APP_CACHE_VIEW, esto por ejemplo cuando se hace el "Build Cache"
    que esta en ADMIN>Settings>CasesListCacheBuilder

    Disponible para la version 2.5.2
This commit is contained in:
Luis Fernando Saisa Lopez
2013-09-25 17:24:04 -04:00
parent 6a4d7513de
commit 7a13688b83
6 changed files with 94 additions and 3 deletions

View File

@@ -488,6 +488,7 @@ class workspaceTools
$triggers[] = $appCache->triggerAppDelegationUpdate($lang, $checkOnly);
$triggers[] = $appCache->triggerApplicationUpdate($lang, $checkOnly);
$triggers[] = $appCache->triggerApplicationDelete($lang, $checkOnly);
$triggers[] = $appCache->triggerSubApplicationInsert($lang, $checkOnly);
$triggers[] = $appCache->triggerContentUpdate($lang, $checkOnly);
if ($fill) {

View File

@@ -1547,6 +1547,46 @@ class AppCacheView extends BaseAppCacheView
return G::LoadTranslation('ID_EXIST');
}
public function triggerSubApplicationInsert($lang, $recreate = false)
{
$cnn = Propel::getConnection("workflow");
$stmt = $cnn->createStatement();
$rs = $stmt->executeQuery("SHOW TRIGGERS", ResultSet::FETCHMODE_ASSOC);
$found = false;
while ($rs->next()) {
$row = $rs->getRow();
if (strtolower($row["Trigger"] == "SUB_APPLICATION_INSERT") && strtoupper($row["Table"]) == "SUB_APPLICATION") {
$found = true;
}
}
if ($recreate) {
$rs = $stmt->executeQuery("DROP TRIGGER IF EXISTS SUB_APPLICATION_INSERT");
$found = false;
}
if (!$found) {
$filenameSql = $this->pathToAppCacheFiles . "triggerSubApplicationInsert.sql";
if (!file_exists($filenameSql)) {
throw (new Exception("file triggerSubApplicationInsert.sql doesn't exist"));
}
$sql = file_get_contents($filenameSql);
$sql = str_replace("{lang}", $lang, $sql);
$stmt->executeQuery($sql);
return G::LoadTranslation("ID_CREATED");
}
return G::LoadTranslation("ID_EXIST");
}
/**
* Retrieve the SQL code to create the APP_CACHE_VIEW triggers.
*
@@ -1559,6 +1599,7 @@ class AppCacheView extends BaseAppCacheView
'triggerApplicationUpdate.sql',
'triggerAppDelegationUpdate.sql',
'triggerAppDelegationInsert.sql',
"triggerSubApplicationInsert.sql",
'triggerContentUpdate.sql'
);

View File

@@ -753,7 +753,9 @@ class Installer extends Controller
$this->mysqlQuery( @file_get_contents( PATH_HOME . 'engine/methods/setup/setupSchemas/triggerAppDelegationUpdate.sql' ) );
$this->mysqlQuery( @file_get_contents( PATH_HOME . 'engine/methods/setup/setupSchemas/triggerApplicationUpdate.sql' ) );
$this->mysqlQuery( @file_get_contents( PATH_HOME . 'engine/methods/setup/setupSchemas/triggerApplicationDelete.sql' ) );
$this->mysqlQuery(@file_get_contents(PATH_HOME . "engine/methods/setup/setupSchemas/triggerSubApplicationInsert.sql"));
$this->mysqlQuery( @file_get_contents( PATH_HOME . 'engine/methods/setup/setupSchemas/triggerContentUpdate.sql' ) );
$this->mysqlQuery( "INSERT INTO `CONFIGURATION` (
`CFG_UID`,
`CFG_VALUE`
@@ -827,6 +829,9 @@ class Installer extends Controller
//APPLICATION DELETE
$res = $appCache->triggerApplicationDelete( $lang, true );
//SUB_APPLICATION INSERT
$res = $appCache->triggerSubApplicationInsert($lang, false);
//CONTENT UPDATE
$res = $appCache->triggerContentUpdate( $lang, true );
@@ -1038,6 +1043,7 @@ class Installer extends Controller
$this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerAppDelegationUpdate.sql' ) );
$this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationUpdate.sql' ) );
$this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerApplicationDelete.sql' ) );
$this->mysqlQuery(@file_get_contents(PATH_HOME . "engine/methods/setup/setupSchemas/triggerSubApplicationInsert.sql"));
$this->mssqlQuery( @file_get_contents( PATH_HOME . 'engine/plugins/enterprise/data/triggerContentUpdate.sql' ) );
$this->mssqlQuery( "INSERT INTO CONFIGURATION (
CFG_UID,
@@ -1366,7 +1372,7 @@ class Installer extends Controller
$value = array(
'login_defaultLanguage' => "pt-BR",
"dateFormat" => 'd \d\e F \d\e Y'
);
);
$value = serialize($value);
$query = "INSERT INTO CONFIGURATION (CFG_UID, CFG_VALUE) VALUES ('ENVIRONMENT_SETTINGS', '".mysql_real_escape_string($value)."')";

View File

@@ -178,6 +178,9 @@ switch ($request) {
$res = $appCache->triggerApplicationDelete( $lang, false );
$result->info[] = array ('name' => G::LoadTranslation ( 'ID_CACHE_BUILDER_TRIGGER_APPLICATION_DELETE' ),'value' => $res);
//SUB_APPLICATION INSERT
$res = $appCache->triggerSubApplicationInsert($lang, false);
//CONTENT UPDATE
$res = $appCache->triggerContentUpdate( $lang, false );
$result->info[] = array ("name" => G::LoadTranslation ( 'ID_CACHE_BUILDER_TRIGGER_CONTENT_UPDATE' ),"value" => $res);
@@ -237,12 +240,13 @@ switch ($request) {
$res = $appCache->triggerApplicationDelete( $lang, true );
//$result->info[] = array ('name' => 'Trigger APPLICATION DELETE', 'value'=> $res);
//SUB_APPLICATION INSERT
$res = $appCache->triggerSubApplicationInsert($lang, false);
//CONTENT UPDATE
$res = $appCache->triggerContentUpdate( $lang, true );
//$result->info[] = array("name" => "Trigger CONTENT UPDATE", "value" => $res);
//build using the method in AppCacheView Class
$res = $appCache->fillAppCacheView( $lang );
//$result->info[] = array ('name' => 'build APP_CACHE_VIEW', 'value'=> $res);

View File

@@ -42,7 +42,17 @@ SELECT
APPLICATION.APP_NUMBER,
APPLICATION.APP_STATUS,
APP_DELEGATION.USR_UID,
APP_LAST_USER.USR_UID,
IF (
APP_DELEGATION.DEL_PREVIOUS = 0 AND (SELECT SUBAPP.APP_UID FROM SUB_APPLICATION AS SUBAPP WHERE SUBAPP.APP_UID = APP_DELEGATION.APP_UID LIMIT 1) IS NOT NULL,
(SELECT APPDEL2.USR_UID
FROM SUB_APPLICATION AS SUBAPP, APP_DELEGATION AS APPDEL1, APP_DELEGATION AS APPDEL2
WHERE SUBAPP.APP_UID = APP_DELEGATION.APP_UID AND
SUBAPP.APP_PARENT = APPDEL1.APP_UID AND SUBAPP.DEL_INDEX_PARENT = APPDEL1.DEL_INDEX AND
APPDEL1.APP_UID = APPDEL2.APP_UID AND APPDEL1.DEL_PREVIOUS = APPDEL2.DEL_INDEX
LIMIT 1
),
APP_LAST_USER.USR_UID
) AS PREVIOUS_USR_UID,
APP_DELEGATION.TAS_UID,
APP_DELEGATION.PRO_UID,
substring(APP_DELEGATION.DEL_DELEGATE_DATE,1,19),

View File

@@ -0,0 +1,29 @@
CREATE TRIGGER SUB_APPLICATION_INSERT BEFORE INSERT ON SUB_APPLICATION
FOR EACH ROW
BEGIN
DECLARE PREVIOUS_USR_UID VARCHAR(32);
SET @PREVIOUS_USR_UID = '';
SET @PREVIOUS_USR_UID = (
SELECT APPDEL2.USR_UID
FROM APP_DELEGATION AS APPDEL1, APP_DELEGATION AS APPDEL2
WHERE APPDEL1.APP_UID = NEW.APP_PARENT AND APPDEL1.DEL_INDEX = NEW.DEL_INDEX_PARENT AND
APPDEL1.APP_UID = APPDEL2.APP_UID AND APPDEL1.DEL_PREVIOUS = APPDEL2.DEL_INDEX
LIMIT 1
);
IF (@PREVIOUS_USR_UID IS NULL) THEN
SET @PREVIOUS_USR_UID = '';
END IF;
-- Update record in APP_CACHE_VIEW
UPDATE APP_CACHE_VIEW
SET PREVIOUS_USR_UID = @PREVIOUS_USR_UID
WHERE APP_UID = NEW.APP_UID AND DEL_INDEX = (SELECT APPDEL.DEL_INDEX
FROM APP_DELEGATION AS APPDEL
WHERE APPDEL.APP_UID = NEW.APP_UID AND APPDEL.DEL_PREVIOUS = 0
LIMIT 1
);
END