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