![]() |
Problema con los Post_Events
Hola a todos
Espero poder recibir ayuda de cualquiera que tenga un poquito de tiempo y pueda dedicarlo a entender el problema que tengo. Es un caso curioso que me trae de cabezas con el tema. Las condiciones de trabajo son las siguientes: Delphi 5 Firebird 1.0 IB_Objects Con todo esto tengo una aplicación Cliente Servidora bastante grande, pero el caso que me está presentando el problema está relacionado fundamentalmente con una agenda. El objetivo es que cada vez que un usuario crea, edita, elimina o mueve una cita en la agenda de un día a otro, se envía un POST_EVENT para que todas las aplicaciones que tengan abiertas la agenda y con ayuda de una tabla auxiliar donde se guarda que día o días de la agenda son los implicados en la actualización, puedan recibir el evento y refrescar la agenda si se encuentran posicionados en uno de los días modificados. Esto es así para evitar tener que estar refrescando constantemente la agenda en aquellos clientes que no estén visualizando ninguno de los días involucrados en la última actualización, ya que si el usuario estuviera en un día distinto a los modificados y fuera a uno de ellos, al entar en ese día, se cargan todas las citas y las últimas modificaciones ya serán cargadas también. El problema se presenta ocasionalmente ( no siempre ) y consiste en que deja de funcionar correctamente. Osea que la aplicación cliente no recibe los eventos enviados desde el servidor. He detectado que se restablecen todas las condiciones iniciales si detengo e inicio nuevamente el servicio de interbase en el servidor y después de hacer un backup y restore de la base de datos. Os pongo un fragmento de como tengo programado todo lo relacionado con el componente TIB_Event ( IB_Objects ) en toda la aplicación para tener más claro todos los aspectos que pueden intervenir en el fallo aleatorio que presento. En el DFM del Datamodule: Las propiedaes que están establecidas en tiempo de diseño son: object Eventos: TIB_Events AlertOnRegister = False IB_Connection = DSTOMAW Events.Strings = ( 'Instalacion' 'IniciarCaja' 'PlantillaTTO' 'LoadCitas' 'Desbloquear_Reservas_Huecos' 'Tips') OnEventAlert = EventosEventAlert Left = 340 Top = 8 end Nota: Existen 6 Eventos que pueden ser invocados desde el servidor, cada uno de ellos obviamente son para un uso específico. En el caso que nos atañe los dos que hacen refrescar la agenda son LoadCitas y Desbloquear_Reservas_Huecos. En el evento FormShow del Formulario principal de las aplicaciones Clientes se ejecuta la siguiente sentencia: DM.Eventos.RegisterEvents; En el evento FormDestroy del Formulario principal de las aplicaciones Clientes se ejecuta la siguiente sentencia: DM.Eventos.UnregisterEvents; El evento EventAlert del componente TIB_Events tiene programado lo siguiente: procedure TDM.EventosEventAlert(Sender: TObject; AEventName: String; AEventCount: Integer); var FRM : TForm; begin // Si hay que refrescar los cambios hechos en la Instalación/Configuración de la aplicación if UpperCase(AEventName) = UpperCase('Instalacion') then ... // Verificar si la Caja está iniciada o no else if UpperCase(AEventName) = UpperCase('IniciarCaja') then ... // Verificar si hay que refrescar la información de la Plantilla de TTO else if UpperCase( AEventName ) = UpperCase( 'PlantillaTTO' ) then ... // Verificar si hay que refrescar la Agenda else if ( UpperCase(AEventName) = UpperCase('LoadCitas') ) or ( UpperCase(AEventName) = UpperCase('Desbloquear_Reservas_Huecos') ) then begin if FMDIChieldLoaded( 'FRMAgenda', FRM ) then if FRM <> Nil then TFRMAgenda( FRM ).AgendaEventAlert( AEventName ); end // Verificar si hay que refrescar los Tips de la aplicación else if ( UpperCase( AEventName ) = UpperCase( 'Tips' ) ) then ... end; Bueno hasta aquí todo el problema que tengo, que no es poco, porque ahora mismo los clientes deben estar cambiando de día cada vez que hacen alguna modificación para refrescar los datos y si los ha hecho otro usuario, no se les refresca la agenda y con ello el consiguiente engorro de tratar de citar en un hueco que ya ha sido ocupado por otra cita y que ellos no están viendo ese hueco ocupado, porque la agenda no se les refresca. No me queda más que agredecer anticipadamente a quién pueda darme un empujón en la solución de mi problema. |
Soy yo mismo que he agregado algo nuevo a esta duda que creo explicará un poco más lo que me está pasando.
He hecho las pruebas desde un Servidor y un puesto Cliente y es cuando se me presentan todos los problemas antes mencionados. He estado haciendo pruebas de mejorar en algunos lugares algunas transacciones que tenía y el resultado es aún peor, porque después de esos cambios, cuando intento probarlo a traves de la red, no logro nunca que se ejecuten los Post_Events. Lo más curioso es que he hecho las pruebas con un solo ordenador trabajando el como Servidor y como Cliente y no se me presenta ningún problema. OSEA que todo funciona como debeser y los POST_EVENTS funcionan No sé si es un error de la red, de que pueda haber alguna diferencia entre los Firebird que corren en el servidor y en el cliente. Espero vuestras respuestas. Un saludo |
La franja horaria es GMT +2. Ahora son las 12:47:53. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi