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.