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

 

Ajouter une table à xShell2002

 

xShell2002 contient trois tables :

- la table Forms qui a un champ Empty et aucun enregistrement. Cette table n'est là que pour recevoir les formulaires génériques.

- la table Index qui possède six champs indexés. Cette table est liée à la table Data dans une relation de N vers 1, c'est à dire qu'à un enregistrement de la table Data est attaché de 1 à N enregistrements de la table Index.

- la table Data qui possède huit champs dont quatre sont indexés. Sur ces huit champs, quatre sont particuliers : le champ Handle, le champ State, le champ Link et le champ prp. La présence de ces quatres champs dans une table permet de définir la table comme étant du type "Data".

Une table du type "Data" :

C'est une table qui possède les quatre champs cités ci-dessus et qui de ce fait va pouvoir utiliser les mécanismes mis en place dans la librairie rcd_ (Enregistrements). Ces mécanismes permettent la liaison avec la table Index, le contrôle de l'accès aux enregistrements par les utilisateurs selon leurs droits, la suppression et la récupération des enregistrements, le versionning, la synchronisation entre bases.

Ajouter une table à xShell2002 :

Si vous désirez ajouter une table à xShell2002 et la voir profiter des possibilités du shell, il faut créer les champs suivants :
- Handle, champ alpha 8, indexé.
- State, champ alpha 5, indexé.
- Link, champ alpha 12, indexé.
- prp, champ texte.

Ces champs ne doivent pas nécessairement être placé en début de table, ils peuvent être rajoutés à une table importé depuis une autre structure. Ils n'ont pas besoin de se suivre non plus, ils peuvent remplacer des champs existants et n'étant plus utilisés.

IL est important de respecter le nom des champs. Ne changez pas le nom des champs de la table Index ou de la table Data.

Vous pouvez ensuite ajouter les champs de votre choix dans cette table.

Avoir créé ces quatre champs particuliers est une première étape. Il est nécessaire de déclarer la table dans le code de xShell2002 pour qu'il en tienne compte. Cette déclaration est simple à réaliser puisqu'elle consiste à appeler la méthode rcd_StructureDefinition et de lui passer en pointeur la table que vous voulez déclarer.
Où placer cette déclaration? Vous pouvez le faire dans la méthode OnStartUp . Cette méthode est appelée au lancement de la base. Vous trouverez dans le corps de cette méthode les lignes suivantes :


  `________________________________________________________________________________
  `traitements spécifique
rcd_DataName:=prp_GetDBPrp ("DefaultDataName")
Au cas ou
: (rcd_DataName="!cos")
   cos_LoadCommandList
   dsg_LoadPrefix


Fin de cas

C'est à la ligne 53 de la méthode. A ce stade du démarrage de l'application, xShell2002 charge le nom de données par défaut tel qu'il est défini dans le fichier DBPrp.TXT du dossier properties.

Précision particulière :

Sur l'archive que vous avez téléchargé, ce nom est "!xSh". Ce mécanisme intéresse particulièrement les développeurs qui veulent avec xShell gérer plusieurs fichiers de données et des cas spécifiques en ce basant sur la valeur du nom de données et gérer au sein d'une table commune des données de type différent. Dans le cas présenté ici, le nom de données est "!cos". C'est celui de Canal OpenSource. Le "au cas ou" me permet pour cette base de charger la liste des commandes 4D, des plug-ins, des méthodes contenues dans le fichier de données, les constantes et les mots cles. Je charge aussi avec la méthode dsg_LoadPrefix la liste des préfix des méthodes de xShell qui me permet de faire un premier classement. Les enregistrements sont stockés dans la table [Data], les comptes des abonnés aussi, mais ces enregistrements sont séparés des autres par leur nom de données.


Vous n'êtes pas obligé de définir un nom de données, vous pouvez conserver !xSh, vous n'avez pas besoin de le gérer si votre développement a pour but d'avoir un seul type d'application.

Vous pouvez écrire :


 `________________________________________________________________________________
  `traitements spécifique
rcd_DataName:=prp_GetDBPrp ("DefaultDataName")
Au cas ou
: (rcd_DataName="!cos")
   cos_LoadCommandList
   dsg_LoadPrefix


Fin de cas

rcd_StructureDefinition (->[Patients])
rcd_StructureDefinition (->[RDV])


Vous pouvez aussi définir votre propre nom de données par défaut.
Allez dans le dossier Data qui se trouve à coté de xShell2002, ouvrez le dossier properties et double cliquez sur le fichier DBPrp.TXT. A la 4ème ligne remplacez
DefaultDataName=!xSh par
DefaultDataName=GestionPatients

J'ai l'habitude d'utiliser la syntaxe ! suivi de trois lettres qui sont l'abréviation de l'application :
!cos pour Canal OpenSource
!ctc pour Contact Deuxième Edition
!fac pour ma facturation

mais vous pouvez mettre le libellé que vous voulez puisque ce nom de données est ensuite stocké dans le champ alpha [Index]DataValue qui est un champ de 80 caractères indexé.

Vous pouvez alors écrire :


 `________________________________________________________________________________
  `traitements spécifique
rcd_DataName:=prp_GetDBPrp ("DefaultDataName")
Au cas ou
: (rcd_DataName="!cos")
   cos_LoadCommandList
   dsg_LoadPrefix

: (rcd_DataName="GestionPatients")
    rcd_StructureDefinition (->[Patients])
    rcd_StructureDefinition (->[RDV])

Fin de cas


Il s'agit là de l'initialisation de l'application. Vous pouvez définir plusieurs nom de données au sein d'une même application et le définir au lancement d'un process avec la méthode
rcd_SetDataName ("CarnetAdresse") et le récupérer avec la méthode $nomDonnees:=rcd_GetDataName

Le nom de données que vous avez défini est utilisé par la méthode rcd_LoadVirgen qui charge un nouvel enregistrement et crée les entrées dans la table Index.





Retour | Haut de page