4D v12.4

GET DOCUMENT PROPERTIES

Inicio

 
4D v12.4
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 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 <span class="rte4d_cmd">CREAR DOCUMENTACION</span><gen9>
 
 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)&NBSP;#&NBSP;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)))</gen9>

 
PROPIEDADES 

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

 
HISTORIA 

Creado por: 4D v6

 
VER TAMBIÉN 

Document creator
Document type
SET DOCUMENT PROPERTIES