GET DOCUMENT PROPERTIES

4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 6.0


GET DOCUMENT PROPERTIES (Dokumentname; Gesperrt; Unsichtbar; Erstellt am; Erstellt um; Geändert am; Geändert um)

ParameterTypBeschreibung
DokumentnameStringName des Dokuments
GesperrtBooleanGesperrt (True) oder freigegeben (False)
UnsichtbarBooleanUnsichtbar (True) oder sichtbar (False)
Erstellt amDatumDatum der Erstellung
Erstellt umZeitUhrzeit der Erstellung
Geändert amDatumDatum der letzten Änderung
Geändert umZeitUhrzeit 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.

Anwendung des Befehls

BlobIt, Dokument auf Aktualisierung prüfen


4D - Documentation   Français   English   German   English   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next