4D v16.3

GET DOCUMENT PROPERTIES

Inicio

 
4D v16.3
GET DOCUMENT PROPERTIES

GET DOCUMENT PROPERTIES 


 

GET DOCUMENT PROPERTIES ( doc ; bloqueado ; invisible ; creado el ; creado a las ; modificado el ; modificado a las ) 
Parámetro Tipo   Descripción
doc  Cadena in Nombre del documento
bloqueado  Booleano in Bloqueado (True) o no bloqueado (False)
invisible  Booleano in Invisible (True) o visible (False)
creado el  Fecha in Fecha de creación
creado a las  Hora in Hora de creación
modificado el  Fecha in Fecha de la última modificación
modificado a las  Hora in Hora de la última modificació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:

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_modificacion contiene el marcador de la última modificación del registro.

El método de proyecto TimeStamp 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 TimeStamp
  ` TimeStamp { ( date ; Time ) } -> Entero largo
  ` TimeStamp { ( date ; Time ) } -> Número de segundos desde el 1 de enero de 1995
 
 C_DATE($1;$vdDate)
 C_TIME($2;$vhTime)
 C_LONGINT($0)
 
 If(Count parameters=0)
    $vdDate:=Current date
    $vhTime:=Current time
 Else
    $vdDate:=$1
    $vhTime:=$2
 End if
 $0:=(($vdDate-!01/01/95!)*86400)+$vhTime

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 Time stamp to date y Time stamp to time permiten extraer la fecha y la hora almacenadas en un marcador:

  ` Método de proyecto Time stamp to date
  ` Time stamp to date ( Long ) -> Date
  ` Time stamp to date ( Time stamp ) -> Extracted date
 
 C_DATE($0)
 C_LONGINT($1)
 
 $0:=!01/01/95!+($1\86400)
 
  ` Método de proyecto Time stamp to time
  ` Time stamp to time ( Entero largo) -> Fecha
  ` Time stamp to time ( Time stamp ) -> Fecha 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
    :(Trigger event=Save New Record Event)
       [Documents]Creation Stamp:=Time stamp
       [Documents]Modification Stamp:=Time stamp
    :(Trigger event=Save Existing Record Event)
       [Documents]Modification Stamp:=Time stamp
 End case

Una vez implementado en la base, tenemos todo lo que necesitamos para escribir el método de proyecto CREATE DOCUMENTATION. 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 CREATE DOCUMENTATION
 
 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 folder)
    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
  ` Listo
 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

 
PROPIEDADES 

Producto: 4D
Tema: Documentos del sistema
Número 477

Este comando modifica la variable sistema ErrorThis command can be run in preemptive processes

 
HISTORIA 

Creado por: 4D v6

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v16)
Manual de lenguaje 4D ( 4D v16.1)
Manual de lenguaje 4D ( 4D v16.2)
Manual de lenguaje 4D ( 4D v16.3)