Hola!
Les comento la idea y luego el problema: estoy queriendo hacer que en el instalador de nuestra aplicación se dispare, al finalizar, la actualización del esquema de auditoría y realizar una migración de datos.
Actualización: ver solución Crear/actualizar el esquema auditoria desde el instalador - nº 5 por svier - Toba - Desarrollo - Foro Comunidad SIU
Algunas consideraciones:
- existe en el proyecto la clase diaguita_modelo con la función “diaguita_crear_auditoria” (para manejar las peculiaridades de nuestro esquema de auditoría):
function diaguita_crear_auditoria()
{
// si queremos que la tabla este auditada con logs, incluir su prefijo acá.
$prefijos = array(
'anx_',
'mcc_',
'mme_',
'par_',
'sau_',
'scp_',
);
$mensaje = "(Tablas a procesar: " . implode(', ', $prefijos) . ")";
$this->get_manejador_interface()->mensaje($mensaje, true);
foreach ($prefijos as $prefijo) {
$this->crear_auditoria(null, $prefijo);
}
}
- se modificó momentaneamente la clase toba_lib (para acceder a ciertas funciones) y se agregó el método
function regenerar_esquema_auditoria($proyecto)
{
$this->cargar_entorno_toba();
$proyecto = $this->entorno_toba->get_instancia('produccion')->get_proyecto($proyecto);
$proyecto->get_aplicacion_modelo()->diaguita_crear_auditoria();
}
- existe en el proyecto la clase diaguita_manejador_instalacion en la cual existe la función “migrar_negocio” que contiene
function migrar_negocio($version, $es_base_nueva)
{
.....
try{
db_manager::abrir_transaccion($this->conexion);
$toba_lib = new toba_lib();
$proyecto = inst::configuracion()->get('proyecto', 'id');
$toba_lib->regenerar_esquema_auditoria($proyecto);
db_manager::cerrar_transaccion($this->conexion);
}catch(Exception $e){
db_manager::abortar_transaccion($this->conexion);
throw new Exception('Error en la migración de datos.'.$e->getMessage());
}
}
Como se ve, intento acceder desde el instalador de toba a la instancia personalizada para el proyecto de la clase “toba_aplicacion_modelo_base”. Todo parece funcionar bien, excepto que al depurar, llego a la línea
$proyecto->get_aplicacion_modelo()->diaguita_crear_auditoria();
y me arroja el siguiente error:
Error en la migración de datos.SQLSTATE[42P01]: Undefined table: 7 ERROR: no existe la relación «apex_fuente_datos» LINE 9: FROM apex_fuente_datos ^
y con mas detalles del PostgreSQL:
2013-01-10 10:43:39 ART ERROR: no existe la relación «apex_fuente_datos» en carácter 187 2013-01-10 10:43:39 ART SENTENCIA: SELECT proyecto, fuente_datos, descripcion as descripcion_corta, descripcion, schema, permisos_por_tabla, tiene_auditoria FROM apex_fuente_datos WHERE ( proyecto = 'diaguita' ) ORDER BY 2
Depurando, se detecta que “toba_info_editores::get_fuentes_datos()” es la función que intenta ejecutar la consulta que falla. En el instalador, el schema activo de la conexión resulta ser “toba_diaguita” al momento de instanciar toba_lib, pero al momento de llegar a esta función parece que no…
¿Sugerencias?