Ver Mensaje Individual
  #1  
Antiguo 19-10-2005
Aldo Aldo is offline
Miembro
 
Registrado: ene 2004
Posts: 46
Reputación: 0
Aldo Va por buen camino
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.
Responder Con Cita