GET DOCUMENT PROPERTIES

4D - Documentation   Français   English   German   Español   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 6.0


GET DOCUMENT PROPERTIES (documento; bloqueado; invisible; creado el; creado a las; modificado el; modificado a las)

ParámetroTipoDescripción
documentoAlfaNombre del documento
bloqueadoBooleanoBloqueado (True) o no bloqueado (False)
invisibleBooleanoInvisible (True) o visible (False)
creado elFechaFecha de creación
creado a lasHoraHora de creación
modificado elFechaFecha de la última modificación
modificado a lasHoraHora de la última modificación

Descripción

El comando GET DOCUMENT PROPERTIES devuelve información sobre el documento cuyo nombre o ruta se pasa en documento.

Después de la llamada:

bloqueado devuelve True si el documento está bloqueado. Un documento bloqueado no puede modificarse.

invisible devuelve True si el documento está oculto.

creado el y creado a las devuelven la fecha y hora de creación del documento.

modificado el y modificado a las devuelven la fecha y hora de la última modificación del documento.

Ejemplo

Usted ha creado una base de documentación y quiere exportar todos los registros creados en la base a un documento en disco. Como la base se actualiza regularmente, usted quiere escribir un algoritmo de exportación que cree o recree cada documento en el disco si el documento no existe o si el registro correspondiente ha sido modificado después de que el documento fue grabado por última vez. Por lo tanto, usted debe comparar la fecha y la hora de la modificación del documento (si la hay) con su registro correspondiente. Para ilustrar este ejemplo, utilizamos la siguiente tabla:

En lugar de guardar una fecha y una hora en cada registro, puede guardar un "marcador" que exprese el número de segundos transcurridos entre una fecha anterior arbitraria (en este ejemplo utilizamos el 1 de enero de 1995 a las 00:00:00) y la fecha y la hora en la que se guardó el registro.

En nuestro ejemplo, el campo [Documentos]Marcador creacion contiene el marcador de creación del registro y el campo [Documentos]Marcador modificación contiene el marcador de la última modificación del registro.

El método de proyecto marcadorTiempos calcula el marcador de tiempo para una fecha y horas específicas o para la fecha y hora actual si no se pasan parámetros:

      ` Método de proyecto marcadorTiempos
      ` marcadorTiempos { ( fecha; hora ) } -> Entero largo
      ` marcadorTiempos { ( fecha; hora ) } -> Número de segundos desde el 1 de enero de 1995

   C_DATE($1;$vdFecha)
   C_TIME($2;$vhHora)
   C_LONGINT($0)

   If (Count parameters=0)
      $vdFecha:=Current date
      $vhTime:=Current time
   Else 
      $vdFecha:=$1
      $vhHora:=$2
   End if 
   $0:=(($vdFecha-!01/01/95!)*86400)+$vhHora

Nota: Utilizando este método, puede codificar todas las fechas y las horas desde 01/01/95 a las 00:00:00 a 01/19/2063 a las 03:14:07 lo que cubre el intervalo de enteros largos de 0 a 2^31 menos uno.

Por el contrario, los métodos de proyecto Marcador fecha y Marcador hora permiten extraer la fecha y la hora almacenadas en un marcador:

      ` Método de proyecto Marcador fecha
      ` Marcador fecha ( Entero largo) -> Fecha
      ` Marcador fecha ( Marcador) -> Fecha extraída

   C_DATE($0)
   C_LONGINT($1)

   $0:=!01/01/95!+($1\86400)

      ` Método de proyecto Marcador hora
      ` Marcador hora (Entero largo ) -> Hora
      ` Marcador hora ( Marcador) -> Hora extraída

   C_TIME($0)
   C_LONGINT($1)

   $0:=Time(Time string(†00:00:00†+($1%86400)))

Para asegurar que los marcadores de los registros se actualicen correctamente, sin importar la manera en que son creados o modificados, debemos aplicar esta regla utilizando el trigger de la tabla [Documentos]:

      ` Trigger de la tabla [Documentos]

   Case of 
      : (Database event=Save New Record Event)
         [Documentos]Marcador creación:=marcadorTiempos  
         [Documentos]Marcador modificacion:=marcadorTiempos  
      : (Database event=Save Existing Record Event)
         [Documentos]Marcador modificacion:=marcadorTiempos  
   End case 

Una vez implementado en la base, tenemos todo lo que necesitamos para escribir el método de proyecto CREAR DOCUMENTACION. Utilizamos GET DOCUMENT PROPERTIES y SET DOCUMENT PROPERTIES para administrar la fecha y hora de creación y modificación de los documentos.


      ` Método de proyecto 
CREAR DOCUMENTACION



   C_STRING(255;$vsRuta;$vsDocRutaNombre;$vsDocNombre)
   C_LONGINT($vlDoc)
   C_BOOLEAN($vbOnWindows;$vbDoIt;$vbBloqueados;$vbInvisible)
   C_TIME($vhDocRef;$vhCreadoalas;$vhModificadoalas)
   C_DATE($vdCreadoen;$vdModificadoen)

   If (Application type=4D Remote Mode)
         ` Si se está corriendo 4D Client, guarda los documentos
         ` localmente en el equipo Cliente donde se encuentra 4D Client
      $vsRuta:=Long name to path name (Application file)
   Else 
         ` De lo contrario, guardamos los documentos donde se ubica el archivo de datos
      $vsRuta:=Long name to path name (Data file)
   End if 
      ` Guardar los documentos en un directorio que llamamos arbitrariamente "Documentación"
   $vsRuta:=$vsRuta+"Documentación"+Char(Directory symbol )
      ` Si este directorio no existe, lo crea
   If (Test path name($vsRuta) # Is a directory)
      CREATE FOLDER($vsRuta)
   End if 
      ` Establecer la lista de documentos existentes
      ` porque tenemos que borrar los obsoletos, en otras palabras
      ` los documentos cuyos registros correspondientes han sido borrados.
   ARRAY STRING(255;$asDocumento;0)
   DOCUMENT LIST($vsRuta;$asDocumento)
      ` Selección de todos los registros de la tabla [Documentos]
   ALL RECORDS([Documentos])
      ` Para cada registro
   $vlNbRegistros:=Records in selection([Documentos])
   $vlNbDocs:=0
   $vbOnWindows:=On Windows 
   For ($vlDoc;1;$vlNbRegistros)
         ` Suponemos que tendremos que recrear el documento en disco
      $vbDoIt:=True
         ` Calculo del nombre y ruta de acceso del documento
      $vsDocNombre:="DOC"+String([Documentos]Numero;"00000")
      $vsDocRutaNombre:=$vsRuta+$vsDocNombre
         ` ¿Ya existe este documento?
      If (Test path name($vsDocRutaNombre+".HTM")=Is a document)
            ` Si es así, eliminamos el documento de la lista de documentos
            ` que pueden ser eliminados
         $vlElem:=Find in array($asDocumento;$vsDocNombre+".HTM")
         If ($vlElem>0)
            DELETE FROM ARRAY($asDocumento;$vlElem)
         End if 
            ` ¿Se guardó el documento desúes de la última vez que se modificó el registro?
         GET DOCUMENT PROPERTIES($vsDocRutaNombre+".HTM";$vbBloq;$vbInvisible;$vdCreadoEn;$vhCreatedAt;
                                                $vdModificadoen;$vhModificadoalas)
         If (marcadorTiempos ($vdModificadoen;$vhModificadoalas)>=[Documentos]Marcador modificacion)
               ` Si es así, no necesitamos crear nuevamente el documento 
            $vbDoIt:=False
         End if 
      Else 
            ` El documento no existe, colocar estas dos variables en cero de manera que
            ` sepamos que tenemos que computarlos antes de fijar las propiedades finales
            ` del documento
         $vdModificadoen:=!00/00/00!
         $vhModificadoalas:=†00:00:00†
      End if 
         `¿Necesitamos crear nuevamente el documento?
      If ($vbDoIt)
            ` Si es así, incrementar el número de documentos actualizados 
         $vlNbDocs:=$vlNbDocs+1
            ` Eliminar el documento si ya existe
         DELETE DOCUMENT($vsDocRutaNombre+".HTM")
            ` Y lo crea nuevamente
         If ($vbOnWindows)
            $vhDocRef:=Create document($vsDocRutaNombre;"HTM")
         Else 
            $vhDocRef:=Create document($vsDocRutaNombre+".HTM")
         End if 
         If (OK=1)
               ` Escriba acá los contenidos del documento
            CLOSE DOCUMENT($vhDocRef)
            If ($vdModificadoen=!00/00/00!)
                  ` El documento no existía, definir los valores correctos para la fecha y hora de modificación
               $vdModificadoen:=Current date
               $vhModificadoalas:=Current time
            End if 
               ` Cambiar las propiedades del documento de manera que su fecha y hora de creación
               ` sean iguales a la del registro correspondiente 
            SET DOCUMENT PROPERTIES($vsDocRutaNombre+".HTM";$vbBloq;$vbInvisible;
                                          Marcador fecha ([Documentos]Marcador creacion);
                                          Marcador hora ([Documentos]Marcador creacion);
                                                $vdModificadoen;$vhModificadoalas)
         End if 
      End if 
         ` Sólo para saber que está pasando
      SET WINDOW TITLE("Proceso del documento "+String($vlDoc)+" of "+String($vlNbRegistros))
      NEXT RECORD([Documentos])
   End for 
      ` Eliminación de documentos obsoletos, en otras palabras
      ` aquellos que están en el array $asDocumento
   For ($vlDoc;1;Size of array($asDocumento))
      DELETE DOCUMENT($vsRuta+$asDocumento{$vlDoc})
      SET WINDOW TITLE("Eliminación de documento obsoleto: "+Char(34)+$asDocumento{$vlDoc}+Char(34))
   End for 
      ` We're done
   ALERT("Número de documentos procesados: "+String($vlNbRegistros)+Char(13)+"Número de documentos actualizados: "
                                    +String($vlNbDocs)+Char(13)+"Número de documentos borrados: "
                                             +String(Size of array($asDocumento)))

Ver también

Document creator, Document type, SET DOCUMENT PROPERTIES.


4D - Documentation   Français   English   German   Español   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente