Hola como estan? paso a contar mi problema, en una operación de una aplicación en toba 1.4.8 tengo un datos_tabla el cual fue extendido para que al insertar y/o actualizar se guarde la fecha actual en el campo “fecha_modificacion” aunque haya otras formas de hacerlo.
El problema es que al insertar esta funcionando pero en la modificación no.
Probando vi que la función “evt__pre_update” se ejecuta y en la función se actualiza correctamente el valor de “fecha_modificacion” pero ese valor actualizado no se guarda en la tabla.
Probe lo mismo en una copia que tengo de la misma aplicación pero en toba 1.3.7 y ahi funciona tanto al insertar como en la modificación.
Pregunta: puede ser un problema de toba 1.4.8? adjunto al final el código del datos_tabla extendido.
Bueno eso es todo, desde ya muchas gracias y muchos saludos.
<?php
require_once('lib/fecha.php');
require_once('nucleo/componentes/persistencia/toba_ap_tabla_db.php');
class ap_instalaciones extends toba_ap_tabla_db
{
protected $fecha_hoy;
function ini()
{
parent::ini();
$this->fecha_hoy = new fecha();
$this->activar_baja_logica('fecha_baja', $this->fecha_hoy->get_fecha_db());
}
function evt__pre_insert($id_registro)
{
$this->datos[$id_registro]['fecha_modificacion'] = $this->fecha_hoy->get_fecha_db();
}
function evt__pre_update($id_registro)
{
$this->datos[$id_registro]['fecha_modificacion'] = $this->fecha_hoy->get_fecha_db();
}
}
?>
en la version 1.4 se agrego al metodo ejecutar_sql_update del administrador de persistencia una funcion para determinar los cambios reales de datos y asi no modificar columnas de mas.
Lo que se me ocurre es que dicha funcion no este tomando la modificacion de la variable fecha_modificacion y entonces se este excluyendo de la SQL.
Podrias enviarme una captura de la definicion de columnas del datos_tabla?.
Hola Richard como estas? el campo “fecha_modificacion” en la tabla es del tipo date y en la definición del datos_tabla figura con el tipo “Fecha”.
Según lo que comentaste estube viendo la función “ejecutar_sql_update” y encontre que en $registro se carga bien o sea aparece bien el valor de la fecha modificada pero más abajo en la variable $cambios_reales al llamar la función “get_cambios_fila” en esta otra función al cargar la variable $datos_nuevos esta leyendo los datos sin la modificación o sea el valor que tenia ese campo antes de la ejecución de la función “evt__pre_update” por lo tanto no esta encontrando que se modifico ese campo.
Hola… tudu bem, tudu legal… (ahora soy un corsario de la AFIP XD)
Lo que te esta estorbando es un detalle tan minimo que al vuelo primero no note, pero cuando lei tu ultimo post y fui al codigo me di cuenta de algo minusculo pero la causa de todo el problema creo yo, en tu codigo vos definiste los metodos como:
function evt__pre_insert($id_registro)
{
$this->datos[$id_registro]['fecha_modificacion'] = $this->fecha_hoy->get_fecha_db();
}
function evt__pre_update($id_registro)
{
$this->datos[$id_registro]['fecha_modificacion'] = $this->fecha_hoy->get_fecha_db();
}
el detalle esta en lo siguiente… la variable a la cual deberias acceder para modificar los datos del DT es ‘$this->datos’… asi como lo ves … la diferencia… un simple y venenoso underscore '’, putea todo lo que quieras no hay ningun problema XD, creo que con esa modificacion ya deberias salir andando.
Hola Richard como estas? probe de nuevo según tus comentarios y sigue sin funcionar.
Me fije de nuevo y en “toba_ap_tabla_db” la variable es “datos” (la que modifico con el código que pase) en cambio en “toba_datos_tabla” la variables es “_datos”.
Por lo que vi, yo modifico la variable “datos” del objeto “toba_ap_tabla_db” y en la función “get_cambios_fila” (que esta en el objeto “toba_datos_tabla”) ahi evalua los cambios contra la variable “_datos”, por lo que me parece que por eso no encuentra ni va a encontrar nunca el cambio que hago.
Mi problema es solo con la función “evt__pre_update” porque la función “evt__pre_insert” funciona bien.
Bueno espero tus comentarios al respecto, desde ya muchas gracias y muchos saludos.
efectivamente tenias razon en tu apreciacion, hay un bug en dicha funcion, al momento de hacer la comparacion para obtener los cambios unicamente de aquellas columnas modificadas nos olvidamos de contemplar aquellas que se modifican por los evt__pre_update. Ya subi un fix al trunk y lo estoy portando a la rama 1.4, de modo que podes actualizarte desde alli.
De todas formas ya voy avisando que para la version 1.6 el manejo entre el administrador de persistencia y el datos_tabla va a cambiar asi que vamos a estar revisando esto nuevamente y lo mas probable es que cambie la forma de llevar adelante los evt__pre_xxxx en gral.