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

 

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