|
Les méthodes pour gérer
les listes incluses dans [Contact]DataEntry
Il y a huit méthodes projet et quatre méthodes
objet à créer. Les deux listes se partagent cet ensemble
de code source. Consultez la description de la méthode Contact_SaisieSurChargement
pour une meilleur compréhension des méthodes suivantes.
La méthode o est utilisée
dans toutes ces méthodes. Consultez sa documentation
pour bien comprendre son rôle.
Méthode projet Contact_SurPerteFocusRDV
Cette méthode est appelée lorsque une saisie en liste est
faite, par exemple pour changer l'heure du rendez-vous. Bien que la méthode
s'appelle "SurPerteFocus", elle n'est en vérité
executé que si une modification a lieu. Voici le code de cette
méthode :
$curRow:=alp_GetRow
Si ($curRow>0)
$ptrArrayRecord:=o
("RDVNumeroEnregistrement")
ALLER A ENREGISTREMENT([RDV];$ptrArrayRecord->{$curRow})
Si (Enregistrement charge([RDV]) & (Non(Enregistrement
verrouille([RDV]))))
Au cas ou
: (alp_GetPtrColumn
=o ("[RDV]Objet"))
$ptr:=alp_GetRow
("[RDV]Objet")
[RDV]Objet:=$ptr->{$curRow}
: (alp_GetPtrColumn
=o ("[RDV]Date"))
$ptr:=o
("[RDV]Date")
[RDV]Date:=$ptr->{$curRow}
: (alp_GetPtrColumn
=o ("[RDV]Heure"))
$ptr:=o
("[RDV]Heure")
[RDV]Heure:=$ptr->{$curRow}
Fin de cas
STOCKER ENREGISTREMENT([RDV])
LIBERER ENREGISTREMENT([RDV])
Sinon
ALERTE("L'enregistrement
est déjà en cours de modification")
Fin de si
Fin de si
La méthode alp_GetRow
retourne la ligne courante de la liste.
$ptrArrayRecord est un pointeur sur un tableau qui contient les numéros
d'enregistrements de la sélection de rendez-vous. C'est grâce
à ce numéro que l'enregistrement est chargé.
alp_GetPtrColumn
retourne un pointeur sur la colonne courante. Le test consite à
savoir dans quelle colonne se trouvait le curseur. En fonction du résultat,
on affecte le champ de la table [RDV] correspondant.
Rapellez vous que cette zone a été construite avec les tableaux
qui ont été rempli avec un SELECTION
VERS TABLEAU . $ptr->{$curRow} nous donne donc le contenu de
la cellule saisie, les tableaux ayant été mis à jour
depuis la zone AreaList Pro avant d'appeler Contact_SurPerteFocusRDV.
L'enregistrement est stocké et libéré.

Retour | Haut
de page
Méthode projet Contact_SurDoubleClicRDV
Cette méthode est appelée lors d'un double clic sur la ligne
d'un rendez-vous.
$curRow:=alp_GetRow
$ptrArrayRecord:=o ("RDVNumeroEnregistrement")
CREER SELECTION SUR TABLEAU([RDV];$ptrArrayRecord->)
ALLER DANS SELECTION([RDV];$curRow)
rcd_CopySelection
(->[RDV];"RDVSelection")
REDUIRE SELECTION([RDV];0)
frm_DefineExecuteForEntry
(OnActivate ;"Contact_SaisieSurActivation"))
o ("RDVNumProcess";Est
un entier )->:=
uid_ (Launch
+OnInputLoad;"Def_RendezVous";"RDVSelection";"cboxReadWrite:=1")
La méthode alp_GetRow
retourne la ligne courante de la liste.
$ptrArrayRecord est un pointeur sur un tableau qui contient les numéros
d'enregistrements de la sélection de rendez-vous.
La sélection de rendez-vous est créée et l'enregistrement
courant correspondant à la ligne sélectionné est
chargé.
La méthode rcd_CopySelection
va enregistrer cette sélection et l'enregistrement courant sur
disque dans un fichier du nom de RDVSelection.
La sélection des rendez-vous n'est plus nécessaire et est
réduite à 0.
La méthode frm_DefineExecuteForEntry
est un point d'entrée dans la méthode formulaire et permet
de définir ce qui doit être executer en fonction de l'évenement
formulaire courant. Dans notre cas, la méthode Contact_SaisieSurActivation
doit être executé sur l'évenement Sur activation.
Le propos de cette méthode est de rafraichir la liste des rendez-vous
chaque fois que la fenêtre du contact repasse au premier plan.
Ce rendez-vous va être affiché dans un nouveau process. La
méthode uid_ va gérer
pour nous toute la mécanique complexe qui va nous permettre de
faire cette opération.
uid_ reçoit comme premier
paramètre une concaténation de deux constantes Launch
+OnInputLoad. Ces deux constantes indique
à uid_ qu'il faut lancer
un nouveau process et ouvrir l'enregistrement directement en page.
Le deuxième paramètre est la définition d'interface
utilisateur de la table [RDV]. Elle n'a pas été encore créée,
le formulaire page de la table [RDV] non plus d'ailleurs. C'est pour après.
Le troisième paramètre est le nom de la sélection
qui vient d'être créée et qui contient la sélection
des rendez-vous du contact et le rendez-vous courant. uid_
va exploiter ces informations pour ouvrir l'enregistrement correspondant
à la ligne double cliquée et permettre de se déplacer
dans la sélection des rendez-vous du contact.
Le dernier paramètre est une chaine de caractère à
executer par uid_ avant d'executer
la méthode de chargement de l'enregistrement. Ici il s'agit de
positionner la variable cboxReadWrite à 1. Cette variable conditionne
l'ouverture de l'enregistrement en lecture seulement ou en lecture écriture.
Elle correspond à la case à cocher 3D du formulaire [Forms]malp_ListH.
Si cette ligne n'était pas executé, le rendez-vous s'ouvrirai
en lecture seule.
uid_ retourne le numéro
du process qui vient d'être créé. Ce numéro
est stocké par l'intermédiaire de o
dans la variable "RDVNumProcess".
Les méthodes Contact_SurPerteFocusDocument et Contact_SurDoubleClicDocument
ont les mêmes actions pour la liste des documents. J'en donne le
code plus bas mais je ne reprend pas les explications, elles sont identiques.
Seules la table et la zone AreaList Pro diffèrent.
Regardons plutôt la méthode Contact_SaisieSurActivation qui
est paramétrée dans la méthode ci-dessus.

Retour | Haut
de page
Méthode projet Contact_SaisieSurActivation
Cette méthode va être executé chaque fois que la fenêtre
du contact va repasser au premier plan. Ce n'est pas le seul code à
s'executer sur l'évenement Sur activation. Ce code s'ajoute au
code standard de xShell2002. Contact_SaisieSurActivation va recharger
les enregistrements liés au contact et rafraîchir la liste
des rendez-vous et des documents. Cette méthode un peu plus longue
que les deux précédentes va être découpée
et expliquée par bloc d'instructions.
`les rendez-vous sont rechargés et la sélection
renseigne à nouveau les tableaux.
$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 ("RDVNumeroEnregistrement";Est
un tableau entierlong )
SELECTION VERS TABLEAU([RDV];$ptr->)
$ptr:=o ("[RDV]Heure";Est
un tableau texte )
TABLEAU TEXTE($ptr->;$nbFound)
DEBUT SELECTION([RDV])
Boucle ($i;1;$nbFound)
$ptr->{$i}:=Chaine([RDV]Heure;2)
ENREGISTREMENT SUIVANT([RDV])
Fin de boucle
REDUIRE SELECTION([RDV];0)
`la zone AreaList Pro est mise à jour
$oldAreaName:=alp_GetCurrentArea
alp_SetCurrentArea
(->alp_vlRDV;Set )
alp_UpDate
`les documents sont rechargés et la sélection
renseigne à nouveau les tableaux.
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([Data];$ptr->)
REDUIRE SELECTION([Data];0)
`la zone AreaList Pro est mise à jour
alp_SetCurrentArea
(->alp_vlDoc;Set )
alp_UpDate
alp_SetCurrentArea
(Pointeur vers($oldAreaName))
`La présente méthode a été
mise en place lorsque l'utilisateur a double cliqué sur un rendez-vous.
`Il existe trois autres appels à cette méthode
: lors du double clic sur un document et
`lors de l'ajout d'un rendez-vous ou d'un document.
`Le rafraichissement n'a d'intérêt que
tant que l'un de ces process est en vie et est suceptible
`d'apporter des modifications.
`La méthode test l'existance des process et si
aucun n'est encore en vie,
`elle se désinstalle pour ne pas être appellée
inutillement.
C_ENTIER LONG($origine;$uniqueID)
C_BOOLEEN($procVisible)
C_ENTIER LONG($procStatut1;$procStatut2;$procStatut3;$procStatut4)
$procStatut1:=Détruit
$procStatut2:=Détruit
$procStatut3:=Détruit
$procStatut4:=Détruit
`on test l'existance de la variable censée recevoir
le numéro de process s'il a été créé.
Si (o ("NouveauRDVNumProcess";o
Existe )->)
`La commande va permettre de savoir si le process existe
toujours
INFORMATIONS PROCESS
(o ("NouveauRDVNumProcess")->;$procNom;$procStatut1;$procTemps;$procVisible;$uniqueID;$origine)
Fin de si
Si (o ("NouveauDocNumProcess";o
Existe )->)
INFORMATIONS PROCESS
(o ("NouveauDocNumProcess")->;$procNom;$procStatut2;$procTemps;$procVisible;$uniqueID;$origine)
Fin de si
Si (o ("RDVNumProcess";o
Existe )->)
INFORMATIONS PROCESS
(o ("RDVNumProcess")->;$procNom;$procStatut3;$procTemps;$procVisible;$uniqueID;$origine)
Fin de si
Si (o ("DocNumProcess";o
Existe )->)
INFORMATIONS PROCESS
(o ("DocNumProcess")->;$procNom;$procStatut4;$procTemps;$procVisible;$uniqueID;$origine)
Fin de si
`si tous les process sont détruits, la méthode
peut être désactivée, il n'y aura plus de mise à
jour externe
Si (($procStatut1=Détruit ) & ($procStatut2=Détruit
) & ($procStatut3=Détruit
) & ($procStatut4=Détruit
))
frm_DefineExecuteForEntry
(OnActivate ;"")
Fin de si

Retour | Haut
de page
Méthode projet Contact_RDVEnrParent
Cette méthode est passée en paramètre à uid_
lors de l'ajout d'un rendez-vous. uid_
va executer cette méthode dans le nouveau process. Le process du
nouveau rendez-vous a besoin de savoir à quel contact il doit être
lié. L'enregistrement contact doit être chargé. La
même méthode existe pour les documents.
$1 est une chaine de caractère qui contient le numéro de
l'enregistrement.
C_TEXTE($1)
LECTURE SEULEMENT([[Contact]])
ALLER A ENREGISTREMENT([[Contact]];Num($1))

Retour | Haut
de page
Méthode objet bAddSub
Cette méthode objet est celle du bouton qui commande l'ajout d'un
rendez-vous. Prenez garde, ce code est en vérité sur deux
lignes et non sur quatre comme il semble ici.
frm_DefineExecuteForEntry
(OnActivate ;"Contact_SaisieSurActivation"))
o ("NouveauRDVNumProcess";Est
un entier )->:=
uid_ (Launch
+Creation ;"Def_RendezVous";
exe_SetExpr
("Contact_RDVEnrParent ("+Chaine(Numero
enregistrement([Contact]))+"')"))
Comme lors du double clic, la méthode frm_DefineExecuteForEntry
installe la méthode Contact_SaisieSurActivation qui s'executera
avec l'évenement Sur activation.
Par contre, uid_ reçoit
des paramètres différents, car l'objectif est de créer
un nouvel enregistrement et non d'afficher un existant.
uid_ reçoit comme premier
paramètre une concaténation de deux constantes Launch
+Creation. Ces deux constantes indique
à uid_ qu'il faut lancer
un nouveau process et créer un enregistrement.
Le deuxième paramètre est la définition d'interface
utilisateur de la table [RDV]. Elle n'a pas été encore créée,
le formulaire page de la table [RDV] non plus d'ailleurs. C'est pour après.
Le dernier paramètre est une chaine de caractère à
executer par uid_ avant d'executer
la méthode de chargement de l'enregistrement. Ici il s'agit de
charger l'enregistrement du contact pour pouvoir l'avoir sous la main
au moment où le rendez -vous va être enregistrer et réaliser
la liaison entre les deux avec la méthode rcd_LinkData
. Cette opération se passse ultèrieurement, dans le paramétrage
de la table [RDV].
uid_ retourne le numéro
du process qui vient d'être créé. Ce numéro
est stocké par l'intermédiaire de o
dans la variable "NouveauRDVNumProcess".
Méthode objet cbReadWrite
Cette ligne de code placée dans une boite à cocher 3D passe
la zone AreaList Pro courante en saisie en liste ou en zone double cliquable.
alp_SetCurrentArea
(->alp_vlRDV;Set )
ALLER A CHAMP(alp_vlRDV)
alp_SetEntry ((Self->=1))

Retour | Haut
de page
Méthode projet pour l'évenement
Sur activation du formulaire [Contact]DataEntry
Contact_SaisieSurActivation
Méthodes projet et objet pour la liste
Rendez-vous
Contact_SurPerteFocusRDV
| Contact_SurDoubleClicRDV
| Contact_RDVEnrParent
| Méthodes objet
Méthodes projet et objet pour la liste
Documents
Contact_SurDoubleClicDoc
| Contact_DocEnrParent
| Méthodes objet

Contact_SurPerteFocusDoc
Cette méthde est conçue de la même manière
que Contact_SurPerteFocusRDV
dans le but de gérer la saisie dans la liste des documents. Dans
cette liste, seul le nom du document est modifiable.
$curRow:=alp_GetRow
Si ($curRow>0)
$ptrArrayRecord:=o
("[Doc]NumeroEnregistrement")
ALLER A ENREGISTREMENT([Data];$ptrArrayRecord->{$curRow})
Si (Enregistrement charge([Data]) & (Non(Enregistrement
verrouille([Data]))))
$ptr:=o
("[Doc]Sujet")
[Data]DisplayList1:=$ptr->{$curRow}
STOCKER ENREGISTREMENT([Data])
LIBERER ENREGISTREMENT([Data])
Sinon
ALERTE("L'enregistrement
est déjà en cours de modification")
Fin de si
Fin de si

Retour | Haut
de page
Contact_SurDoubleClicDoc
Cette méthde est conçue de la même manière
que Contact_SurDoubleClicRDV
dans le but de gérer le double clic dans la liste des documents.
$curRow:=alp_GetRow
$ptrArrayRecord:=o ("[Doc]NumeroEnregistrement")
CREER SELECTION SUR TABLEAU([Data];$ptrArrayRecord->)
ALLER DANS SELECTION([Data];$curRow)
rcd_CopySelection
(->[Data];"DocSelection")
REDUIRE SELECTION([Data];0)
frm_DefineExecuteForEntry
(OnActivate ;"Contact_SaisieSurActivation"))
o ("DocNumProcess";Est
un entier )->:=uid_
(Launch +OnInputLoad
;"Def_Document";"DocSelection";"cboxReadWrite:=1")

Retour | Haut
de page
Contact_DocEnrParent
Cette méthode est identique à Contact_RDVEnrParent.
Elle pourrait être remplacer par cette dernière dans la méthode
objet suivante. C'est juste par souci de clarté qu'elle existe.
C_TEXTE($1)
LECTURE SEULEMENT([Contact])
ALLER A ENREGISTREMENT([Contact];Num($1))

Retour | Haut
de page
Méthode objet bAddSub
Cette méthode diffère de la méthode objet du bouton
d'ajout de rendez-vous par les paramètres passé à
uid_ . Le numéro de
process créé est stocké dans une variable distincte.
La définition de l'interface utilisateur est une autre et la méthode
appelée en execution est aussi différente.
frm_DefineExecuteForEntry
(OnActivate ;"Contact_SaisieSurActivation"))
o ("NouveauDocNumProcess";Est
un entier )->:=
uid_ (Launch
+Creation ;"Def_Document"; exe_SetExpr
("Contact_DocEnrParent ("+Chaine(Numero
enregistrement([Contact]))+"')"))
Méthode objet cbReadWrite
Cette ligne de code placée dans une boite à cocher 3D passe
la zone AreaList Pro courante en saisie en liste ou en zone double cliquable.
alp_SetCurrentArea
(->alp_vlDoc;Set )
ALLER A CHAMP(alp_vlDoc)
alp_SetEntry ((Self->=1))
Maintenant, il faut construire l'interface de ces tables liées...
Suite >>

Retour | Haut
de page
|