4D v16.3

GET DOCUMENT PROPERTIES

Home

 
4D v16.3
GET DOCUMENT PROPERTIES

GET DOCUMENT PROPERTIES 


 

GET DOCUMENT PROPERTIES ( Dokumentname ; Gesperrt ; Ausgeblendet ; Erstellt am ; Erstellt um ; Geändert am ; Geändert um ) 
Parameter Typ   Beschreibung
Dokumentname  String in Name des Dokuments
Gesperrt  Boolean in Gesperrt (True) oder freigegeben (False)
Ausgeblendet  Boolean in Unsichtbar (True) oder sichtbar (False)
Erstellt am  Datum in Datum der Erstellung
Erstellt um  Zeit in Uhrzeit der Erstellung
Geändert am  Datum in Datum der letzten Änderung
Geändert um  Zeit in Uhrzeit der letzten Änderung

Der Befehl GET DOCUMENT PROPERTIES gibt Information über das Dokument zurück, dessen Name oder Pfadname in Dokumentname übergeben wurde.

Nach dem Aufruf gibt:

  • Gesperrt den Wert wahr zurück, wenn das Dokument gesperrt ist. Ein gesperrtes Dokument lässt sich weder öffnen noch löschen.
  • Ausgeblendet den Wert wahr zurück, wenn das Dokument unsichtbar ist.
  • Erstellt am und Erstellt um Datum und Uhrzeit des erstellten Dokuments zurück.
  • Geändert am und Geändert um Datum und Uhrzeit der letzten Änderung des Dokuments zurück.

Sie haben eine Dokumentationsdatenbank erstellt und wollen alle erstellten Datensätze der Datenbank in Dokumente auf der Festplatte exportieren. Da die Datenbank regelmäßig aktualisiert wird, schreiben Sie einen Algorithmus für den Export, der jedes Dokument auf der Festplatte erstellt bzw. wieder erstellt, wenn dieses noch nicht existiert bzw. der dazugehörige Datensatz nach dem letzten Export geändert wurde. Von daher müssen Sie Änderungsdatum und Uhrzeit eines Dokuments mit dem entsprechenden Datensatz vergleichen.

Wir gehen von folgender Tabelle aus:

Sie speichern Datum und Uhrzeit nicht in jedem Datensatz, sondern in einem “Zeitstempel”. Dieser misst die Anzahl Sekunden, die von einem bestimmten Stichdatum und einer bestimmten Stichzeit bis zu Datum und Zeit der Sicherung des Datensatzes verstrichen sind. In diesem Beispiel verwenden wir den 1. Jan 1995 um 00:00:00.

Das Datenfeld [Documents]Creation Stamp enthält den Zeitstempel der Erstellung des Datensatzes, das Datenfeld [Documents]Modification Stamp den Zeitstempel der letzten Änderung.

Die Projektmethode Time stamp berechnet den Zeitstempel für ein bestimmtes Datum und eine bestimmte Uhrzeit bzw. das aktuelle Datum und die aktuelle Uhrzeit, wenn keine Parameter übergeben wurden:

  ` Projektmethode Time stamp
  ` Zeitstempel { ( Datum ; Uhrzeit ) } -> Lange Ganzzahl
  ` Zeitstempel { ( Datum ; Uhrzeit ) } -> Anzahl Sekunden seit 1.Jan 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

Hinweis: Mit dieser Methode können Sie Datum und Uhrzeit ab dem 01.01.95 um 00:00:00 bis zum 19.01.2063 um 03:14:07 codieren. Das ist der Bereich der langen Ganzzahl von 0 bis 2^31 minus Eins.

Mit den Projektmethoden Time stamp to date und Time stamp to time können Sie umgekehrt das in einem Zeitstempel gespeicherte Datum und die Uhrzeit entnehmen:

  ` Projektmethode Time stamp to date
  ` Zeitstempel zu Datum (Lange Ganzzahl) -> Datum
  ` Zeitstempel zu Datum (Zeitstempel) -> Entnommenes Datum
 
 C_DATE($0)
 C_LONGINT($1)
 
 $0:=!01/01/95!+($1\86400)
 
  ` Projektmethode Time stamp to time
  ` Zeitstempel zu Zeit (Lange Ganzzahl) -> Datum
  ` Time stamp to time (Zeitstempel) -> Entnommene Zeit
 
 C_TIME($0)
 C_LONGINT($1)
 
 $0:=Time(Time string(†00:00:00†+($1%86400)))

Um sicherzugehen, dass die Zeitstempel der Datensätze richtig aktualisiert werden, egal wie sie erstellt oder geändert wurden, setzen wir den Trigger für die Tabelle [Documents] ein:

  ` Trigger für die Tabelle [Documents]
 
 Case of
    :(Database event=On Saving New Record Event)
       [Documents]Creation Stamp:=Time stamp
       [Documents]Modification Stamp:=Time stamp
    :(Database event=On Saving Existing Record Event)
       [Documents]Modification Stamp:=Time stamp
 End case

Die Datenbank enthält nun alle Elemente für die Projektmethode CREATE DOCUMENTATION. Mit den Befehlen GET DOCUMENT PROPERTIES und SET DOCUMENT PROPERTIES verwalten Sie Datum und Zeit der Erstellung bzw. Änderung der Dokumente.

  ` Projektmethode CREATE DOCUMENTATION
 
 C_STRING(255;$vsPath;$vsDocPathName;$vsDocName)
 C_LONGINT($vlDoc)
 C_BOOLEAN($vbOnWindows;$vbDoIt;$vbLocked;$vbInvisible)
 C_TIME($vhDocRef;$vhCreatedAt;$vhModifiedAt)
 C_DATE($vdCreatedOn;$vdModifiedOn)
 
 If(Application type=4D Client)
  ` Wenn 4D Client läuft, sichere die Dokumente
  ` lokal auf dem entsprechenden Client-Rechner
    $vsPath:=Long name to path name(Application file)
 Else
  ` Sichere die Dokumente sonst dort, wo auch die Datendatei liegt
    $vsPath:=Long name to path name(Data file)
 End if
  ` Sichere die Dokumente in ein Verzeichnis mit dem Namen "Dokumentation"
 $vsPath:=$vsPath+"Dokumentation"+Char(Directory symbol)
  ` Gibt es dieses Verzeichnis nicht, lege es an
 If(Test path name($vsPath)#Is a folder)
    CREATE FOLDER($vsPath)
 End if
  ` Erstelle die Liste der bereits vorhandenen Dokumente, da wir die überflüssigen löschen müssen, d.h. die Dokumente, deren dazugehörige Datensätze gelöscht wurden.
 ARRAY STRING(255;$asDocument;0)
 DOCUMENT LIST($vsPath;$asDocument)
  ` wähle alle Datensätze aus der Tabelle [Documents]
 ALL RECORDS([Documents])
  ` Für jeden Datensatz
 $vlNbRecords:=Records in selection([Documents])
 $vlNbDocs:=0
 $vbOnWindows:=On Windows
 For($vlDoc;1;$vlNbRecords)
  ` Wir nehmen an, dass das Dokument auf der Festplatte wieder erstellt werden muss
    $vbDoIt:=True
  ` Berechne Name und Pfadname des Dokuments
    $vsDocName:="DOC"+String([Documents]Number;"00000")
    $vsDocPathName:=$vsPath+$vsDocName
  ` Gibt es dieses Dokument bereits?
    If(Test path name($vsDocPathName+".HTM")=Is a document)
  ` Wenn ja,entferne das Dokument aus der Liste der Dokumente, die schließlich gelöscht werden
       $vlElem:=Find in array($asDocument;$vsDocName+".HTM")
       If($vlElem>0)
          DELETE FROM ARRAY($asDocument;$vlElem)
       End if
  ` Wurde das Dokument nach der letzten Änderung des Datensatzes gesichert?
       GET DOCUMENT PROPERTIES($vsDocPathName+
       ".HTM";$vbLocked;$vbInvisible;$vdCreatedOn;
       $vhCreatedAt;$vdModifiedOn;$vhModifiedAt)
       If(Time stamp($vdModifiedOn;$vhModifiedAt)>=[Documents]Modification Stamp)
  ` Wenn ja, müssen wir das Dokument nicht wieder erstellen
          $vbDoIt:=False
       End if
    Else
  ` Das Dokument gibt es nicht, setze wieder diese beiden Variablen, damit wir wissen, dass sie vor Setzen der endgültigen Eigenschaften des Dokuments berechnet werden müssen
       $vdModifiedOn:=!00.00.00!
       $vhModifiedAt:=†00:00:00†
    End if
  ` Muss das Dokument (wieder) erstellt werden?
    If($vbDoIt)
  ` Wenn ja, erhöhe die Nummer der aktualisierten Dokumente
       $vlNbDocs:=$vlNbDocs+1
  ` Lösche das Dokument, wenn es bereits vorhanden ist
       DELETE DOCUMENT($vsDocPathName+".HTM")
  ` Und erstelle es wieder
       If($vbOnWindows)
          $vhDocRef:=Create document($vsDocPathName;"HTM")
       Else
          $vhDocRef:=Create document($vsDocPathName+".HTM")
       End if
       If(OK=1)
  ` Schreibe hier den Inhalt des Dokuments
          CLOSE DOCUMENT($vhDocRef)
          If($vdModifiedOn=!00.00.00!)
  ` Dokument war nicht vorhanden, setze Änderungsdatum und -zeit auf die richtigen Werte
             $vdModifiedOn:=Current date
             $vhModifiedAt:=Current time
          End if
  ` Ändere die Eigenschaften des Dokuments, so dass Erstellungsdatum und -zeit gleich sind zum entsprechenden Datensatz
          SET DOCUMENT PROPERTIES($vsDocPathName+".HTM";
          $vbLocked;$vbInvisible;Time stamp to date([Documents]Creation Stamp);
          Time stamp to time([Documents]Creation Stamp);$vdModifiedOn;$vhModifiedAt)
       End if
    End if
 
  ` Um zu wissen, wie es weitergeht
    SET WINDOW TITLE(" Dokumente bearbeiten "+String($vlDoc)+" of "+String($vlNbRecords))
    NEXT RECORD([Documents])
 End for
  ` Lösche die überflüssigen Dokumente, d.h. jene, die noch im Array $asDocument sind
 For($vlDoc;1;Size of array($asDocument))
    DELETE DOCUMENT($vsPath+$asDocument{$vlDoc})
    SET WINDOW TITLE("Überflüssige Dokumente löschen: "+Char(34)+$asDocument{$vlDoc}+Char(34))
 End for
  ` Wir sind fertig
 ALERT("Anzahl der bearbeiteten Dokumente: "+String($vlNbRecords)+Char(13)+"Anzahl der aktualisierten Dokumente:
 "+String($vlNbDocs)+Char(13)+ "Anzahl der gelöschten Dokumente"+String(Size of array($asDocument)))



Siehe auch 

Document creator
Document type
SET DOCUMENT PROPERTIES

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Systemdokumente
Nummer: 477

Dieser Befehl ändert die Systemvariable ErrorThis command can be run in preemptive processes

 
GESCHICHTE 

Erstellt: 4D v6

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)