PROPRIETES DOCUMENT

4D - Documentation   Français   English   German   4e Dimension, Commandes par thèmes   4e Dimension, Liste alphabétique des commandes   4e Dimension, Constantes par thèmes   Retour   Précédent   Suivant

version 6.0


PROPRIETES DOCUMENT (document; verrouillé; invisible; créé le; créé à ; modifié le; modifié à)

ParamètreTypeDescription
documentAlphaNom du document
verrouilléBooléenVerrouillé (Vrai) ou non verrouillé (Faux)
invisibleBooléenInvisible (Vrai) ou visible (Faux)
créé leDateDate de création
créé à HeureHeure de création
modifié leDateDate de la dernière modification
modifié àHeureHeure de la dernière modification

Description

La commande PROPRIETES DOCUMENT retourne des informations sur le document dont le nom ou le chemin d'accès est passé dans le paramètre document.

Après l'appel :

verrouillé retourne Vrai si le document est verrouillé. Un document verrouillé ne peut pas être modifié.

invisible retourne Vrai si le document est caché.

créé le et créé à retournent la date et l'heure de création du document.

modifié le et modifié à retournent la date et l'heure de la dernière modification du document.

Exemples

Vous avez créé une base de documentation et vous voulez exporter tous les enregistrements créés dans le base vers un document sur disque. Comme la base est régulièrement mise à jour, vous voulez écrire un algorithme d'export qui crée ou recrée chaque document sur disque si le document n'existe pas ou si l'enregistrement correspondant a été modifié depuis la dernière sauvegarde du document. Par conséquent, vous devez comparer la date et l'heure de modification du document (s'il existe) avec celles de l'enregistrement correspondant. Pour illustrer cet exemple, nous allons utiliser la table suivante :

Plutôt que de sauvegarder une date et une heure dans chaque enregistrement, vous pouvez stocker un "marqueur" dont la valeur exprime le nombre de secondes écoulées depuis une date antérieure arbitraire (dans cet exemple, le 1er janvier 1995 à 00:00:00) ainsi que la date et l'heure de la sauvegarde de l'enregistrement.

Dans notre exemple, le champ [Documents]Marqueur création contient le marqueur de création de l'enregistrement et le champ [Documents]Marqueur modification contient le marqueur de la dernière modification de l'enregistrement.

La méthode projet marqueurTemps suivante calcule le marqueur de temps par rapport à une date et une heure spécifiques ou par rapport à la date et l'heure courantes si aucun paramètre n'est passé :

      ` Méthode projet marqueurTemps
      ` marqueurTemps { ( Date ; Heure ) } -> Entier long
      ` marqueurTemps { ( Date ; Heure ) } -> Nombre de secondes depuis le 1er janvier 1995

   C_DATE($1;$vdDate)
   C_HEURE($2;$vhTime)
   C_ENTIER LONG($0)

   Si (Nombre de parametres=0)
      $vdDate:=Date du jour 
      $vhTime:=Heure courante 
   Sinon 
      $vdDate:=$1
      $vhTime:=$2
   Fin de si 
   $0:=(($vdDate-!01/01/95!)*86400)+$vhTime

Note : Avec cette méthode, vous pouvez encoder toutes les dates et les heures situées entre le 01/01/95 à 00:00:00 et le 19/01/2063 à 03:14:07, ce qui représente l'intervalle de données exploitables par un entier long (de 0 à 2^31 moins 1).

A l'inverse, les méthodes projet Marqueur vers date et Marqueur vers heure vous permettent d'extraire la date et l'heure stockées dans un marqueur :

      ` Méthode projet Marqueur vers date
      ` Marqueur vers date ( Entier long ) -> Date
      ` Marqueur vers date ( Marqueur ) -> Date extraite

   C_DATE($0)
   C_ENTIER LONG($1)

   $0:=!01/01/95!+($1\86400)

      ` Méthode projet Marqueur vers heure
      ` Marqueur vers heure ( Entier long ) -> Heure
      ` Marqueur vers heure ( Marqueur ) -> Heure extraite

   C_HEURE($0)
   C_ENTIER LONG($1)

   $0:=Heure(Chaine heure(†00:00:00†+($1%86400)))

Pour vous assurer que les marqueurs des enregistrements sont correctement mis à jour, quelle que soit la manière dont ils sont créés ou modifiés, il suffit de faire appliquer cette règle par le trigger de la table [Documents]:

      ` Trigger de la table [Documents]

   Au cas ou 
      : (Evenement moteur=Sauvegarde nouvel enreg)
         [Documents]Marqueur création:=marqueurTemps 
         [Documents]Marqueur modification:=marqueurTemps 
      : (Evenement moteur=Sauvegarde enregistrement)
         [Documents]Marqueur modification:=marqueurTemps 
   Fin de cas 

Une fois que cela est implémenté dans votre base, il suffit d'écrire la méthode projet CREER DOCUMENTATION listée ci-dessous. Nous utilisons PROPRIETES DOCUMENT et CHANGER PROPRIETES DOCUMENT pour gérer la date et l'heure de création et de modification des documents.

      ` Méthode projet CREER DOCUMENTATION

   C_ALPHA(255;$vsPath;$vsDocPathName;$vsDocName)
   C_ENTIER LONG($vlDoc)
   C_BOOLEEN($vbOnWindows;$vbDoIt;$vbLocked;$vbInvisible)
   C_HEURE($vhDocRef;$vhCreatedAt;$vhModifiedAt)
   C_DATE($vdCreatedOn;$vdModifiedOn)

   Si (Type application=4D Client)
         ` Si 4D Client est utilisé, sauvegarder les documents localement
         ` c'est-à-dire sur le poste client où se trouve 4D Client
      $vsPath:=Nom long vers chemin d'accès (Type application)
   Sinon 
         ` Sinon, sauvegarder les documents là où se trouve le fichier de données
      $vsPath:=Nom long vers chemin d'accès (Fichier donnees)
   Fin de si 
      ` Stocker les documents dans un répertoire nommé arbitrairement "Documentation"
   $vsPath:=$vsPath+"Documentation"+Caractere(Symbole séparateur)
      ` Si ce répertoire n'existe pas, le créer
   Si (Tester chemin acces ($vsPath) # Est un répertoire)
      CREER DOSSIER($vsPath)
   Fin de si 
      ` Etablir la liste des documents existants
      ` car nous allons devoir supprimer ceux qui sont obsolètes, autrement dit
      ` ceux dont les enregistrements correspondants ont été supprimés.
   TABLEAU ALPHA(255;$asDocument;0)
   LISTE DES DOCUMENTS($vsPath;$asDocument)
      ` Sélection de tous les enregistrements de la table [Documents]
   TOUT SELECTIONNER([Documents])
      ` Pour chaque enregistremnt
   $vlNbRecords:=Enregistrements trouves([Documents])
   $vlNbDocs:=0
   $vbOnWindows:=Sous Windows 
   Boucle ($vlDoc;1;$vlNbRecords)
         ` Supposons que nous aurons à (re)créer le document sur disque  
      $vbDoIt:=Vrai
         ` Calcul du nom et du chemin d'accès au document
      $vsDocName:="DOC"+Chaine([Documents]Numéro;"00000")
      $vsDocPathName:=$vsPath+$vsDocName
         ` Est-ce que ce document existe déjà ?
      Si (Tester chemin acces($vsDocPathName+".HTM")=Est un document)
            ` Si oui, retirer le document de la liste des documents
            ` qui peuvent être supprimés
         $vlElem:=Chercher dans tableau($asDocument;$vsDocName+".HTM")
         Si ($vlElem>0)
            SUPPRIMER LIGNES($asDocument;$vlElem)
         Fin de si 
            ` Est-ce que le document a été stocké après la dernière modification de l'enregistrement?
         PROPRIETES DOCUMENT($vsDocPathName+".HTM";$vbLocked;$vbInvisible;
                                    $vdCreatedOn;$vhCreatedAt;$vdModifiedOn;$vhModifiedAt)
         Si (marqueurTemps ($vdModifiedOn;$vhModifiedAt)>=[Documents]Marqueur modification)
               ` Si oui, nous n'avons pas besoin de recréer le document      
            $vbDoIt:=Faux
         Fin de si 
      Sinon 
            ` Le document n'existe pas, mettre ces deux variables à zéro, pour que 
            ` nous sachions que nous devrons les traiter avant de fixer les propriétés finales
            ` du document
         $vdModifiedOn:=!00/00/00!
         $vhModifiedAt:=†00:00:00†
      Fin de si 
         ` Avons-nous besoin de (re)créer le document?
      Si ($vbDoIt)
            ` Si oui, incrémenter le nombre de documents mis à jour
         $vlNbDocs:=$vlNbDocs+1
            ` Supprimer le document s'il existe déjà
         SUPPRIMER DOCUMENT($vsDocPathName+".HTM")
            ` Et le recréer
         Si ($vbOnWindows)
            $vhDocRef:=Creer document($vsDocPathName;"HTM")
         Sinon 
            $vhDocRef:=Creer document($vsDocPathName+".HTM")
         Fin de si 
         Si (OK=1)
               ` ... 
               ` Ecrivons ici le contenu du document
               ` ...
            FERMER DOCUMENT($vhDocRef)
            Si ($vdModifiedOn=!00/00/00!)
                  ` Le document n'existait pas, fixer les valeurs correctes pour
                  ` la date et l'heure de modification
               $vdModifiedOn:=Date du jour 
               $vhModifiedAt:=Heure courante 
            Fin de si 
               ` Changer les propriétés du document de telle manière que sa date et son heure de création
               ` soit égales à celles de l'enregistrement correspondant
            CHANGER PROPRIETES DOCUMENT($vsDocPathName+".HTM";$vbLocked;$vbInvisible;
                                    Marqueur vers date ([Documents]Marqueur création);Marqueur
                                    vers heure ([Documents]Marqueur création);
                                    $vdModifiedOn;$vhModifiedAt)
         Fin de si 
      Fin de si 
         ` Juste pour savoir ce qui se passe
      CHANGER TITRE FENETRE("Traitement du document "+Chaine($vlDoc)+" sur "
                                       +Chaine($vlNbRecords))
      ENREGISTREMENT SUIVANT([Documents])
   Fin de boucle 
      ` Suppression des documents obsolètes, c'est-à-dire ceux 
      ` qui sont toujours dans le tableau $asDocument
   Boucle ($vlDoc;1;Taille tableau($asDocument))
      SUPPRIMER DOCUMENT($vsPath+$asDocument{$vlDoc})
      CHANGER TITRE FENETRE("Suppression du document obsolète: "+Caractere(34)+
                                       $asDocument{$vlDoc}+Caractere(34))
   Fin de boucle 
      ` C'est la fin
   ALERTE("Nombre de documents traités : "+Chaine($vlNbRecords)+Caractere(13)+
                        "Nombre de documents mis à jour : "+Chaine($vlNbDocs)+Caractere(13)+
                        "Nombre de documents supprimés : "+Chaine(Taille tableau($asDocument)))

Référence

CHANGER PROPRIETES DOCUMENT, Createur document, Type document.


4D - Documentation   Français   English   German   4e Dimension, Commandes par thèmes   4e Dimension, Liste alphabétique des commandes   4e Dimension, Constantes par thèmes   Retour   Précédent   Suivant