Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
PROPRIETES DOCUMENT
|
PROPRIETES DOCUMENT ( nomFichier ; verrouillé ; invisible ; créé le ; créé à ; modifié le ; modifié à ) | ||||||||
Paramètre | Type | Description | ||||||
nomFichier | Chaîne |
![]() |
Nom du document | |||||
verrouillé | Booléen |
![]() |
Verrouillé (Vrai) ou non verrouillé (Faux) | |||||
invisible | Booléen |
![]() |
Invisible (Vrai) ou visible (Faux) | |||||
créé le | Date |
![]() |
Date de création | |||||
créé à | Heure |
![]() |
Heure de création | |||||
modifié le | Date |
![]() |
Date de la dernière modification | |||||
modifié à | Heure |
![]() |
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 :
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)))
_o_Createur document
_o_Type document
CHANGER PROPRIETES DOCUMENT
Produit : 4D
Thème : Documents système
Numéro :
477
Nom intl. : GET DOCUMENT PROPERTIES
Créé : 4D v6
4D - Langage ( 4D v20 R7)