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

 

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 pour l'évenement Sur activation du formulaire [Contact]DataEntry

Contact_SaisieSurActivation


Méthodes projet et objet pour la liste Rendez-vous

Contact_SurDoubleClicRDV | Contact_RDVEnrParent | Méthodes objet


Méthodes projet et objet pour la liste Documents

Contact_SurPerteFocusDoc | Contact_SurDoubleClicDoc | Contact_DocEnrParent | Méthodes objet



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