DÉVELOPPEMENT D'APPLICATIONS AVEC ...






COURS 13 - L'APPLICATION "GESTION" EN POWERBUILDER ...suite






LA PROCHAINE ÉTAPE:

Maintenant que notre application est rattachée à la base Gestion, nous voulons commencer à faire la maintenance des tables c'est à dire, manipuler les enregistrements dans les tables, en enlever et en ajouter des nouveaux. Nous commençons par les trois tables principales: Employes, Projets et Langages. Voici ce que nous voulons voir comme résultat à la fin de cette leçon:

Fig. 13-1


LES MENUS (Chapitre 7):

Chaque window de notre application a un menu qui lui est associé. Dans le cas de w_genapp_frame, le menu est m_genapp_frame

Fig. 13-2


Puisque le window w_genapp_frame est le premier window ouvert après Logon, c'est dans son menu qu'on doit spécifier ce qu'on veut faire dans l'application. Dans ce cas on veut pouvoir ouvrir nos trois tables principales: Projets, Employés et Langages. Donc, il faut modifier le Open du menu pour y inclure un sous-menu (Next level) qui nomme les fichiers à ouvrir. Dans Pbtutor c'était Customer et Product, içi ce sera Projets, Employés et Langages.

Fig. 13-3


Une fois qu'on a spécifié quelle table ouvrir, il faut pouvoir dire quelle opération on veut faire sur cette table. Avec inherit on crée donc un nouveau menu descendant de m_genapp_sheet qui contient les items dont on a besoin plus spécifiquement, un menu dropdown pour Edit; c'est dans Edit qu'on ajoute les opérations: Update, Insert et Delete; remarquez qu'on pourrait aussi bien les appeler: Mettre à jour, Ajouter et Enlever. On ajoute des pictures sur le button bar pour complèter la présentation. Ce nouveau menu s'appelle m_fileopen et sera associé à chacun des windows qu'on ouvrira plus tard.

Fig. 13-4


LE WINDOW ANCETRE (Chapitre 8):

Dans ce chapitre vous allez découvrir la puissance d'inheritance, une des caractéristiques les plus intéressante du développement object-oriented.

Supposons que dans une application quelconque vous devez maintenir 10 tables (ou 15 tables ou 20 tables). Vous devrez nécéssairement créer 10 (ou 15 ou 20) windows. Chaque window contiendra un menu, des controls et toute une série de propriétés. En plus, l'apparence de tous les windows devrait être identique car cela est plus facile pour les utilisateurs. Donc, si jamais vous décidez de changer l'apparence d'un des windows vous devrez faire le changement dans chacun des 9 (ou 14 ou 19) autres. Inévitablement, des différences se glisseront dans les windows et vous vous retrouverez avec 10 windows différents.

Pour contrer ce problème nous allons créer une fenêtre ancêtre qui contiendra toutes les qualités que nous voulons dans nos windows de maintenance; nous allons spécifier le menu, la taille, la couleur du window ainsi que la position, taille et couleur de tous les controls dans le window. Une fois que nous serons satisfait de ce window standard pour la maintenance des tables dans notre application nous allons nous en servir pour générer, avec inherit, les windows spécifiques à chaque table.

Fig. 13-5


Assurez-vous dès maintenant que vous comprenez la différence entre le DataWindow control et le DataWindow object. Le DW control est un des controls qu'on met dans un window comme un bouton; c'est un espace qui servira à afficher le DW object qui, lui, contient les données de la table. Le DW control qu'on utilise est déjà défini comme user-object dans la librairie tutor_pb.pbl. Vous devez copier cet objet de la librairie tutor_pb.pbl à la librairie de votre application. Utilisez le library painter. Ceci vous permettra de constater que si vous avez des objets dans une application et que vous voulez vous en servir dans une autre application, c'est très facile à faire.

Une fois le window défini à votre goût, allez à Properties, mettez le nom du menu associé à ce window (m_fileopen) dans la case Menu name et sauvegardez sous le nom w_ancetre.

Maintenant, il faut définir des user events. Ces events serviront lorsqu'on veut exécuter une opération de plus d'une façon; par exemple, pour insérer un enregistrement on utilisera d'abord le Menu --> Insert; mais, plus tard on va ajouter un bouton dans le window qui fera lui aussi un Insert et plutôt que d'écrire le script à deux places pour l'Insert, on utilisera le user event ue_insert.

Pour finir vous devez attacher les scripts aux événements appropriés. Lorsque le window s'ouvrira, vous voulez que le premier enregistrement de la table s'affiche dans le DataWindow . Donc, vous mettez ue_retrieve dans le script du Open event de w_ancetre.

De même, ue_insert sera déclenché dans le script du Clicked event du Insert dans le menu; même chose pour ue_update et ue_delete.

LES WINDOWS DESCENDANTS (Chapitre 9):


Maintenant, on bénéficie de tout ce travail qu'on a fait sur w_ancetre. Il faut créer nos 3 windows pour les tables et tout ce qu'on fait pour chaque window c'est d'en créer un nouveau en spécifiant Inherit from w_ancetre et lui donner un nom, par exemple w_employes.

Dans le menu m_genapp_frame où on a spécifié les tables qu'on veut ouvrir, on doit ajouter le script pour chaque table. Par exemple, pour Open --> Employes on écrit:
OpenSheet (w_employe, ParentWindow, 0, original!)

ce qui veut dire que sur clic de Open --> Employe, le window w_employe s'ouvrira.

LES DATAWINDOWS (Chapitre 10):


Le DataWindow object est créé en utilisant le DataWindow painter. Vous choisissez d'abord une table et les colonnes de la table que vous voulez voir, puis un style de présentation. Le painter vous dessine le DW et vous pouvez le changer au besoin. Vous modifiez le DW jusqu'à ce que vous ayez la présentation voulue (voir Fig. 13-1). Utilisez Align, Size, Format, etc. pour que votre DW présente les données d'une façon claire.
Évidemment, pour respecter les spécifications il nous faudra 2 DW object: un pour le Master et un pour le Detail. Celui qui affichera dans le Master est de type tabulaire et le Detail est de type Freeform.





Plus tard vous devrez créer 2 DW objects pour chacun des windows Employes, Projets et Langages.

Pour finir, attachez chaque DataWindow object au window approprié dans la propriété "DataWindow Object Name" du DataWindow control.





[ Page TITRE ]      [ PRÉCÉDENTE ]      [ SUIVANTE ]