|
Lier une table
xShell2002 n'exploite pas les liens 4D. C'est par programmation
que les tables sont liées entres elles.
Il existe deux méthodes dans xShell2002 pour gérer
les liens entre deux tables :
- rcd_LinkData (->[RDV];->[Contact])
Cette méthode établi un lien de N vers 1 entre la table
[RDV] et la table [Contact]. Il y a N rendez-vous pour 1 contact. L'enregistrement
courant de la table [RDV] est lié à l'enregistrement courant
de la table [Contact].
- rcd_GetLink (->[Contact];->[RDV])
Cette méthode charge tous les enregistrements de la table [RDV]
liés à l'enregistrement courant de la table [Contact].
L'exemple développé dans ce chapitre est une gestion de
contact simple. A chaque contact peut être lié un ou plusieurs
rendez-vous et un ou plusieurs documents 4D Write. La table [RDV] et la
table [Data] sont liées à la table [Contact] dans une relation
de N vers 1.
La table RDV

La table RDV va servir à noter les rendez-vous pris avec les contacts.
Cette table va être liée à la table Contact dans une
relation de N vers 1.
N rendez-vous pour 1 contact.
La table Rendez-vous reçoit les
4 champs de base comme pour la table Contact. On y ajoute les champs suivants
:
- Identite. C'est un champ alpha 80 non indexé qui va être
affecté avec la civilité, le prénom et le nom du
contact. Cela permet d'avoir dans la liste des rendez-vous l'identité
de la personne. Cette redondance d'information n'est pas génante.
Il faudra juste veiller à la mise à jour de la fiche RDV
si on change le nom du contact, ce qui n'arrive que rarement.
- Date. Ce champ est indéxé et reçoit la date du
rendez-vous.
- Heure. Ce champ reçoit l'heure du rendez-vous.
- Objet. Ce champ servira à inscrire l'objet, la raison du rende-vous.
Nous allons voir plus loin comme utiliser la table [Data] pour conserver
les notes ou les rapports fait sur les contacts. La table [Data] va être
liée à la table [Contact] comme la table [RDV].
Description
du projet :
Au chapitre précédent,
la partie du formulaire "Coordonnées professionnelles"
avait été mis en place.
Dans le reste du formulaire, je place une zone AreaList Pro pour afficher
la liste des rendez-vous de ce contact et une zone AreaList Pro pour afficher
la liste des documents créés pour ce contact.
Un bouton d'ajout est lié à chaque zone AreaList Pro.
Un autre bouton va permettre une saisie en liste.
Le double clic ouvrira la fiche du rendez-vous ou le document. L'ouverture
se fera dans un process différent et le process Contact va mettre
à jour ses listes chaque fois qu'il passera au premier plan.
Deuxième étape de la construction
du formulaire [Contact]DataEntry

La liste des documents a été placée à droite
des champs des coordonnées du contact et la liste des rendez-vous
à été placée en dessous et occupe toute la
largeur de l'écran. C'est un choix purement personnel. Cette dernière
liste cédera une partie de son espace dans un prochain chapitre.
La liste des document est une variable
qui s'appelle alp_vlDoc. La liste des rendez-vous s'appelle alp_vlRDV.
Voici d'abord le code qu'il faut ajouter à la méthode Contact_SaisieSurChargement
pour renseigner la liste des rendez-vous et des documents
Contact_SaisieSurChargement
La méthode créée au chapitre précédent
prend soudain une autre figure, voici le code qui va permettre de renseigner
les 2 listes :
rcd_GetIndex (rcd_CurrentDataTable)
rcd_IndexToPrp (OnLoad
;"IndexPrp")
Si (rcd_IsVirgen (rcd_CurrentDataTable))
`traitement lors de l'ajout d'un nouveau contact
Fin de si
$nbFound:=rcd_GetLink
(->[Contact];->[RDV])
$ptr:=o ("[RDV]Objet";Est
un tableau texte )
SELECTION VERS TABLEAU([RDV]Objet;$ptr->)
$ptr:=o ("[RDV]Date";Est
un tableau date )
SELECTION VERS TABLEAU([RDV]Date;$ptr->)
$ptr:=o ("[RDV]Heure";Est
un tableau entierlong )
SELECTION VERS TABLEAU([RDV]Heure;$ptr->)
$ptr:=o ("RDVNumeroEnregistrement";Est
un tableau entierlong )
SELECTION VERS TABLEAU([RDV];$ptr->)
REDUIRE SELECTION([RDV];0)
alp_SetArray
alp_SetDefault (->alp_vlRDV;"";"Contact_SurPerteFocusRDV"))
alp_SetColumn (o
("[RDV]Objet");"Objet";0)
alp_SetColumn (o
("[RDV]Date");"Date";1)
alp_SetColumn (o
("[RDV]Heure");"Heure";1)
alp_SetColumn (o
("RDVNumeroEnregistrement");"NumeroEnregistrement";0)
alp_SetHideColumn
alp_SetSort (1)
alp_SetLook (1)
alp_SetApparence
("")
alp_SetOnClic ("")
alp_SetOnDBClic
("Contact_SurDoubleClicRDV"))
alp_SetCurrentArea
(->alp_vlRDV)
alp_SetEntry (Faux)
rcd_GetLink (->[Contact];->[Data])
$ptr:=o ("[Doc]Sujet";Est
un tableau texte )
SELECTION VERS TABLEAU([Data]DisplayList1;$ptr->)
$ptr:=o ("[Doc]NumeroEnregistrement";Est
un tableau entierlong )
SELECTION VERS TABLEAU([RDV];$ptr->)
REDUIRE SELECTION([RDV];0)
alp_SetArray
alp_SetDefault (->alp_vlDoc;"";"Contact_SurPerteFocusDocument"))
alp_SetColumn (o
("[Doc]Sujet");"Objet";0)
alp_SetColumn (o
("[Doc]NumeroEnregistrement");"NumeroEnregistrement";0)
alp_SetHideColumn
alp_SetSort (1)
alp_SetLook (1)
alp_SetApparence
("")
alp_SetOnClic ("")
alp_SetOnDBClic
("Contact_SurDoubleClicDocument"))
alp_SetCurrentArea
(->alp_vlDoc)
alp_SetEntry (Faux)
Dans cette méthode, regardez la ligne de code rcd_GetLink
(->[Contact];->[RDV]).
La méthode rcd_GetLink
charge les enregistrements de la table [RDV] liés à l'enregistrement
de la table [Contact]. Il n'y a pas de lien en structure, pas de paramètrage
particulier, juste deux pointeurs de table à passer, le reste est
assuré par xShell2002.
Cette méthode est un apport d'informations significatif dans le
langage que propose xShell2002. Il montre le lien entre la gestion des
enregistrements et l'utilisation du plug-in AreaList Pro. Cette méthode
est détaillé dans le chapitre Contact_SaisieSurChargement
.
Il y a cependant un point qui est abordé ici même concernant
Contact_SaisieSurChargement.
Pour les deux zones AreaList Pro, je défini les méthodes
qui vont être appelée lors du double clic et lors de la saisie
en liste.
Pour les rendez-vous, j'indique que c'est la méthode Contact_SurPerteFocusRDV
qui est appelée lorsque je modifie une information dans la liste
:
alp_SetDefault
(->alp_vlRDV;"";"Contact_SurPerteFocusRDV"))
Et c'est la méthode Contact_SurDoubleClicRDV qui est appelée
lors du double clic dans la liste.
alp_SetOnDBClic
("Contact_SurDoubleClicRDV"))
Il en est de même pour la liste des documents :
alp_SetDefault (->alp_vlDoc;"";"Contact_SurPerteFocusDocument"))
...
alp_SetOnDBClic
("Contact_SurDoubleClicDocument"))
Il vous faut créer ces quatre méthodes. Il faut en vérité
créer un certain nombre d'autres méthodes, c'est le propos
du chapitre suivant. Suite
>>

Retour | Haut
de page
|