Version 6.0
GET DOCUMENT PROPERTIES (Dokumentname; Gesperrt; Unsichtbar; Erstellt am; Erstellt um; Geändert am; Geändert um)
Parameter | Typ | Beschreibung | |
Dokumentname | String | Name des Dokuments | |
Gesperrt | Boolean | Gesperrt (True) oder freigegeben (False) | |
Unsichtbar | Boolean | Unsichtbar (True) oder sichtbar (False) | |
Erstellt am | Datum | Datum der Erstellung | |
Erstellt um | Zeit | Uhrzeit der Erstellung | |
Geändert am | Datum | Datum der letzten Änderung | |
Geändert um | Zeit | Uhrzeit der letzten Änderung |
Beschreibung
Der Befehl GET DOCUMENT PROPERTIES gibt Information über das Dokument zurück, dessen Namen oder Pfadnamen Sie in Dokumentname übergeben haben.
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.
Unsichtbar 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.
Beispiel
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.
Hinweis: Den Code der hier verwendeten Methoden finden Sie im Abschnitt System 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) # Ist ein Verzeichnis) 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 ELEMENT($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 `Muß 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 daß 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)))
Referenz
Document creator, Document type, SET DOCUMENT PROPERTIES.
BlobIt, Dokument auf Aktualisierung prüfen