Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20.6
GET DOCUMENT PROPERTIES
|
GET DOCUMENT PROPERTIES ( documento ; bloqueado ; invisivel ; criadoEm ; criadoAs ; modificadoEm ; modificadoAs ) | ||||||||
Parâmetro | Tipo | Descrição | ||||||
documento | String |
![]() |
Nome do documento | |||||
bloqueado | Booleano |
![]() |
Bloqueado (TRUE) ou desbloqueado(false) | |||||
invisivel | Booleano |
![]() |
Invisível (True) ou visível (False) | |||||
criadoEm | Data |
![]() |
Data da criação | |||||
criadoAs | Hora |
![]() |
Hora da criação | |||||
modificadoEm | Data |
![]() |
Última data de modificação | |||||
modificadoAs | Hora |
![]() |
última hora de modificação | |||||
O comando GET DOCUMENT PROPERTIES retorna informação sobre o documento cujo nome ou rota se passa em documento.
Depois da chamada:
Imagine que você tenha criado um banco de documentação e deseja exportar todos os registros criados no banco a um documento em disco. Como o banco é atualizado regularmente, você deseja escrever um algoritmo de exportação que cree ou recree cada documento no disco se o documento não existe ou se o registro correspondente ha sido modificado depois de que o documento fue grabado por última vez. Portanto, você deve comparar a data e a hora da modificação do documento (se houver) com seu registro correspondente. Para ilustrar este exemplo, utilizamos a seguinte tabela:
Em nosso exemplo, o campo [Documentos]Marcador criação contém o marcador de criação de quando o registro foi criado pela primeira vez e o campo [Documentos]Marcador modificação contém o marcador da última modificação do registro.
O método de projeto MarcadorTempo calcula o marcador de tempo para uma data e horas específica ou para a data e hora atual se nenhum parâmetro for passado:
[ ` Método de Projeto Marcador de Tempo
` MarcadorTempos { ( data ; Hora ) } -> Long
` MarcadorTempos { ( data ; Hora ) } -> Número de segundos desde 1º Janeiro de 1995
C_DATE($1;$vdData)
C_TIME($2;$vhHora)
C_LONGINT($0)
If(Count parameters=0)
$vdData:=Current date
$vhHora:=Current time
Else
$vdData:=$1
$vhHora:=$2
End if
$0:=(($vdData-!01/01/95!)*86400)+$vhHora
Nota: utilizando este método, pode codificar todas as datas e as horas desde 01/01/95 as 00:00:00 a 19/01/2063 as 03:14:07 o que cobre o intervalo de inteiros longos de 0 a 2^31 menos um.
Por outro lado, os métodos de projeto Marcador data e Marcador hora permitem extrair a data e a hora armazenadas em um marcador:
` Método de projeto Marcador data
` Marcador data ( Long ) -> Data
` Marcador data ( Time stamp ) -> data extraída
C_DATE($0)
C_LONGINT($1)
$0:=!01/01/95!+($1\86400)
` Time stamp to time Project Method
` Time stamp to time ( Long ) -> Date
` Time stamp to time ( Time stamp ) -> Extracted time
C_TIME($0)
C_LONGINT($1)
$0:=Time(Time string(†00:00:00†+($1%86400)))
Para garantir que os marcadores dos registros sejam atualizados corretamente, sem importar a maneira em que são criados ou modificados, devemos aplicar esta regra utilizando o trigger da tabela [Documentos]:
// Trigger for table [Documents]
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
Quando esse método tiver sido implementado no banco de dados, nóste mos todo o que precisamos para escrever o método de projeto CRIAR DOCUMENTAÇÂO listado abaixo. Nós usamos GET DOCUMENT PROPERTIES e SET DOCUMENT PROPERTIES para manipular as datas e horas de criação e modificação dos documentos.`
Metodo de projeto CRIAR DOCUMENTAÇAO
C_STRING(255;$vsRota;$vsDocRotaNome;$vsDocNome)
C_LONGINT($vlDoc)
C_BOOLEAN($vbOnWindows;$vbDoIt;$vbBloqueado;$vbInvisivel)
C_TIME($vhDocRef;$vhCriadoAs;$vhModificadoAs)
C_DATE($vdCriadoEm;$vdModificadoEm)
If(Application type=4D Client)
` Se estiver rodando 4D Client, salve os documentos
` localmente na máquina Cliente onde 4D Client estiver localizado
$vsRota:=Long name to path name(Application file)
Else
` Se não, salve os documentos onde o arquivo de dados estiver localizado
$vsPath:=Long name to path name(Data file)
End if
` Salva os documentos num diretório nós chamamos arbitrariamente de "Documentação"
$vsRota:=$vsRota+"Documentação"+Char(Directory symbol)
` Se esse diretório não existir, ele será criado
If(Test path name($vsRota)#Is a directory)
CREATE FOLDER($vsRota)
End if
` Estabelece a lista dos documentos que já existem
` porque temos que apagar os obsoletos, ou seja
` os documentos cujos registros correspondentes foram apagados.
ARRAY STRING(255;$asDocumento;0)
DOCUMENT LIST($vsRota;$asDocumento)
` Seleciona todos os registros da tabela [Documentos]
ALL RECORDS([Documentos])
` For each record
$vlNbRegistros:=Records in selection([Documentos])
$vlNbDocs:=0
$vbOnWindows:=On Windows
For($vlDoc;1;$vlNbRegistros)
` Assuma que nós vamos (re)criar o documento em disco
$vbDoIt:=True
` Calcula o nome e o nome de rota de acesso do documento
$vsDocName:="DOC"+String([Documentos]Numero;"00000")
$vsDocRotaNome:=$vsRota+$vsDocNome
` Esse documento já existe?
If(Test path name($vsDocRotaNome+".HTM")=Is a document)
` Se afirmativo, remove o documento da lista dos documentos
` podem ser eliminados
$vlElem:=Find in array($asDocumento;$vsDocNome+".HTM")
If($vlElem>0)
DELETE FROM ARRAY($asDocumento;$vlElem)
End if
` O documento foi salvo depois da última vez que o registro foi modificado?
GET DOCUMENT PROPERTIES($vsDocRotaNome+".HTM";$vbBloqueado;$vbInvisivel;$vdCriadoEm;$vhCriadoAS;
$vdModificadoEm;$vhModificadoAS)
If(Time stamp($vdModificadoEm;$vhModificadoAs)>=[Documentos]Marcador de Modificação)
` Se positivo, não é necessário recriar o documento
$vbDoIt:=False
End if
Else
` O documento não existe, estabelece o valor das duas variáveis em zero
` de maneira que saiba que precisa calculá-las antes de estabelecer as propriedades finais
` do documento
$vdModificadoEm:=!00/00/00!
$vhModificadoAs:=†00:00:00†
End if
` É necessário (re)criar o documento?
If($vbDoIt)
` Se sim, incrementa o número dos documentos atualizados
$vlNbDocs:=$vlNbDocs+1
` Apaga o documento se já existir
DELETE DOCUMENT($vsDocRotaNome+".HTM")
` E o cria novamente
If($vbOnWindows)
$vhDocRef:=Create document($vsDocRotaNome;"HTM")
Else
$vhDocRef:=Create document($vsDocRotaNome+".HTM")
End if
If(OK=1)
` Escreva aqui os conteúdos do documento
CLOSE DOCUMENT($vhDocRef)
If($vdModificadoEm=!00/00/00!)
` O documento não existindo, estabeleça a data e hora de moficação
` aos seus valores corretos
$vdModificadoEm:=Current date
$vhModificadoAs:=Current time
End if
` Muda as propriedades do documento de maneira que sua data e hora de criação
` se tornam iguais as dos registros correspondentes
SET DOCUMENT PROPERTIES($vsDocRotaNome+".HTM";$vbBloqueado;$vbInvisivel;
Marcador de Data([Documentos]Criar Marcador);
Marcador de Hora([Documentos]Criar Marcador);
$vdModificadoEm;$vhModificadoAs)
End if
End if
` Apenas pra saber o que está acontecendo
SET WINDOW TITLE("Processing Document "+String($vlDoc)+" of "+String($vlNbRegistros))
NEXT RECORD([Documentos])
End for
` Apagar os documentos obsoletos, em outras palavras
` aqueles que ainda estiverem no array $asDocumento
For($vlDoc;1;Size of array($asDocumento))
DELETE DOCUMENT($vsRota+$asDocumento{$vlDoc})
SET WINDOW TITLE("Apagar documento obsoleto: "+Char(34)+$asDocumento{$vlDoc}+Char(34))
End for
` e terminamos
ALERT("Número de documentos processados: "+String($vlNbRegistros)+Char(13)+"Numero de documentos atualizados: "+String($vlNbDocs)+Char(13)+"Numero de documentos apagados: "+String(Size of array($asDocumento)))
_o_Document creator
_o_Document type
SET DOCUMENT PROPERTIES
Produto: 4D
Tema: Documentos de Sistema
Número
477
Criado por: 4D v6
Manual de linguagem 4D ( 4D v20)
Manual de linguagem 4D ( 4D v20.1)
Manual de linguagem 4D ( 4D v20.2)
Manual de linguagem 4D ( 4D v20.3)
Manual de linguagem 4D ( 4D v20.4)
Manual de linguagem 4D ( 4D v20.5)
Manual de linguagem 4D ( 4D v20.6)