4D v13.4

Método base On Exit

Inicio

 
4D v13.4
Método base On Exit

Método base On Exit 


 

Método base On Exit  
Este comando no requiere parámetros

  

El Método base On Exit se llama una vez cuando sale de la base.

Este método se utiliza en los siguientes entornos 4D:

  • 4D en modo local
  • 4D en modo remoto (del lado del cliente)
  • Aplicación 4D compilada y fusionada con 4D Volume Desktop

Nota: el Método base On Exit NO es invocado por 4D Server.

El Método base On Exit es invocado automáticamente por 4D; a diferencia de los métodos de proyecto, usted no puede llamar este método por programación. Sin embargo, puede ejecutarlo desde el editor de métodos. Igualmente puede utilizar subrutinas.

Se sale de una base si:

  • El usuario selecciona el comando Salir del menú Archivo en el entorno Diseño o desde el entorno Aplicación (Quit standard action).
  • Se efectúa una llamada al comando QUIT 4D.
  • Un plug-in 4D hace una llamada al punto de entrada QUIT 4D.

Sin importar cómo se inicie la salida de la base, 4D realiza las siguientes acciones:

  • Si no existe un Método base On Exit, 4D aborta cada proceso en ejecución uno por uno, sin distinción. Si el usuario está introduciendo datos, los registros no se guardarán.
  • Si existe un Método base On Exit, 4D comienza la ejecución de este método en un proceso local creado recientemente. Por lo tanto puede utilizar esta método base para informar a otros procesos, vía comunicación interprocesos, que deben cerrar (entrada de datos) o detener su ejecución. Observe que saldrá eventualmente de 4D, el Método base On Exit puede realizar toda la limpieza o cierre de las operaciones que usted quiera, pero no puede negarse a salir.

El Método base On Exit es perfecto para:

  • Detener los procesos iniciados automáticamente cuando se abre la base.
  • Guardar (localmente, en el disco) preferencias o parámetros a reutilizar al comienzo de la siguiente sesión en el Método base On Startup .
  • Realizar otras acciones automáticamente cada vez que se salga de la base.

Nota: no olvide que el proceso creado por el Método base On Exit es un proceso local/cliente, por lo tanto no puede acceder al archivo de datos. Si el Método base On Exit realiza una consulta o una ordenación, un cliente 4D que está a punto de salir quedará "congelado" y en realidad no saldrá de la aplicación. Si necesita acceder a datos cuando un cliente sale de la aplicación, cree un nuevo proceso global desde el cual el Método base On Exit pueda acceder al archivo de datos. En este caso, asegúrese de que el nuevo proceso termine correctamente antes del final de la ejecución del Método base On Exit (utilizando por ejemplo variables interproceso).

Ejemplo  

El siguiente ejemplo cubre todos los métodos utilizados en una base que sigue los eventos más importantes que ocurren durante una sesión de trabajo y escribe una descripción en un documento de de texto llamado “Diario.”

  • El Método base On Startup inicializa la variable interproceso vbQuit4D, la cual señala los procesos utilizados sin importar si se está saliendo o no de la base. También crea el archivo de diario, si no existe aún.
  ` Método de base On Startup
 C_TEXT(◊vtIPMensaje)
 C_BOOLEAN(◊vbQuit4D)
 ◊vbQuit4D:=False
 
 If(Test path name("Diario")#Is a document)
    $vhDocRef:=Create document("Diario")
    If(OK=1)
       CLOSE DOCUMENT($vhDocRef)
    End if
 End if
 ESCRIBIR DIARIO("Apertura de sesión")
  • El método de proyecto ESCRIBIR DIARIO, utilizado como subrutina por otros métodos, escribe la información que recibe, en el archivo diario:
  ` Método de proyecto ESCRIBIR DIARIO
  ` ESCRIBIR DIARIO ( Texto )
  ` ESCRIBIR DIARIO ( Descripción evento )
 C_TEXT($1)
 C_TIME($vhDocRef)
 
 While(Semaphore("$Diario"))
    DELAY PROCESS(Current process;1)
 End while
 $vhDocRef:=Append document("Diario")
 If(OK=1)
    PROCESS PROPERTIES(Current process;$vsNombreProceso;$vlEstado;$vlTiempo;$vbVisible)
    SEND PACKET($vhDocRef;String(Current date)+Char(9)+String(Current time)+Char(9)
    +String(Current process)+Char(9)+$vsNombreProceso+Char(9)+$1+Char(13))
    CLOSE DOCUMENT($vhDocRef)
 End if
 CLEAR SEMAPHORE("$Diario")

Note que el documento se abre y cierra cada vez. También observe que el uso de un semáforo como “protección de acceso” al documento—no queremos dos procesos tratando de acceder el archivo diario al mismo tiempo.

  • El método de proyecto M_AGREGAR_REGISTROS se ejecuta cuando el comando de menú Agregar registro se selecciona en el entorno Aplicación:
  ` Método de proyecto M_AGREGAR_REGISTROS
 SET MENU BAR(1)
 Repeat
    ADD RECORD([Tabla1];*)
    If(OK=1)
       ESCRIBIR DIARIO("Adición del registro #"+String(Record number([Tabla1]))+" en Tabla1")
    End if
 Until((OK=0)|◊vbQuit4D)

Este método efectúa un bucle hasta que el usuario cancela la entrada de datos o sale de la base.

  • El formulario de entrada para [Tabla 1] incluye el tratamiento de los eventos On Outside Call. De manera que, incluso si un proceso está en entrada de datos, puede salir sin problemas y el usuario puede guardar o no la entrada de datos actual:
  ` Método de formulario [Tabla1];"Entrada"
 Case of
    :(Form event=On Outside Call)
       If(◊vtIPMessage="QUIT")
          CONFIRM("¿Quiere guardar las modificaciones realizadas a este registro?")
          If(OK=1)
             ACCEPT
          Else
             CANCEL
          End if
       End if
 End case
  • El método de proyecto M_QUIT se ejecuta cuando el comando Salir del menú Archivo se selecciona en el entorno Aplicación:
  ` Método de proyecto M_QUIT
 $vlProcessID:=New process("SALIR";32*1024;"$SALIR")

Este método utiliza un truco. Cuando se llama a QUIT 4D, el comando tiene un efecto inmediato. Por lo tanto, el proceso del cual se hace la llamada está en “modo detención” hasta que la base se cierre en realidad. Como este proceso puede ser uno de los procesos en el cual ocurre la entrada da datos, la llamada a QUIT 4D se realiza en un proceso local que empieza sólo con este propósito. Este es el método SALIR:

  ` Método de proyecto SALIR
 CONFIRM("¿Está seguro de que quiere salir?")
 If(OK=1)
    ESCRIBIR DIARIO("Salida de la base")
    QUIT 4D
  ` QUIT 4D tiene un efecto inmediato, ninguna línea de código a continuación se ejecutará
  ` ...
 End if
  • Finalmente, he aquí el Método base On Exit el cual indica a todos los procesos de usuario abiertos que “¡Es hora de salir!”. La variable <>vbQuit4D toma el valor True y envía mensajes interproceso a los procesos de usuario que están realizando entrada de datos:
  ` Método de base On Exit
 ◊vbQuit4D:=True
 Repeat
    $vbHecho:=True
    For($vlProceso;1;Count tasks)
       PROCESS PROPERTIES($vlProceso;$vsNombreProceso;$vlEstado;$vlTiempo;$vbVisible)
       If(((($vsNombreProceso="ML_@")|($vsNombreProceso="M_@")))&($vlEstado>=0))
          $vbHecho:=False
          ◊vtIPMensaje:="SALIR"
          BRING TO FRONT($vlProceso)
          CALL PROCESS($vlProceso)
          $vhInicio:=Current time
          Repeat
             DELAY PROCESS(Current process;60)
          Until((Process state($vlProceso)<0)|((Current time-$vhInicio)>=?00:01:00?))
       End if
    End for
 Until($vbHecho)
 ESCRIBIR DIARIO("Cierre de sesión")

Nota: Los procesos que comienzan con "ML_..." o "M_..." son iniciados por comandos de menú para los cuales la propiedad Nuevo proceso ha sido seleccionada. En este ejemplo, estos son los procesos iniciados cuando se selecciona el comando de menú Agregar registro.

La prueba (Current time-$vhInicio)>=?00:01:00? permite al método de base salir del bucle “en espera de otro proceso” si el otro proceso no actúa de inmediato.

El siguiente es un ejemplo típico de un archivo de diario producido por la base:

2/6/03 15:47:25 1Apertura de sesión proceso principal
2/6/03 15:55:43 5 ML_1Adición del registro #23 en Tabla1
2/6/03 5:55:46 5 ML_1Adición del registro #24 en Tabla1
2/6/03 15:55:54 6 $DO_QUITSalir de la base
2/6/03 15:55:58 7 $xxCerrar sesión

Nota: $xx es el nombre del proceso local iniciado por 4D para ejecutar el Método base On Exit.

 
PROPIEDADES 

Producto: 4D
Tema: Métodos base

 
INDEX

Lista alfabética de los comandos

 
HISTORIA 

Creado por:

 
VER TAMBIÉN 

Método base On Startup
QUIT 4D