|
Importer des données dans xShell2002
L'import de données dans xShell2002 est particulière.
Il faut respecter quelques règles pour que les données puissent
être exploitées par xShell2002

Pour que l'import se déroule correctement, il
faut utiliser les méthodes rcd_LoadVirgen
et rcd_Save.
Cela s'entend pour les tables de type Data déclarées avec
la méthode rcd_StructureDefinition.
rcd_LoadVirgen charge
et initialise un enregistrement. Suite à ça, vous pouvez
renseigner les champs de la table comme pour n'importe quel import.
rcd_Save enregistre divers
informations utilisées par xShell2002 et sauvegarde la fiche.
rcd_LoadVirgen et
rcd_Save voyent leur comportement
modifié de manière significative selon les paramètres
optionnels qui leurs sont passés. Cela peut influer très
nettement sur le temps d'execution.
Voilà une séquence type d'import de données :
Repeter
"Création" de l'enregistrement
rcd_LoadVirgen
(ptrData;Busy +unLoaded
+unLocked )
traitement d'import...
création des index
rcd_CreateIndex
(ptrData;"MethodClass";"Divers")
sauvegarde
rcd_Save
(ptrData;Opt )
Jusque ($ok)
Et voici quelques méthodes qui réalisent des imports de
données dans xShell2002. Elles sont de bons exemples.

www_DownloadLogsFromWebSrv
Cette méthode importe les logs du site web.
La partie de code suivante est celle de la création de l'enregistrement
qui stocke l'en tête HTTP dans la table Data et des informations
indéxées dans la table Index.
[...]
rcd_LoadVirgen
reçoit en paramètre un pointeur
sur la table [Data] qui est stocké au démarrage dans la
variable <>ptrData. Les constantes passées en deuxième
paramètre indique que l'enregistrement reçoit comme état
le code 1 (Busy)
qui signifie qu'il est utilisé et le code 0 (unLoaded)
qui signifie qu'il n'est pas chargé. Le dernier paramètre
Opt
empèche le code par défaut de s'executer.
rcd_LoadVirgen (<>ptrData;Busy
+unLoaded ;Opt
)
Dans la table [Index] sont créés
les enregistrements qui serviront à classer les requêtes:
le nom de donnée, la date et plus bas l'url sous deux formes.
rcd_CreateIndex
(<>ptrData;"DataName";"Log web")
rcd_CreateIndex
(<>ptrData;"Log date";$LogDate)
L'en-tête http chargé dans une
partie du code avant celle-ci est stockée dans le champ [Data]txtContent.
rcd_GetFieldPointer
(<>ptrData;rcdtxtContent )->:=$ptrHttpHeader->
Ce champ devient la liste courante et va être
traité comme une liste de propriétés par les méthodes
de la librairie prp_.
prp_SetCurList (rcd_GetFieldPointer
(<>ptrData;rcdtxtContent ))
Le séparateur standard est "=",
mais pour l'en-tête http, il faut avoir le séparateur ":
"
prp_SetCurSep (":
")
L'url est récupérée et
nettoyée pour ne garder que la partie significative : retrait du
"Get ou Post", des informations constituant l'url longue, la
version du protocole HTTP qui suit l'url.
$ptrUrl->:=prp_Get ("URL")
$ptrUrl->:=txt_CutOut
($ptrUrl) `retrait des infos du getrecord
$ptrUrl->:=txt_CutOut
($ptrUrl;" HTTP")
$ptrurl->:=Remplacer chaine($ptrUrl->;"get
";"")
$ptrurl->:=Remplacer chaine($ptrUrl->;"post
";"")
$l:=Longueur($ptrUrl->)
Boucle ($i2;$l;1;-1)
Si ($ptrUrl->[[$i2]]="/")
$ptrUrl->:=Sous
chaine($ptrUrl->;$i2)
$i2:=1
Fin de si
Fin de boucle
prp_Add ("URLShort:
"+$ptrUrl->)
prp_SetCurSep
Deux index sont créés, le premier
a pour nom de donnée "Log URLShort" et comme valeur l'url,
le deuxième a pour nom de donnée la date de la requête
et comme valeur l'url. Ces deux index serviront pour cataloguer les requêtes
et constuire les graphiques.
rcd_CreateIndex
(<>ptrData;"Log URLShort";$ptrUrl->)
rcd_CreateIndex
(<>ptrData;$LogDate;$ptrUrl->)
Le champ [Data]DisplayList1 qui est affiché
en liste reçoit une concaténation d'informations.
rcd_GetFieldPointer
(<>ptrData;rcdDisplayList1 )->:="Date
: "+Chaine(rcd_IndexToDate
($LogDate);Spécial forcé
)+" URL : "+$ptrUrl->
rcd_Save
s'occupe de sauvegarder l'enregistrement.
Le paramètre Opt
fait qu'il n'y a pas de sauvegarde de l'enregistrement sur disque ce qui
est le comportement par défaut de rcd_Save.
rcd_Save (<>ptrData;Opt
)
[...]
cos_BuildDataMethod
Cette méthode construit le fichier de données de Canal OpenSource
à partir des méthodes de la structure.
[...]
Création de la zone hors écran
de 4D Write
write:=WR Hors ecran
Création de l'enregistrement qui reçoit
son état Busy
+unLoaded
+unLocked.
Le paramètre optionnel n'est pas passé, le code par défaut
est executé. Ce code crée les propriétés de
l'enregistrement dans le champ [Data]prp et ajoute 4 enregistrements dans
la table [Index]. Les propriétés sont celles qui conservent
l'heure de création ou modification ainsi que l'utilisateur et
d'autres informations. Les Index créés par défaut
indiquent les autorisations d'accès des Invités, la langue,
l'ID de synchronisation, le nom de donnée.
rcd_LoadVirgen (ptrData;Busy
+unLoaded +unLocked
)
L'enregistrement va manipuler deux documents
4D Write qui sont stockés en document externe.
Les deux documents sont déclarés
rcd_SetExternalFile
(->write;"Methode.4w7";"wrt_ExternalFile";"wrt_ExternalFile")
C_ENTIER LONG(write2)
rcd_SetExternalFile
(->write2;"Documentation.4w7";"wrt_ExternalFile";"wrt_ExternalFile")
Le document qui va recevoir la méthode 4D est chargé.
rcd_LoadExternalFile
("Methode.4w7")
Le champ [Data]prp reçoit des informations
sur la zone 4D Write et une section qui va stocker les syntaxes des méthodes
4D.
$ptrDisplaylist1->:=$title
$old:=prp_SetCurList
(rcd_GetFieldPointer
(ptrData;rcdPrp ))
prp_Add ("xContent=Write67";"dataDescription")
prp_Add ("WriteWidth=21";"dataDescription")
prp_Add ("WriteHeigth=29,7";"dataDescription")
prp_Add ("ExportType=HTML";"dataDescription")
prp_AddSection ("SyntaxeMethod";Opt
)
La méthode 4D copiée dans le
presse papier est passée dans la zone 4D Write.
LIRE PRESSE PAPIERS(Données
texte ;$blob)
$vtxt:=BLOB vers texte($blob;Texte
sans longueur )
$vtxt:=Remplacer chaine($vtxt;"¾";"<>")
WR FIXER PROPRIETE DOCUMENT (write;wr
largeur papier ;21)
WR FIXER PROPRIETE DOCUMENT (write;wr
hauteur papier ;29,7)
WR FIXER PROPRIETE DOCUMENT (write;wr
unité ;0)
WR FIXER PROPRIETE DOCUMENT (write;wr
affichage mode ;0)
WR FIXER PROPRIETE DOCUMENT (write;wr
entête marge haut ;0)
WR FIXER PROPRIETE DOCUMENT (write;wr
entête marge bas ;0)
WR FIXER PROPRIETE DOCUMENT (write;wr
pied de page marge bas ;0)
WR FIXER PROPRIETE DOCUMENT (write;wr
pied de page marge haut ;0)
WR FIXER PROPRIETE DOCUMENT (write;wr
texte marge haut ;1)
WR FIXER PROPRIETE DOCUMENT (write;wr
texte marge bas ;1)
WR FIXER PROPRIETE DOCUMENT (write;wr
texte intérieur marge ;1)
WR FIXER PROPRIETE DOCUMENT (write;wr
texte extérieur marge ;1)
WR FIXER PROPRIETE TEXTE (write;wr
marge gauche ;0)
WR FIXER PROPRIETE TEXTE (write;wr
retrait alinéa ;0)
WR FIXER PROPRIETE TEXTE (write;wr
marge droite ;0)
wrt_InserText (->write;$vtxt;0)
Les index qui vont permettre de classer et
rechercher les méthodes sont créés.
Boucle ($i;1;Taille tableau(<>dsg_arrtPrefix))
Si (Position(<>dsg_arrtPrefix{$i};$title)=1)
rcd_CreateIndex
(ptrData;"MethodClass";<>dsg_arrtPrefix{$i})
rcd_CreateIndex
(ptrData;"Thème";<>dsg_arrtChapterName{$i})
$i:=1000
Fin de si
Fin de boucle
Si ($i<1000)
rcd_CreateIndex
(ptrData;"MethodClass";"Divers")
rcd_CreateIndex
(ptrData;"Thème";"Divers")
Fin de si
rcd_CreateIndex
(ptrData;"Date";Chaine(Date
du jour;Spécial forcé
))
rcd_CreateIndex
(ptrData;"Method";$title)
rcd_CreateIndex
(ptrData;"Documentation";$title)
L'enregistrement est sauvegardé. Le
paramètre Opt indique de ne pas faire de sauvegarde sur le disque.
Les documents 4D Write sont sauvegardés manuellements alors que
c'est une opération automatique lorsque le paramètre Opt
n'est pas utilisé.
rcd_Save (ptrData;Opt
)
rcd_BackUpInFile
(ptrData;Opt )
rcd_SaveExternalFile
("Methode.4w7")
WR DETRUIRE HORS ECRAN (write)
write2:=WR Hors ecran
rcd_LoadExternalFile
("Documentation.4w7")
wrt_LoadTemplate
(write2;"DocumentationTemplate.4w7")
rcd_LoadExternalFile
("Documentation.4w7")
WR DETRUIRE HORS ECRAN (write2)
[...]

Retour | Haut
de page
|