|
Editeur d'interface utilisateur
Cette deuxième partie de l'éditeur
vous donne les éléments nécessaires pour réaliser
le formulaire de saisie de la table [Contact], écire le code spécifique
et entrer les paramètres de l'onglet de l'éditeur d'interface
utilisateur.
Créez le formulaire de saisie de la table
Contact

Ouvrez le formulaire [Data]EntryData, passez sur la page 0, sélectionnez
tout et copiez les objets de cette page. Ceux sont les boutons qui sont
importants, pas le fond d'écran ou les icônes issues de la
librairie d'images. La variable vTMessage est utilisée pour afficher
certains avertissements. Pour simplifier donc, copiez tous.
Dans la table [Contact] créez un
nouveau formulaire. Vous pouvez le nommer à votre convenance. Ici,
il va s'appeler [Contact]DataEntry. Collez sur la page 0 le contenu de
la page 0 du formulaire [Data]DataEntry.
Ouvrez la méthode formulaire de [Data]DataEntry. Vous y trouvez
la méthode frm_OnEntryFormEvent
. Elle est à reporter dans la méthode formulaire de [Contact]DataEntry
.
Ouvrez les propriétés de [Contact]DataEntry. Dans l'onglet
"Dimensionnement" les marges horizontales et verticales doivent
être à 0.
Dans l'onglet "Evenements", il faut cocher les évenements
suivants :
- Sur activation
- Sur case de fermeture
Dans la barre de boutons que vous avez copié, les deux boutons
suivants sont d'une utilisation spécifique :

Nous verrons leur utilité plus tard, ils ne sont pas nécessaires
aux mécanismes de xShell2002.
Passez sur la page 1 de [Contact]DataEntry

Réalisez la première étape de la construction du
formulaire. Regroupez dans le coin supérieur gauche les informations
du contact.
Parenthèse
:
Le champ [Contact]CP a une méthode objet qui permet de rechercher
dans la table l'existance d'un code postal identique et d'affecter la
ville sans avoir à la taper. Ce mécanisme évite d'avoir
une table dédiée qui contient toutes les villes et code
postaux et dans laquelle on fait une recherche pour aider à la
saisie.
Voici ce script :
Si (Evenement formulaire=Sur
données modifiées )
$ville:=""
$code:=[Contact]CP
EMPILER ENREGISTREMENT([Contact])
LIBERER ENREGISTREMENT([Contact])
rcd_CopySelection
(->[Contact])
sch_Set
(1)
$l:=sch_
(->[Contact]CP;$code)
Si ($l#0)
$ville:=[Contact]Ville
Fin de si
sch_Set
rcd_UseSelection
(->[Contact])
DEPILER ENREGISTREMENT([Contact])
[Contact]Ville:=$ville
Fin de si
Le code postal qui vient d'être saisie est passé dans une
variable locale. L'enregistrement courant est empilé et libéré.
La sélection courante est copié. La limite de la recherche
est fixée à 1. Dès qu'un code postal identique est
trouvé, la recherche s'arrête. Si un enregistrement est trouvé,
la variable $ville prend la valeur du champ ville de cet enregistrement.
La limite de la recherche à 1 est effacée, la sélection
courante et l'enregistrement courant sont rechargés, la ville du
contact est renseignée.
Retour dans l'éditeur d'interface
Si vous l'avez fermé, réouvrez
l'éditeur, sélectionnez votre définition Def_Contact
et passez sur la page "Saisie".
Sélectionnez "EntryData" dans le pop up menu à
droite du champ "Formulaire Page" si vous l'avez appelé
ainsi, sinon tapez le nom de votre formulaire.
Sélectionnez la barre de menu "Default" dans le pop up
menu à droite du champ "Barre de menus".
Dans le champ "Sur chargement" tapez "Contact_SaisieSurChargement".
C'est le nom d'une méthode que nous allons créer et écrire
tout de suite après.
Dans le champ "Sur fermeture" tapez "Contact_SaisieSurFermeture".
Il reste un champ intéressant à remplir sur cet exemple,
c'est le champ "Sur impression". Si ce champ reste vide, le
bouton d'impression ne sera pas visible.
Méthode Contact_SaisieSurFermeture
:
rcd_UnLoad (rcd_CurrentDataTable)
NE PAS VALIDER
vFlgExit:=Vrai
La méthode rcd_UnLoad
reçoit en paramètre le pointeur de table courante et se
s'occupe de décharger l'enregistrement. La variable vFlgExit doit
être à vrai pour permettre la sortie de la saisie et le retour
vers la liste. Effectivement, nous entrons dans l'enregistrement en ayant
appelé la méthode alp_DisplayRecord.
C'est ce qui a été demandé dans l'éditeur
de champ et de liste sur le double clic dans la liste AreaList Pro. Dans
cette méhode, le code suivant gère en boucle l'appel des
enregistrements. Pour sortir de la boucle, il faut que vFlgExit soit à
vrai :
Repeter
Si (Enregistrement verrouille(ptrData->))
DIALOGUE(ptrData->;uid_InputForm)
Sinon
MODIFIER ENREGISTREMENT(ptrData->;*)
Fin de si
Jusque ((vFlgExit) | (Non(Enregistrement
charge(rcd_CurrentDataTable->))))
Ce code là est le seul moyen d'éviter les messages 4D disgracieux
sur les enregistrements verrouillés ou les tables en lecture seule.
Si la variable vFlgExit ne passe pas à vrai, point de sortie.
Méthode Contact_SaisieSurChargement
:
rcd_GetIndex (rcd_CurrentDataTable)
rcd_IndexToPrp (OnLoad
;"IndexPrp")
...
La méthode rcd_GetIndex
charge les enregistrements de la table [Index] liés à l'enregistrement
courant. Même si vous n'en avez pas créés, xShell2002
en a créés plusieurs.
La méthode rcd_IndexToPrp
gère les enregistrements de la table [Index] pendant toute la saisie.
Cette méthode sera décrite précisément dans
le cadre de sa documentation.
A la suite de ces deux lignes, écrivez
le code spécifique de votre formulaire de saisie. Ce code sera
executé sur l'évenement "Sur chargement".
Chaque bouton de la barre que vous avez copié possède sa
bulle d'aide qui vous permet d'en déduire l'utilité. La
description complète de l'interface utilisateur fait l'objet d'autres
chapitres.
Grâce à ces boutons, vous gérez automatiquement la
mise à jour de vos documents en vue d'une synchronisation, vous
pouvez paramétrer l'accès à l'enregistrement pour
qu'il ne soit visible ou modifiable que par les utilisateurs de votre
choix.
Vous pouvez conserver l'ensemble des versions successives des enregistrements
et remonter dans ces versions pour retrouver celle qui vous convient.
Vous enregistrez automatiquement les informations d'accès à
l'enregistrement : l'heure et la date de création, le créateur,
la machine sur laquelle la création a eu lieu. Les mêmes
informations sont enregistrées dans le cadre de la modification.
En dernier lieu, vous gérez de manière transparente la suppression
de l'enregistrement et sa récupération possible en ouvrant
la corbeille.
Lorsque vous supprimez un enregistrement, vous ne vous retrouvez pas de
nouveau en liste comme avec le comportement standard de 4D, vous vous
retrouvez sur l'enregistrement suivant et pouvez continuer votre consultation
ou suppression.
Vous n'avez pas les messages standards de 4D qui s'affichent comme "l'objet
enregistrement est déjà en cours d'utilisation par le process..."
ou "La table est en lecture seule".

Retour | Haut
de page
|