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

 

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