4D v16.3

PROPRIETES DOCUMENT

Accueil

 
4D v16.3
PROPRIETES DOCUMENT

PROPRIETES DOCUMENT 


 

PROPRIETES DOCUMENT ( nomFichier ; verrouillé ; invisible ; créé le ; créé à  ; modifié le ; modifié à ) 
Paramètre Type   Description
nomFichier  Chaîne in Nom du document
verrouillé  Booléen in Verrouillé (Vrai) ou non verrouillé (Faux)
invisible  Booléen in Invisible (Vrai) ou visible (Faux)
créé le  Date in Date de création
créé à   Heure in Heure de création
modifié le  Date in Date de la dernière modification
modifié à  Heure in Heure de la dernière modification

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.

Exemple  

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 paramètres=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 trigger=Sur sauvegarde nouvel enreg)
       [Documents]Marqueur création:=marqueurTemps
       [Documents]Marqueur modification:=marqueurTemps
    :(Evenement trigger=Sur 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 dossier)
    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 DANS TABLEAU($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)))



Voir aussi  

CHANGER PROPRIETES DOCUMENT
Createur document
Type document

 
PROPRIÉTÉS 

Produit : 4D
Thème : Documents système
Numéro : 477
Nom intl. : GET DOCUMENT PROPERTIES

Cette commande modifie la variable système ErrorCommande(s) éligible(s) à l'exécution dans un process préemptif

 
HISTORIQUE 

Créé : 4D v6

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)