Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
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 |
![]() |
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 | |||||
El comando GET DOCUMENT PROPERTIES devuelve información sobre el documento cuyo nombre o ruta se pasa en documento.
Después de la llamada:
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)))
_o_Document creator
_o_Document type
SET DOCUMENT PROPERTIES
Producto: 4D
Tema: Documentos del sistema
Número
477
Creado por: 4D v6
Manual de lenguaje 4D ( 4D v20 R7)