Retour au sommaire

SourceServer
ForumServer

DesignServer

Accueil CanalOpenSource


Liens :

www.pmarty.com
www.4D.fr
www.fyi.4D.fr
www.ajar.ch
www.4DToday.com

 

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