Escolar Documentos
Profissional Documentos
Cultura Documentos
-1-
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Programmation du Formulaire Enregistrement........................................................................................................... 40 Ajouter du Code dans lEvnement After Insert pour Envoyer des Emails ............................................................... 40 Utiliser lEvnement After Update pour Envoyer des Emails ..................................................................................... 43 Test de lEnvoi dEmail ................................................................................................................................................. 43 Etape 5 ............................................................................................................................................................................... 44 Implmenter la Scurit dEnregistrement dans lEvnement After Initialize............................................................ 44 C# et VB.Net ........................................................................................................................................................................... 45 Extension des Fonctionnalits de lApplication avec la Programmation dEvnements (C# et VB.Net) ...................... 45 Etape 1 ............................................................................................................................................................................... 46 Utiliser lEvnement Before Show Row pour Changer la couleur du Texte .............................................................. 46 Contrler par Programmation la Valeur Champ ......................................................................................................... 46 Prvisualiser la Page Liste de Tches ........................................................................................................................ 47 Etape 2 ............................................................................................................................................................................... 48 Modifier un Champ Etiquette sur la Page Maintenance de Tches .......................................................................... 48 Utiliser lEvnement Before Show pour Changer la Valeur dune Etiquette ............................................................. 49 Etape 3 ............................................................................................................................................................................... 52 Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches ......................... 52 Ajouter un Champ Cach "Date Created" au Formulaire Enregistrement ................................................................ 52 Tester les Champs Etiquette et Cach........................................................................................................................ 53 Etape 4 ............................................................................................................................................................................... 54 Programmation du Formulaire Enregistrement........................................................................................................... 54 Ajouter du Code dans lEvnement After Insert pour Envoyer des Emails............................................................... 54 Utiliser lEvnement After Update pour Envoyer des Emails ..................................................................................... 57 Test de lEnvoi dEmail ................................................................................................................................................. 59 Etape 5 ............................................................................................................................................................................... 60 Implmenter la Scurit dEnregistrement dans lEvnement After Initialize............................................................ 60 JSP .......................................................................................................................................................................................... 63 Extension des Fonctionnalits de lApplication avec la Programmation dEvnements (JSP) ..................................... 63 Etape 1 ............................................................................................................................................................................... 63 Utiliser lEvnement Before Show Row pour Changer la Couleur du Texte ............................................................. 63 Contrler par Programmation la Valeur Champ ......................................................................................................... 64 Prvisualiser la Page Liste de Tches ........................................................................................................................ 65 Etape 2 ............................................................................................................................................................................... 66 Modifier un Champ Etiquette sur la Page Maintenance de Tches .......................................................................... 66 Utiliser lEvnement Before Show pour Changer la Valeur dune Etiquette ............................................................. 66 Etape 3 ............................................................................................................................................................................... 69 Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches ......................... 69 Ajouter un Champ Cach "Date Created" au Formulaire Enregistrement ................................................................ 70 Tester les Champs Etiquette et Cach........................................................................................................................ 70 Etape 4 ............................................................................................................................................................................... 71 Programmation du Formulaire Enregistrement........................................................................................................... 71 Ajouter du Code dans lEvnement After Insert pour Envoyer des Emails ............................................................... 71 Utiliser lEvnement After Update pour Envoyer des Emails ..................................................................................... 73 Test de lEnvoi dEmail ................................................................................................................................................. 74 Etape 5 ............................................................................................................................................................................... 74 Implmenter la Scurit dEnregistrement dans lEvnement After Initialize............................................................ 74 PHP ......................................................................................................................................................................................... 76 Extension des Fonctionnalits de lApplication avec la Programmation dEvnements (PHP) .................................... 76 Etape 1 ............................................................................................................................................................................... 77 Utiliser lEvnement Before Show Row pour Changer la Couleur du Texte ............................................................. 77 Contrler par Programmation la Valeur Champ ......................................................................................................... 77 Prvisualiser la Page Liste de Tches ........................................................................................................................ 78 Etape 2 ............................................................................................................................................................................... 79 Modifier un Champ Etiquette sur la Page Maintenance de Tches .......................................................................... 79 Utiliser lEvnement Before Show pour Changer la Valeur dune Etiquette ............................................................. 80 Etape 3 ............................................................................................................................................................................... 82 Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches ......................... 82 Ajouter un Champ Cach "Date Created" au Formulaire Enregistrement ................................................................ 83 Tester les Champs Etiquette et Cach........................................................................................................................ 84 Etape 4 ............................................................................................................................................................................... 84 Programmation du Formulaire Enregistrement........................................................................................................... 84 Ajouter du Code dans lEvnement After Insert pour Envoyer des Emails............................................................... 85 Utiliser lEvnement After Update pour Envoyer des Emails ..................................................................................... 87 Test de lEnvoi dEmail ................................................................................................................................................. 88 Etape 5 ............................................................................................................................................................................... 89 Implmenter la Scurit dEnregistrement dans lEvnement After Initialize............................................................ 89
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
-2-
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) ColdFusion .............................................................................................................................................................................. 90 Extension des Fonctionnalits de lApplication avec la Programmation dEvnements (ColdFusion) ......................... 90 Etape 1 ............................................................................................................................................................................... 91 Utiliser lEvnement Before Show Row pour Changer la Couleur du Texte ............................................................. 91 Contrler par Programmation la Valeur Champ ......................................................................................................... 91 Prvisualiser la Page Liste de Tches ........................................................................................................................ 92 Etape 2 ............................................................................................................................................................................... 93 Modifier un Champ Etiquette sur la Page Maintenance de Tches .......................................................................... 93 Utiliser lEvnement Before Show pour Changer la Valeur dune Etiquette ............................................................. 94 Etape 3 ............................................................................................................................................................................... 96 Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches ......................... 96 Ajouter un Champ Cach "Date Created" au Formulaire Enregistrement ................................................................ 97 Tester les Champs Etiquette et Cach........................................................................................................................ 97 Etape 4 ............................................................................................................................................................................... 98 Programmation du Formulaire Enregistrement........................................................................................................... 98 Ajouter du Code dans lEvnement After Insert pour Envoyer des Emails............................................................... 98 Utiliser lEvnement After Update pour Envoyer des Emails ...................................................................................100 Test de lEnvoi dEmail ...............................................................................................................................................101 Etape 5 ............................................................................................................................................................................. 101 Implmenter la Scurit dEnregistrement dans lEvnement After Initialize..........................................................101 Perl ........................................................................................................................................................................................ 103 Extension des Fonctionnalits de lApplication avec la Programmation dEvnements (Perl) ................................... 103 Etape 1 ............................................................................................................................................................................. 103 Utiliser lEvnement Before Show Row pour Changer la Couleur du Texte ........................................................... 103 Contrler par Programmation la Valeur Champ ....................................................................................................... 104 Prvisualiser la Page Liste de Tches ......................................................................................................................105 Etape 2 ............................................................................................................................................................................. 106 Modifier un Champ Etiquette sur la Page Maintenance de Tches ........................................................................ 106 Utiliser lEvnement Before Show pour Changer la Valeur dune Etiquette ........................................................... 106 Etape 3 ............................................................................................................................................................................. 109 Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches ....................... 109 Ajouter un Champ Cach "Date Created" au Formulaire Enregistrement ..............................................................109 Tester les Champs Etiquette et Cach......................................................................................................................110 Etape 4 ............................................................................................................................................................................. 111 Programmation du Formulaire Enregistrement......................................................................................................... 111 Ajouter du Code dans lEvnement After Insert pour Envoyer des Emails............................................................. 111 Utiliser lEvnement After Update pour Envoyer des Emails ...................................................................................113 Test de lEnvoi dEmail ...............................................................................................................................................114 Etape 5 ............................................................................................................................................................................. 114 Implmenter la Scurit dEnregistrement dans lEvnement After Initialize..........................................................114 Conclusion ................................................................................................................................................................................. 116
-3-
-4-
PREAMBULE
CodeCharge et CodeCharge Studio sont des logiciels dvelopps par la socit amricaine YesSoftware, Inc. CodeCharge et CodeCharge Studio sont des marques dposes de YesSoftware, Inc. Toutes les autres marques cites sont des marques ou des marques dposes de leurs proprits respectifs. Le prsent Guide de Dmarrage Rapide (Didacticiel) a t traduit en franais par la socit franaise KAPITEC SOFTWARE S.A.S. (mars 2004). KAPITEC SOFTWARE S.A.S. est le distributeur exclusif des logiciels CodeCharge et CodeCharge Studio pour la France.
Coordonnes de lditeur :
YesSoftware, Inc. 6330 S. Eastern Ave. Suite 5 - Las Vegas, NV 89119 - Etats-Unis Tl.: +1 (888) 241-7338 - Fax : +1 (866) 312-8049 - www.codecharge.com
KAPITEC SOFTWARE S.A.S. 57, boulevard de lEmbouchure - 31075 Toulouse Cedex 2 - France Tl. : 05 34 27 90 03 - Fax : 05 34 27 90 04 - www.kapitec.com
NOTE SUR LINTERFACE EN FRANAIS : Linterface en franais de CodeCharge Studio est disponible depuis la version 2. 1 - Pour changer la langue de l'interface de CodeCharge Studio, slectionnez le menu Tools, puis Language et aprs Franais. 2 - Pour que le changement de langue soit effectif, relancez CodeCharge Studio.
-5-
INTRODUCTION
Le Guide de Dmarrage Rapide (Didacticiel) dtaille les diffrentes tapes pour crer des applications Web, et il est destin vous former de faon pratique lutilisation du logiciel CodeCharge Studio. Les applications Web dtailles vont de la simple application avec une page des applications entirement fonctionnelles. La plupart des tapes ncessaires pour construire les applications sont dcrites dans ce guide. Toutefois, si vous aviez besoin de plus de dtails concernant une caractristique spcifique, merci de vous rfrer au Guide Utilisateur. Il est noter que nous partons du principe que vous disposez dun serveur Web compltement fonctionnel (sur lequel les pages Web seront publies) et dune base de donnes fonctionnelle. L o une connexion base de donnes est requise, lexemple de base de donnes Intranet (se trouvant dans le dossier exemples de linstallation de CodeCharge Studio) est utilis. Le Guide de Dmarrage Rapide traduit en franais propose ce jour uniquement le didacticiel sur la Cration dun Gestionnaire de Tches avec le Gnrateur dApplication de CodeCharge Studio.
-6-
-7-
1 - Spcifiez le nom du nouveau projet : TaskManager (Gestionnaire de Tches), lemplacement sur le disque sur lequel le projet sera publi, et le langage de programmation. 2 - Double-cliquez sur licne Gnrateur dApplication. 3 - Slectionnez licne Gnrateur dApplication , et ensuite cliquez sur le bouton OK pour le lancer.
1 - Langage du Code : Langage de programmation ou technologie devant tre gnr. Les technologies actuellement supportes par CodeCharge Studio sont : ASP 3.0 avec Templates : gnre du code ASP 3.0 et des templates .html spares. ASP.Net C# : gnre des fichiers .aspx avec du code C#. ASP.Net VB : gnre des fichiers .aspx avec du code VB.Net. CFML 4.0.1 : gnre du code ColdFusion 4.0.1. CFML 4.0.1 avec Templates : gnre du code ColdFusion 4.0.1 (.cfm) et des fichiers template .html spars. JSP 1.1 JDK 1.3 : gnre du code JSP 1.1.
-8-
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) PHP 4.0 avec Templates : gnre du code PHP 4.0 (.php) et des fichiers template .html spars. Servlets 2.2 JDK 1.3 avec Templates : gnre du code Java qui utilisent des templates .html. 2 - Langue du Site : Spcifiez la langue parle devant tre utilise lors de la gnration de messages texte pour le site. Par exemple, le texte No records, qui apparat quand il ny a plus dautre enregistrement afficher dans une grille, peut tre gnr dans nimporte laquelle des langues supportes. 3 - Chemin dAccs du Serveur : Le chemin daccs complet o les fichiers gnrs doivent tre publis (localement). Ce chemin est habituellement prdfini par le Gnrateur dApplication et peut tre laiss tel quel. 4 - URL du Serveur : Ladresse Web correspondant au Chemin dAccs du Serveur. Cette URL sera utilise pour visualiser les pages en mode Live Page. Le Gnrateur dApplication dtecte automatiquement lURL approprie qui correspond au chemin daccs du serveur. 5 - Cliquez sur Suivant pour continuer.
1 - Cochez Base de donnes Intranet. 2 - Cliquez sur Suivant pour continuer. Il est noter que vous pouvez utiliser cet exemple de base de donnes sans tenir compte du langage que vous avez slectionn dans ltape prcdente, car la connexion en mode conception est faite par CodeCharge Studio et est indpendante du langage utilis. Si vous utilisez un langage tel que PHP ou ColdFusion, vous d evrez ultrieurement configurer la connexion ct serveur pour vous connecter MySQL ou une autre base de donnes.
-9-
1 - Configurez le Gnrateur dApplication en spcifiant les options de configuration comme indiqu ci-dessous : Permettre le nommage rapide : Slectionnez cette option aussi le Gnrateur dApplication convertira automatiquement les noms des tables en lgendes en Anglais. Par exemple, la table employees (employs) sera montre comme une grille avec le titre "List of Employees". Des champs comme task_name seront convertis en en-ttes de colonne, tels que "Task Name". Incrmentation automatique des cls primaires : Slectionnez cette option pour indiquer que les tables de base de donnes contiennent des champs cl qui sont automatiquement incrments. Le Gnrateur dApplication cachera alors les champs cl des formulaires Maintenance dEnregistrement puisque les utilisateurs nont pas besoin de saisir des valeurs cl. Utiliser un mot-cl simple pour les champs texte et notes pour Recherche : Slectionnez cette option pour gnrer un seul champ Recherche qui recherche tous les champs texte et notes dans les tables/grilles. Si cette option est dcoche, le Gnrateur dApplication cre une section Recherche avec plusieurs champs Recherche (un champ Recherche pour chaque champ texte ou notes dans la table de la base de donnes). Publication du Site aprs la cration complte des pages par le Gnrateur : Indiquez que vous voulez publier le site ds que le Gnrateur dApplication aura cr toutes les pages ncessaires. Ainsi, vous naurez pas vous inquiter de savoir si vous avez oubli de gnrer/publier des fichiers requis pour le bon fonctionnement de lapplication. Utiliser le popup Saisie de Date pour les champs dEntre de date : Slectionnez cette option aussi les champs qui sont dtects comme tant des champs date sont crs avec un composant Saisie de Date ( Date Picker) correspondant. Le composant Saisie de Date permet lutilisateur de spcifier facilement les valeurs de date. 2 - Cliquez sur Suivant pour continuer.
- 10 -
1 - Slectionnez Utiliser lauthentification et laissez toutes les options par dfaut. Le Gnrateur dApplication crera alors la page Login et vous permettra de dfinir un niveau de scurit pour chacune des pages cres. 2 - Cliquez sur Suivant pour continuer.
1 - Slectionnez les tables de bases de donnes suivantes sur lesquelles lapplication sera construite : employees (employs) priorities (priorits) projects (projets) statuses (statuts) tasks (tches) 2 - Cliquez sur Suivant pour continuer.
- 11 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) En cliquant sur le nom de nimporte laquelle des tables, vous pouvez indiquer si les formulaires Recherche, Grille et Enregistrement doivent tous tre sur la mme page pour chacune des tables. 1 - Pour ce didacticiel, configurez les pages comme indiqu ci-apprs. Le Gnrateur dApplication convertira alors les tables en pages Web :
Table employees : page liste de choix demploys et page informations sur les employs, seulement accessibles par les utilisateurs autoriss (User). Table priorities : page liste des priorits et page maintenance des priorits, seulement accessibles par les administrateurs (Admin). Table projects : page liste de projets et page maintenance des projets, seulement accessibles par les administrateurs ( Admin). Table statuses : liste des statuts et page maintenance des statuts, seulement accessibles par les administrateurs (Admin). Table tasks : liste de choix des tches accessible par nimporte qui (None), et page maintenance des tches accessible par les utilisateurs autoriss (User). 2 - Cliquez sur Suivant pour continuer.
Cliquez sur Suivant pour laisser la position horizontale par dfaut des menus pour toutes les pages.
- 12 -
1 - Slectionnez le thme Knockout appliquer au site. Le Gnrateur dApplication utillisera le thme pour appliquer des polices et des couleurs dfinies, chaque page. Le champ 1 Type de Style doit tre paramtr sur le fichier CSS . 2 - Cliquez sur Suivant pour continuer.
CCS : Cascading Style Sheet. Les dfinitions de style sont stockes dans un fichier .css externe.
- 13 -
- 14 -
Dans la fentre Explorateur de Projet cliquez sur le signe '+' ct de la page tasks_list pour louvrir, ceci afin deffectuer des modifications.
Tester la Page
1 - Une fois la page ouverte, cliquez sur Live Page pour visualiser et tester la page fonctionnelle. 2 - Utilisez george/george comme Login. 3 - Aprs la page Login, vous devriez voir une page similaire celle montre ci-dessous :
- 15 -
Le formulaire Grille dans cette page est bas sur la table tasks de la base de donnes. Toutefois, quand le Gnrateur dApplication a cr le formulaire, il a galement pris en compte toutes les relations existantes entre la table tasks de la base de donnes et dautres tables avec des noms de champs similaires. Aussi par exemple, le champ Project Name ci-dessous est bas sur une relation entre la table tasks et la table projects, qui contient les noms de tous les projets.
Relations Implicites
Concrtement le formulaire Grille dans le tasks_list nest pas bas seulement sur la table tasks, mais plutt sur une requte qui runit tous les champs dans les diffrentes tables lies la table tasks. Quand le Gnrateur dApplication cre un formulaire, il tente de dtecter toute relation existante entre la table de la base (dans ce cas prcis la table tasks), et dautres tables au sein de la base de donnes. Si une relation est trouve, le Gnrateur dApplication cr e une requte pour faire une jointure des champs qui constituent la relation. Le diagramme ci-dessous montre la jointure utilise pour le formulaire Grille dans la page tasks_list :
- 16 -
Il est noter que la capacit dtecter des relations varie en fonction du type de base de donnes. Alors quil est possible de dtecter des relations dans des bases de donnes, telles que Microsoft Access, dautres bases de donnes, comme MySQL, ne supportent pas cette caractristique. Si le Gnration dApplication nest pas en mesure de dtecter les relations, elles devront alors tre implmentes manuellement en utilisant la proprit Data Source (Source de Donnes) du formulaire concern. A moins que cela ne soit spcifi diffremment pendant le processus de cration, le Gnrateur dApplication construit des formulaires Grille qui incluent tous les champs dans une table donne. Cependant, vous pouvez trs bien vouloir ne pas montrer certains champs.
- 17 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Dans notre cas, nous ne voulons pas montrer les champs Type Name , Emp Login, Start Date et Finish Date . Vous noterez aussi quil y a deux champs Emp Login : le premier champ correspond au champ user_id_assign_by field dans la table tasks, et le second correspond user_id_assign_to. Nous enlverons le premier champ qui correspond user_id_assign_by et renommerons alors le second avec un nom plus significatif.
1 - Repassez en mode Conception et slectionnez la colonne inutile en cliquant et en positionnant le curseur lintrieur de la colonne. 2 - Cliquez sur licne Supprimer une Colonne dans la barre doutils pour enlever la colonne. Utilisez cette mthode pour supprimer les colonnes suivantes : Type Name Emp Login (le premier champ) Start Date Finish Date
Toujours en mode Conception, changez le texte de lgende pour les champs suivants : Emp Login Assigned To Project Name Project
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 18 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Priority Name Priority Status Name Status
1 - Cliquez sur longlet Live Page . Une fentre avec un message saffiche pour vous avertir que certains des composants nont pas t trouvs dans le code HTML. 2 - Cliquez sur Oui pour confirmer la suppression des colonnes et continuez.
- 19 -
ETAPE 3 Ajouter une ListBox Recher che pour les Noms de Projet
Maintenant, nous allons ajouter un champ supplmentaire de recherche au formulaire Recherche. Nous allons ajouter une ListBox avec des noms de projet, aussi les utilisateurs pourront filtrer la grille en slectionnant un projet depuis la ListBox. En premier lieu, nous avons besoin dajouter une ligne dans le formulaire Recherche dans lequel la ListBox sera place.
- 20 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 2 - Slectionnez licne Insrer une ligne pour ajouter une nouvelle ligne de table en haut de la section Recherche.
1 - Saisissez le texte Project au sein de la cellule nouvellement cre ( gauche de la table). 2 - Positionnez le curseur dans la cellule de droite, comme montr ci-dessus. 3 - Cliquez sur licne Ajouter une ListBox dans la Bote Outils (Toolbox ) pour lajouter la page.
- 21 -
Name (Nom) : s_project - ce nom sera utilis plus tard comme un nom de variable dentre (input) pour la valeur slectionne. Connection (Connexion) : IntranetDB - connexion la base de donnes utiliser pour retrouver les valeurs de la ListBox. Data Source (Source de Donnes) : projects - table contenant les valeurs de la ListBox. Bound Column : project_id - champ de la table dont la valeur sera utilise comme paramtre de recherche. Text Column : project_name - champ de la table dont la valeur sera affiche dans la ListBox. Data Type (Type de Donnes) : Integer - type de la valeur qui sera utilise comme paramtre de recherche (project_id est numrique).
- 22 -
Pour terminer, dplacez la ligne de la table contenant la ListBox vers le bas en : Double-cliquant ct de la ListBox, En slectionnant Dplacer la ligne vers le Bas. Vous pouvez galement effectuer cette opration en positionnant le curseur ct de la ListBox et en utilisant le raccourci clavier Alt + Flche bas.
- 23 -
1 - Slectionnez la grille en cliquant nimporte o dans la lgende de la grille sur la page ou en la slectionnant dans lExplorateur de Projet . 2 - Cliquez sur le bouton [...] de la proprit Data Source (Source de Donnes).
1 - Ajoutez un nouveau paramtre de recherche la grille en : Cliquant sur le bouton [+], Et ensuite en spcifiant le champ tasks.project_id pour quil corresponde au paramtre s_project, qui est le nom de la ListBox
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 24 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) prcdemment cre. 2 - Le champ Type pour le paramtre doit galement tre paramtr Integer (Entier). Le formulaire Grille recevra alors ce nouveau paramtre par lintermdiaire de lURL et montrera seulement les rsultats correspondants. 3 - Cliquez sur OK une fois les informations saisies.
Pour configurer la grille ainsi : 1 - Groupez ensemble tous les paramtres qui correspondent "s_keyword". 2 - Slectionnez les deux premiers paramtres par un glisser de la souris ou en maintenant la touche du clavier Ctrl enfonce et en cliquant sur chacun des paramtres. 3 - Ensuite cliquez sur le bouton [( )] pour ajouter des parenthses autour des paramtres slectionns, ce qui permettra de les grouper ensemble.
- 25 -
Pour configurer loprateur : 1 - Double-cliquez sur le paramtre task_resolution pour ouvrir la fentre Paramtres de la Table. 2 - Changez loprateur Or (Ou) par And (Et).
- 26 -
Une fois que vous avez termin de visualiser la page, cliquez sur un ID de tche pour nimporte laquelle des tches afin de tester la page Maintenance de Tches.
Connexion au Systme
Quand vous cliquez sur nimporte lequel des ID de tche sur la page Liste des Tches (Liste de : Tasks), vous tes redirig (e) vers la page Login sur laquelle vous devez saisir vos login et mot de passe. En effet, la page Enregistrement pour la table tasks (tasks_maint) est configure de manire ce que seuls les utilisateurs connects puissent y accder.
Saisissez george / george pour vous connecter en tant que George Pennington. Cette entre sera stocke dans une variable de session sur le serveur, rendant inutile la reconnexion au systme jusqu lexpiration de la session utilisateur.
- 27 -
- 28 -
1 - Dans la fentre Explorateur de Projet , double-cliquez sur la page tasks_maint pour louvrir. 2 - Pour changer les tiquettes des champs, remplacez : Project Id Project Priority Id Priority Status Id Status Type Id Type Desc Description User Id Assign By Assigned By User Id Assign To Assigned To
- 29 -
1 - Fates un clic droit sur le champ user_id_assign_by. 2 - Slectionnez : Changer De Etiquette et faites de mme pour le champ task_start_date. Le champ task_start_date ayant t chang en champ Etiquette, nous navons plus besoin du composant Saisie de Date ( Date Picker) qui apparat aprs le champ. Le champ Etiquette ne permettant pas la saisie de donne par lutilisateur, le composant Saisie de Date devient inutile. 3 - Dans lExplorateur de Projet, fates un clic droit sur le composant DatePicker_task_start_date . 4 - Slectionnez loption Supprimer.
- 30 -
1 - Placez votre curseur ct du champ Etiquette task_start_date . 2 - Appuyez en mme temps sur les touches du clavier Alt et Flche du bas pour dplacer la ligne en bas. 3 - Recommencez pour le champ user_id _assign_by pour quil apparaisse juste au-dessus du champ task_start_date.
- 31 -
1 - Prvisualisez la page fonctionnelle Maintenance de Tches en : Slectionnant la page tasks_list dans lExplorateur de Projet, Et en slectionnant ensuite une des tches existantes. 2 - Vous pouvez galement ajouter une nouvelle tche en cliquant sur Ajouter Nouveau sous la grille tasks sur la page principale tasks_list. Vous remarquerez que la valeur du champ Assigned By est montre comme une valeur numrique. Vous devrez plus tard implmenter une relation pour afficher des noms. La section suivante explique comment le faire, ainsi que comment implmenter dautres amliorations. REMARQUE : La section qui suit se rfre spcifiquement limplmentation en VBScript/ASP de lexemple du Gestionnaire de Tches. Les autres implmentations sont dcrites dans les sections suivantes et selon cet ordre : ASP et VBScript ASP.NET (C#) JSP PHP ColdFusion Perl
- 32 -
EXTENSION DES FONCTI ONNALITES DE LAPPLICATION AVEC LA PROGRAMMATION DEVENEMENTS ASP et VBScript
Extension des Fonctionnalits de lApplication avec la Programmation dEvnements (ASP et VBScript)
Vous avez certainement remarqu que jusqu prsent vous avez construit votre Gestionnaire de Tches sans avoir vous proccuper du code. En effet, CodeCharge Studio peut vous aider construire des systmes fonctionnels sans programmation ; toutefois la cration de systmes plus sophistiqus requiert un minimum de programmation. Heureusement, CodeCharge Studio facilite la programmation en proposant un diteur de code de haut niveau, en plus des Evnements et des Actions qui vous aident insrer des morceaux de code pr-programms dans le programme. Voici les dfinitions dune Action et dun Evnment : Action Composant de gnration de code dfinissable par lutilisateur, qui insre un bloc de code dans une procdure vnementielle. CodeCharge Studio est fourni avec de nombreuses Actions pr-dfinies, qui se trouvent dans le dossier suivant : (CCS folder)\Components\Actions. Intrieurement, les actions consistent en du code XML et XSL pouvant tre facilement personnalis. Par exemple, une action peut tre paramtre sur un Textbox pour valider une adresse e-mail. Procdure Evnementielle Une procdure automatiquement excute en rponse un vnement lanc par un programme son excution. Les vnements sont les meilleurs emplacements pour mettre du Code Personnalis (Custom Code) .
Etape 1
Utiliser lEvnement Before Show Row pour Changer la Couleur du Texte
Dmarrons la programmation basique avec une tche simple de changement de la couleur dun champ grille sur notre page Liste de Tches. Concrtement, nous allons marquer les tches qui vous sont attribues en affichant votre nom en bleu dans la grille. 1 - Ouvrez la page tasks_list dans lExplorateur de Projet. 2 - Ouvrez larborescence de la grille tasks. 3 - Fates un clic droit sur le champ emp_login1 et slectionnez Proprits. 4 - Dans longlet Donnes, paramtrez la valeur de la proprit Name (Nom) user_id_assign_to . 5 - Dans lExplorateur Projet, fates un clic droit sur le champ task_name et slectionnez Proprits. 6 - Dans longlet Donnes, paramtrez la valeur de la proprit Content (Contenu) HTML. 7 - Slectionnez la grille tasks dans lExplorateur de Projet, ou cliquez nimporte o dans la lgende du formulaire. 8 - Slectionnez longlet Evnements dans la fentre Proprits. 9 - Fates un clic droit sur lvnement Before Show Row et slectionnez Ajouter du Code... .
- 33 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Lvnement Before Show Row se dclenche dans le programme aprs que les valeurs champ soient attribues, mais avant dtre gnres en HTML. En ajoutant du code dans cet vnement, vous pouvez modifier la valeur champ avant quelle ne soit montre.
- 34 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) De plus, vous remarquez que le code est orient objet et vous indiquez que vous voulez attribuer une valeur au champ task_name dans la grille tasks. Value (Valeur) est une proprit de ce champ, qui peut la fois tre lue et modifie. End if Cette ligne marque la fin de la condition if , aussi lexcution du code restant nest pas affecte par cette condition.
Etape 2
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 35 -
Il y a plusieurs mthodes possibles pour traiter de la question. Merci de vous rfrer aux explications qui suivent : 1 - Crez une Requte qui contient plusieurs tables et qui peut tre utilise en tant que source de donnes par le formulaire Enregistrement, comme vous lavez dj fait avec la grille sur la page Liste de Tches. Malheureusement, les requtes qui contiennent plusieurs tables ne peuvent pas tre mises jour de par leur nature, et donc le formulaire Enregistrement entier peut sarrter de fonctionner. En dautres termes, si vous avez indiqu que vous vouliez utiliser une requte contenant une table tasks et employees dans votre formulaire Enregistrement, alors si vous attribuez une tche quelquun dautre, le programme ne pourra pas savoir si vous vouliez mettre jour la table tasks avec le nouveau employee_id, ou si vous vouliez mettre jour la table employees et changer le nom de lemploy. Ainsi, si vous utilisez plusieurs tables comme source de donnes pour le formulaire Enregistrement, vous devrez galement dfinir les oprations Custom Insert , Custom Update et Custom Delete dans les proprits du formulaire Enregistrement pour indiquer quels sont les champs de la base de donnes qui devront tre mis jour avec les valeurs correspondantes saisies sur la page. Cette mthode semble effectivement reprsenter beaucoup deffort juste pour afficher une valeur supplmentaire sur la page. 2 - Utilisez une Procdure Evnementielle pour insrer du Code Personnalis (Custom Code) o vous pourrez produire la valeur dsire par programmation. Cette mthode est trs flexible, dans la mesure o elle vous permet dtendre le code gnr par lajout de votre propre code. Ltape suivante dcrit en dtail cette mthode.
- 36 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 4 - Dans la fentre Proprits, cliquez sur longlet Evnements. 5 - Fates un clic droit sur lvnement Before Show et slectionnez Ajouter du Code... . CodeCharge Studio va alors automatiquement passer en mode Visualisation du Code .
Une fois en mode Visualisation du Code , remplacez le texte suivant : 'Write your own code here. Par : If tasks.EditMode Then tasks.user_id_assign_by.Value = CCDLookUp("emp_name", "employees", "emp_id=" &_ DBIntranetDB.ToSQL(tasks.user_id_assign_by.Value, ccsInteger) , DBIntranetDB) Else tasks.user_id_assign_by.Value = CCDLookUp("emp_name", "employees", "emp_id=" &_ DBIntranetDB.ToSQL(CCGetUserID,ccsInteger), DBIntranetDB) End if Le code ci-dessus est compos des lments suivants : tasks : le nom du formulaire Enregistrement sur la page. EditMode : proprit du formulaire, qui indique si lenregistrement est dit. En fonction de la valeur de cette proprit, nous affichons soit le nom de la personne qui a initialement soumis la tche (mode Edition), ou celui de la per sonne qui soumet la tche (mode Insertion). user_id_assign_by : le nom de lEtiquette au sein de la Grille, et en mme temps le nom du champ de la base de donnes qui a t utilis pour crer cette Etiquette et qui est maintenant sa source de donnes. Value : la proprit dun objet (dans ce cas lEtiquette), qui peut tre lue et/ou modifie. tasks.user_id_assign_by.Value : proprit Value (Valeur) entirement qualifie, qui dit au programme quel objet y appartient. En dautres termes, cest la proprit Value qui appartient au champ user_id_assign_by, qui en retour appartient la Grille tasks. CCDLookUp : fonction de CodeCharge qui supporte la rcupration de valeur de base de donnes base sur un nom de champ, un nom de table, ou une condition. Ici, cette fonction rcupre le Nom de lEmploy (emp_name ) dans la table employees en utilisant la condition suivante : la cl (emp_id) est gale la valeur courante de lEtiquette. DBIntranetDB : le nom de lobjet qui dfinit la connexion base de donnes que vous voulez utiliser dans la fonction CCDLookup. ToSQL : proprit de connexion qui convertit une valeur dans le format support par la base de donnes. Cette proprit requiert un paramtre qui dit si une valeur doit tre convertie en un nombre (ccsInteger, ccsFloat), en du texte (ccsText, ccsMemo), en une date (ccsDate), ou en boolen (ccsBoolean). Dans ce cas, cette proprit convertit la valeur courante de lEtiquette en un nombre qui peut tre utilis avec la fonction CCDLookUp. Il est conseill de toujours utiliser cette proprit avec
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 37 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) CCDLookUp. CCGetUserID : fonction de CodeCharge qui retourne lID de lutilisateur connect au systme. Le code se lit approximativement comme suit : If a record is being edited : Attribue le nom de la personne qui a initialement soumis la question lEtiquette user_id_assign_by, par la recherche du nom de lemploy dans la table employees, en utilisant la fonction CCDLookUp, qui utilise la connexion IntranetDB et la valeur de lEtiquette user_id_assign_by. If a new record is being created : Attribue un utilisateur connect lEtiquette user_id_assign_by en rcuprant son nom dans la table employees et en utilisant la fonction CCDLookUp, qui utilise la connexion IntranetDB et la fonction CCGetUserID (qui permet dobtenir lID de lutilisateur connect). Maintenant que vous avez modifi par programmation la valeur de lEtiquette user_id_assign_by pour sortir le Nom de lEmploy la place de lID, vous allez devoir spcifier que ce champ est dsormais un champ Texte, au lieu dun champ Numrique. 1 - Cliquez sur longlet Donnes dans la fentre Proprits. 2 - Slectionnez Text en tant que Data Type (Type de Donnes).
Etape 3
Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches
Vous avez prcdemment utilis lvnement Before Show pour afficher le nom de la personne qui est attribue une tche. Cependant, les champs Etiquette ne peuvent pas tre mis jour de par leur nature, alors bien que le nom de lemploy soit affich sur la page, il nest pas crit dans la base de donnes. Dans la mesure o nous voulons que la base de donnes enregistre le nom ou lID de la personne qui soumet une tche, nous allons devoir ajouter la logique de programmation pour effectuer cela. 1 - Ajoutez un champ Cach votre page depuis longlet Formulaires de la Bote Outils (Toolbox ). Ce type de champ nest pas visible dans le navigateur, mais il sera utilis pour stocker une valeur et mettre jour la base de donnes. 2 - Configurez le nouveau champ en paramtrant ses proprits comme indiqu ci-dessous : Name (Nom) : assigned_by - le nom du champ Cach qui vient dtre ajout. Cela peut tre nimporte quel nom. Control Source : user_id_assign_by - le champ/colonne de la base de donnes qui sera utilis(e) pour rcuprer la valeur du champ et qui sera mis(e) jour avec la nouvelle valeur en cas de changement. Data Type (Type de Donnes) : Integer - le type de la valeur lie au Control Source. Nos ID utilisateur/employ sont numriques. Default (Par Dfaut) : CCGetUserID - CCGetUserID est une fonction de CodeCharge qui retrouve lID de lutilisateur connect au systme. Ainsi vous pouvez simplement spcifier que vous voulez enregistrer lID de lutilisateur connect dans le champ user_id_assign_by pour chaque nouvelle tche qui sera soumise.
- 38 -
1 - Cliquez sur le champ task_start_date dans lExplorateur de Projet. 2 - Dans la fentre Proprits, paramtrez Default Value (Valeur Par Dfaut) CurrentDateTime comme vous lavez fait avec le champ date_created. Cest ainsi que le champ Etiquette peut afficher la date bien que le champ Cach ne soit pas visible pour lutilisateur.
- 39 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 3 - La version de base de votre Gestionnaire de Tches est dsormais finalise. Ne pas oublier de sauvegarder !
Etape 4
Programmation du Formulaire Enregistrement
Maintenant que vous avez cr une application simple de Gestion de Tches, vous souhaitez certainement ltendre pour quelle soit la fois plus pratique et plus utile. Dans cette section, vous allez avoir un aperu sur la manire dimplmenter des applications pratiques et sophistiques par lajout de code et dactions, ceci afin doffrir des fonctionnalits supplmentaires votre Gestionnaire de Tches. Vous allez apprendre : Envoyer des notifications demail la personne qui la tche est attribue, Autoriser seulement la personne qui la tche est attribue la modifier.
Ajouter du Code dans lEvnement After Insert pour Envoyer des Emails
1 - Slectionnez le formulaire tasks dans la page tasks_maint en le slectionnant depuis lExplorateur de Projet, ou en cliquant nimporte o dans la lgende du formulaire. 2 - Dans la fentre Proprits, cliquez sur longlet Evnements. 3 - Slectionnez lvnement After Insert. 4 - Cliquez sur le bouton [+]. 5 - Slectionnez Ajouter du Code...
- 40 -
Une fois en mode Visualisation du Code , remplacez le commentaire gnr : ' Write your own code here. Par le code ci-dessous : Dim Mailer Set Mailer = Server.CreateObject("Persits.MailSender") Mailer.From = CCDLookUp("email", "employees", "emp_id=" &_ DBIntranetDB.ToSQL(CCGetUserID,ccsInteger), DBIntranetDB) Mailer.FromName = CCDLookUp("emp_name", "employees", "emp_id=" &_ DBIntranetDB.ToSQL(CCGetUserID, ccsInteger), DBIntranetDB) Mailer.AddAddress CCDLookUp("email", "employees", "emp_id=" &_ DBIntranetDB.ToSQL(tasks.user_id_assign_to.Value, ccsInteger), DBIntranetDB) Mailer.Host = "mysmtphost.com" Mailer.IsHTML = True Mailer.Subject = "New task for you" Mailer.Body = "The following task was submitted:<br><br>" &_ "Task ID: " & CCDLookUp("max(task_id)", "tasks", "user_id_assign_by=" &_ DBIntranetDB.ToSQL(CCGetUserID, ccsInteger), DBIntranetDB) &_ "<br><br>" & tasks.task_desc.Text Mailer.Send set Mailer = Nothing Comme vous avez d vous en rendre compte, le code ci-dessus envoie des emails aux utilisateurs qui de nouvelles tches sont attribues. Voici des informations supplmentaires que vous devez connatre : 1 - Le code du dessus ncessite que vous installiez sur votre serveur le composant Email "ASPEmail", que vous pouvez obtenir gratuitement sur http://www.aspemail.com/ Il y a beaucoup dautres composants email et vous pouvez modifier le programme du dessus en vous rfrant la documentation concernant le composant que vous avez choisi dutiliser. 2 - Vous devez remplacer le paramtre "mysmtphost.com" par un serveur SMTP que vous tes autoris utiliser. Cest gnralement le mme serveur que celui configur comme "Outgoing Mail Server (SMTP)" dans votre messagerie email client (Microsoft Outlook ou Outlook Express).
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 41 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Ce qui suit est une explication du code du dessus : Dim Mailer : Dfinit lobjet Mailer, qui plus tard initialisera le composant ASPEmail. Set Mailer = Server.CreateObject("Persits.MailSender") Cre lobjet Mailer et initialise le composant ASPEmail. Mailer.From = CCDLookUp("email", "employees", "emp_id=" & DBIntranetDB.ToSQL(CCGetUserID,ccsInteger), DBIntranetDB) Paramtre ladresse email From (Expditeur) la valeur du champ email dans la table employees o emp_id correspond lutilisateur connect. La fonction CCDLookUp est utilise pour rcuprer une valeur de base de donnes, tandis que CCGetUserID retrouve lID de la connexion utilisateur en cours. Mailer.FromName = CCDLookUp("emp_name", "employees", "emp_id=" & DBIntranetDB.ToSQL(CCGetUserID, ccsInteger), DBIntranetDB) Paramtre le nom From (Expditeur) la valeur du champ emp_name pour lutilisateur en cours. Mailer.AddAddress CCDLookUp("email", "employees", "emp_id=" & DBIntranetDB.ToSQL(tasks.user_id_assign_to.Value, ccsInteger), DBIntranetDB) Paramtre ladresse email To (Destinataire) lemail de la personne qui est attribue la tche. La fonction CCDLookUp est utilise ici pour rcuprer ladresse email approprie. Mailer.Host = "mysmtphost.com" Spcifie le serveur SMTP par lequel lemail sera envoy (remplacez cette valeur par un hte SMTP que vous tes autoris utiliser). Mailer.IsHTML = True Spcifie que lemail sera envoy au format HTML (et non pas au format texte brut). Mailer.Subject = "New task for you" Lobjet de lemail envoyer. Mailer.Body = "The following task was submitted:<br><br>" & "Task ID: " & CCDLookUp("max(task_id)", "tasks", "user_id_assign_by=" & DBIntranetDB.ToSQL(CCGetUserID, ccsInteger), DBIntranetDB) & "<br><br>" & tasks.task_desc.Text Le corps de lemail qui comprend la description de la tche et de lID de tche. Le dernier ID de tche insre peut tre obtenu en utilisant diffrentes mthodes avec plusieurs bases de donnes. Malheureusement, Microsoft Access ne supporte pas la rcupration du dernier enregistrement insr, aussi vous devrez utiliser la fonction CCDLookUp pour rcuprer le plus grand ID de tche soumis par lutilisateur connect (en supposant que les ID de tches soient crs par incrmentation). Mailer.Send Envoie lemail.
- 42 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) set Mailer = Nothing Se dbarrasse de lobjet Mailer pour librer des ressources matrielles.
- 43 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 1 - Vous devez ajouter de nouveaux utilisateurs votre base de donnes avec des adresses email correctes, ou modifier les utilisateurs existants en changeant leur adresse email : A - Vous pouvez le faire en ouvrant la base de donnes Intranet.mdb qui se trouve dans votre rpertoire Projet. B - Sinon, vous pouvez utiliser le Gestionnaire de Tches. Allez la page Employs pour y visualiser les emails utilisateur et les modifier. 2 - Une fois vos utilisateurs configurs avec le test demails, sauvegardez votre projet et passez en mode Live Page pour tester votre systme. Remarque : Vous aurez besoin de Microsoft Access 2000 ou une version suprieure pour diter manuellement le fichier base de donnes. Si votre code email fonctionne correctement, vous devez alors vous retrouver sur la page Liste de Tches aprs lajout ou la modification dune tche, et la personne qui la tche a t attribue doit recevoir un email.
Etape 5
Implmenter la Scurit d Enregistrement dans lEvnement After Initialize
Votre Gestionnaire de Tches est dsormais pratiquement complet, seule une fonctionnalit pouvant savrer importante manque, savoir la Scurit. Dans ltat actuel du gestionnaire, nimporte qui peut modifier et supprimer nimporte quelle tche. Vous voudrez certainement limiter laccs pour que seuls les employs autoriss puissent mettre jour leurs tches. Il y a plusieurs faons de procder, et nous allons examiner plusieurs dentre elles. 1 - Cliquez sur la page tasks_maint dans lExplorateur de Projet. 2 - Dans la fentre Proprits, slectionnez longlet Evnements. 3 - Ajoutez Custom Code (Code Personnalis) lvnement After Initialize de la page. Procdez comme suit : Une fois en mode Visualisation de Code , remplacez le commentaire gnr : ' Write your own code here. Par ce code : Dim current_task current_task = CInt(Request.QueryString("task_id")) If current_task <> 0 and CCGetUserID <> CCDLookUp("user_id_assign_to", "tasks", "task_id=" &_ DBIntranetDB.ToSQL(current_task, ccsInteger), DBIntranetDB) Then tasks.Visible = False ' Redirect = "tasks_list.asp" ' tasks.UpdateAllowed = False ' tasks.DeleteAllowed = False End if Le code ci-dessus vous permet de tester les mthodes suivantes pour implmenter la scurit denregistrement : Ne pas montrer la Tche (formulaire Enregistrement) sur la page si la tche slectionne nappartient pas lutilisateur connect. Un utilisateur non autoris verra une page blanche. Vous pouvez cacher nimporte quel formulaire sur une page en lui attribuant une valeur False (Faux) pour la proprit Visible (visible) du formulaire. Le code current_task <> 0 dans la condition if prcise que le code doit seulement tre excut si un utilisateur essaie de modifier une tche existante et qui ne lui est pas attribue. La condition if sassure aussi que tous les utilisateurs peuvent crer de nouvelles tches. Vous pouvez tester cette fonctionnalit en insrant le code du dessus dans lvnement, puis en passant en mode Live Page et en essayant de modifier une tche qui ne vous est pas attribue dans ce cas vous verrez une page vide. Bien quune telle fonctionnalit ne soit pas trs utile, elle illustre comment cacher des formulaires sur une page. Ajoutez un autre formulaire Enregistrement votre page qui ne puisse pas tre mis jour et qui ait seulement des champs Etiquette qui montrent les informations. Une fois que vous avez deux formulaires sur la page, vous pouvez cacher chaque formulaire par programmation en utilisant des critres dexclusion.
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 44 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Rediriger des utilisateurs non autoriss sur une autre page. Seuls les utilisateurs qui sont attribues des tches peuvent visualiser la page. Vous pouvez mettre en application et tester cette fonctionnalit en modifiant lgrement le code du dessus comme montr cidessous : Dim current_task current_task = CInt(Request.QueryString("task_id")) If current_task <> 0 and CCGetUserID <> CCDLookUp("user_id_assign_to", "tasks", "task_id=" &_ DBIntranetDB.ToSQL(current_task, ccsInteger), DBIntranetDB) Then ' tasks.Visible = False Redirect = "tasks_list.asp" ' tasks.UpdateAllowed = False ' tasks.DeleteAllowed = False End if Le code ci-dessus montre que vous devez commenter la ligne active prcdemment, et activer la ligne qui commence avec Redirect. Redirect est une variable utilise par CodeCharge Studio pour dterminer si la page en cours doit tre redirige vers une autre page, par exemple dans le cas o un utilisateur nest pas connect. Cette variable peut tre utilise seulement sur les pages qui ont un accs restreint et qui requirent louverture dune session. Vous pouvez simplement attribuer la page de destination la variable Redirect et la page sera alors automatiquement redirige. Vous pouvez tester cette fonctionnalit en modifiant le code comme montr, puis en passant en mode Live Page, et en essayant de modifier une tche qui ne vous est pas attribue.
C# et VB.Net
Extension des Fonctionnalits de lApplication avec la Programmation dEvnements (C# et VB.Net)
Vous avez certainement remarqu que jusqu prsent vous avez construit votre Gestionnaire de Tches sans avoir vous proccuper du code. En effet, CodeCharge Studio peut vous aider construire des systmes fonctionnels sans programmation ; toutefois la cration de systmes plus sophistiqus requiert un minimum de programmation. Heureusement, CodeCharge Studio facilite la programmation en proposant un diteur de code de haut niveau, en plus des Evnements et des Actions qui vous aident insrer des morceaux de code pr-programms dans le programme. Voici les dfinitions dune Action et dun Evnment : Action Composant de gnration de code dfinissable par lutilisateur, qui insre un bloc de code dans une procdure vnementielle. CodeCharge Studio est fourni avec de nombreuses Actions pr-dfinies, qui se trouvent dans le dossier suivant : (CCS folder)\Components\Actions. Intrieurement, les actions consistent en du code XML et XSL pouvant tre facilement personnalis. Par exemple, une action peut tre paramtre sur un Textbox pour valider une adresse e-mail. Procdure Evnementielle Une procdure automatiquement excute en rponse un vnement lanc par un programme son excution. Les vnements sont les meilleurs emplacements pour mettre du Code Personnalis (Custom Code).
- 45 -
Etape 1
Utiliser lEvnement Before Show Row pour Changer la couleur du Texte
La premire amlioration va donc consister changer la couleur dun champ grille sur la page Task List. Concrtement, nous allons faire ressortir les tches attribues lutilisateur ayant une session ouverte, en les affichant en bleu. 1 - Ouvrez la page tasks_list dans lExplorateur de Projet. 2 - Ouvrez larborescence de la grille tasks. 3 - Fates un clic droit sur le champ emp_login1 et slectionnez Proprits. 4 - Dans longlet Donnes, paramtrez la valeur de la proprit Name (Nom) user_id_assign_to . 5 - Dans lExplorateur Projet, fates un clic droit sur le champ task_name et slectionnez Proprits. 6 - Dans longlet Donnes, paramtrez la valeur de la proprit Content (Contenu) HTML. 7 - Slectionnez la grille tasks dans lExplorateur de Projet, ou cliquez nimporte o dans la lgende du formulaire. 8 - Slectionnez longlet Evnements dans la fentre Proprits. 9 - Fates un clic droit sur lvnement Before Show Row et slectionnez Ajouter du Code... . Lvnement Before Show Row se dclenche dans le programme aprs que les valeurs champs soient attribues, mais avant dtre gnres en HTML. En ajoutant du code dans cet vnement, vous pouvez modifier la valeur champ avant quelle ne soit montre.
- 46 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) if((DataItem.user_id_assign_to.Value).ToString() == DBUtility.UserLogin ) { taskstask_name.Text = "<b><font color='blue'>" + (DataItem.task_name.Value).ToString() + "</b></font>"; } VB.Net If tasksuser_id_assign_to.Text = DBUtility.UserLogin Then taskstask_name.Text = "<b><font color='blue'>" & taskstask_name.Text & "</b></font>" End if Ce qui suit explique comment le code ajout ci-dessus fonctionne : La condition if (si) est true (vraie) seulement si le champ grille task_name (contenant le nom de login de lutilisateur qui la tche est attribue) est gale au nom de login de lempoy connect au gestionnaire. Donc, une fois connect au gestionnaire, le programme reconnatra vos tches en comparant votre nom celui de la personne qui est attribue chaque tche. C# taskstask_name.Text = "<b><font color='blue'>" + (DataItem.task_name .Value).ToString() + "</b></font>"; VB.Net taskstask_name.Text = "<b><font color='blue'>" & taskstask_name.Text & "</b></font>" Ce code est excut si la condition prcdente if est rencontre. Il modifie la valeur de lEtiquette tasktask_name. La valeur champ est remplace par la valeur nom de login encapsule dans du code HTML, qui spcifie la couleur de la police comme le bleu, et ajoute un tag HTML <b> pour obtenir une police en gras.
- 47 -
Etape 2
Modifier un Champ Etiquette sur la Page Maintenance de Tches
Maintenant procdons une modification ncessaire sur la page Maintenance de Tches sur laquelle vous avez d remarqu que le champ Etiquette Assigned By naffiche pas le nom de lemploy, mais lID, comme montr ci-dessous ; cest parce que la table tasks contient seulement lID utilisateur, alors que la table employees contient les noms des utilisateurs rels.
- 48 -
Il y a plusieurs mthodes possibles pour traiter de la question. Merci de vous rfrer aux explications qui suivent : 1 - Crez une Requte qui contient plusieurs tables et qui peut tre utilise en tant que source de donnes par le formulaire enregistrement, comme vous lavez dj fait avec la grille sur la page Liste de Tches. Malheureusement, les requtes qui contiennent plusieurs tables ne peuvent pas tre mises jour de par leur nature, et donc le formulaire Enregistrement entier peut sarrter de fonctionner. En dautres termes, si vous avez indiqu que vous vouliez utiliser une requte contenant une table tasks et employees dans votre formulaire Enregistrement, alors si vous attribuez une tche quelquun dautre, le programme ne pourra pas savoir si vous vouliez mettre jour la table tasks avec le nouveau employee_id, ou si vous vouliez mettre jour la table employees et changer le nom de lemploy. Ainsi, si vous utilisez plusieurs tables comme source de donnes pour le formulaire Enregistrement, vous devrez galement dfinir les oprations Custom Insert , Custom Update et Custom Delete dans les proprits du formulaire Enregistrement pour indiquer quels champs de la base de donnes devront tre mis jour avec les valeurs correspondantes saisies sur la page. Cette mthode semble effectivement reprsenter beaucoup deffort juste pour afficher une valeur supplmentaire sur la page. 2 - Utilisez une Procdure Evnementielle pour insrer du Code Personnalis (Custom Code) o vous pourrez produire la valeur dsire par programmation. Cette mthode est trs flexible, dans la mesure o elle vous permet dtendre le code gnr par lajout de votre propre code. Ltape suivante dcrit en dtail cette mthode.
- 49 -
Une fois en mode Visualisation du Code , remplacez le texte suivant : C# // Write your own code here. VB.Net ` Write your own code here. Par : C# if (IsInsertMode) { SqlCommand userNameCmd = new SqlCommand("SELECT emp_name FROM" + "employees WHERE emp_id=" + DBUtility.UserId.ToString(), Settings.IntranetDBDataAccessObject); tasksuser_id_assign_by.Text = userNameCmd.ExecuteScalar().ToString(); } else { SqlCommand userNameCmd = new SqlCommand( "SELECT emp_name FROM" + "employees WHERE emp_id=" + item.user_id_assign_by.Value.ToString(), Settings.IntranetDBDataAccessObject); tasksuser_id_assign_by.Text = userNameCmd.ExecuteScalar().ToString(); }
- 50 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) VB.Net If IsInsertMode = True Then tasksuser_id_assign_by.Text = Convert.ToString(Settings.IntranetDBDataAccessObject.ExecuteScalar( "SELECT emp_name FROM employees WHERE emp_id="& DBUtility.UserId )) Else tasksuser_id_assign_by.Text = Convert.ToString(Settings.IntranetDBDataAccessObject.ExecuteScalar( "SELECT emp_name FROM employees WHERE emp_id="& Convert.ToString( tasksuser_id_assign_by.Text))) End if Dans le morceau de code ci-dessus, nous avons un bloc if qui vrifie la valeur de la variable Boolenne IsInsertMode. Cette variable est gnre par CodeCharge Studio dans lvnement Before Show des formulaires Enregistrement. Puisque le mme formulaire Enregistrement CodeCharge Studio peut tre utilis pour mettre jour les enregistrements, pour supprimer les enregistrements comme pour insrer de nouveaux enregistrements, cette variable est utilise pour dterminer ltat du formulaire Enregistrement au runtime ( lexcution). Si cette variable est true (vraie), alors le formulaire Enregistrement insre un nouvel enregistrement, sinon elle est soit mise jour, soit supprime. Les blocs if et else dfinissent un objet SqlCommand, qui comme indiqu prcdemment vous aide excuter des commandes de la base de donnes. La requte SQL passe aux deux mthodes retourne le nom de lutilisateur stock dans le champ emp_name de la table employees. Une fois que le nom de lutilisateur est rcupr, il est paramtr sur lEtiquette tasksuser_id_assign_by . La seule diffrence entre les deux requtes SQL est que si lutilisateur insre un nouvel enregistrement i.e. la variable IsInsertMode est true (vraie), vous passez lID de lutilisateur connect depuis la variable DBUtility.UserId. Si lutilisateur met jour ou supprime lenregistrement, alors vous passez lID utilisateur de lutilisateur qui la tche tait prcdemment attribue. La proprit user_id_assign_by de lobjet item contient cette valeur rcupre dans la base de donnes. Le code entier se lit approximativement comme suit : If a new record is being created : Utilise la valeur de DBUtility.UserId pour obtenir le nom de lutilisateur connect et pour attribuer son nom la valeur de lEtiquette tasksuser_id_assign_by . If a record is being edited : Utilise la valeur de tasksuser_id_assign_by pour obtenir le nom de lutilisateur qui la tche a t attribue et pour attribuer son nom la valeur de lEtiquette tasksuser_id_assign_by . Maintenant que vous avez modifi par programmation la valeur de lEtiquette user_id_assign_by pour produire le Nom de lEmploy au lieu de son ID, vous allez avoir besoin de spcifier que ce champ est dsormais un champ Texte, et non un champ Numrique. 1 - Cliquez sur longlet Donnes dans la fentre Proprits. 2 - Slectionnez Text en tant que Data Type (Type de Donnes).
- 51 -
Etape 3
Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches
Vous avez prcdemment utilis lvnement Before Show pour afficher le nom de la personne qui est attribue une tche. Cependant, les champs Etiquette ne peuvent pas tre mis jour de par leur nature, alors bien que le nom de lemploy soit affich sur la page, il nest pas crit dans la base de donnes. Dans la mesure o nous voulons que la base de donnes enregistre le nom ou lID de la personne qui soumet une tche, nous allons devoir ajouter la logique de programmation pour effectuer cela. 1 - Ajoutez un champ Cach votre page depuis longlet Formulaires de la Bote Outils (Toolbox). Ce type de champ nest pas visible dans le navigateur, mais il sera utilis pour stocker une valeur et mettre jour la base de donnes. 2 - Configurez le nouveau champ en paramtrant ses proprits comme indiqu ci-dessous : Name (Nom) : assigned_by - le nom du champ Cach qui vient dtre ajout. Cela peut tre nimporte quel nom. Control Source : user_id_assign_by - le champ/colonne de la base de donnes qui sera utilis(e) pour rcuprer la valeur du champ et qui sera mis(e) jour avec la nouvelle valeur en cas de changement. Data Type (Type de Donnes) : Integer - le type de la valeur lie au Control Source . Nos ID utilisateur/employ sont numriques. Default (Par Dfaut) : DBUtility.UserId - valeur Default pour ce champ sil est vide. DBUtility .UserId : proprit de CodeCharge qui rcupre lID utilisateur de lutilisateur connect au systme. Ainsi vous pouvez simplement spcifier que vous voulez enregistrer lID de lutilisateur courant dans le champ user_id_assign_by pour chaque nouvelle tche qui sera soumise.
- 52 -
1 - Cliquez sur le champ task_start_date dans lExplorateur de Projet. 2 - Dans la fentre Proprits, paramtrez Default Value (Valeur Par Dfaut) CurrentDateTime. Cest ainsi que le champ Etiquette peut afficher la date bien que le champ Cach ne soit pas visible pour lutilisateur.
- 53 -
Etape 4
Programmation du Formulaire Enregistrement
Maintenant que vous avez cr une application simple de Gestion de Tches, vous souhaitez certainement ltendre pour quelle soit la fois plus pratique et plus utile. Dans cette section, vous allez avoir un aperu sur la manire dimplmenter des applications pratiques et sophistiques par lajout de code et dactions, ceci afin doffrir des fonctionnalits supplmentaires votre Gestionnaire de Tches. Vous allez apprendre : Envoyer des notifications demail la personne qui la tche est attribue, Autoriser seulement la personne qui la tche est attribue la modifier.
Ajouter du Code dans lEvnement After Inser t pour Envoyer des Emails
1 - Slectionnez le formulaire tasks dans la page tasks_maint en le slectionnant depuis lExplorateur de Projet, ou en cliquant nimporte o dans la lgende du formulaire. 2 - Dans la fentre Proprits, cliquez sur longlet Evnements. 3 - Slectionnez lvnement After Insert. 4 - Cliquez sur le bouton [+]. 5 - Slectionnez Ajouter du Code...
Une fois en mode Visualisation du Code , remplacez le commentaire gnr : C# ' Write your own code here. VB.Net ' Write your own code here.
- 54 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Par le code ci-dessous : C# SqlCommand userEmail = new SqlCommand( "SELECT email FROM" + "employees WHERE emp_id=" + DBUtility.UserId, Settings.IntranetDBDataAccessObject );
SqlCommand assignedUserEmail = new SqlCommand( "SELECT email FROM" + "employees WHERE emp_id=" + item.user_id_assign_to.Value.ToString(), Settings.IntranetDBDataAccessObject );
SqlCommand taskId = new SqlCommand( "SELECT max(task_id) FROM" + "tasks WHERE user_id_assign_by=" + DBUtility.UserId, Settings.IntranetDBDataAccessObject );
newMessage.From = userEmail.ExecuteScalar().ToString(); newMessage.To = assignedUserEmail.ExecuteScalar().ToString(); newMessage.Subject = "New task for you!"; newMessage.BodyFormat = System.Web.Mail.MailFormat.Html; newMessage.Body = "The following task was submitted:<br><br>" + "Task ID :"+ taskId.ExecuteScalar().ToString() + "<br><br>"+ item.task_desc.Value;
- 55 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) VB.Net Dim userEmail, assignedUserEmail, taskId As String
newMessage.From = userEmail newMessage.To = assignedUserEmail newMessage.Subject = "New task for you!" newMessage.BodyFormat = System.Web.Mail.MailFormat.Html newMessage.Body = "The following task was submitted:<br><br> Task ID :" & taskId & "<br><br>" & item.task_desc.Value
System.Web.Mail.SmtpMail. SmtpServer = "localhost" System.Web.Mail.SmtpMail.Send(newMessage) Comme vous pouvez le constater, le code ci-dessus envoie des emails aux utilisateurs qui de nouvelles tches sont attribues. Voici des informations que vous devez connatre : 1 - Le code ci-dessus utilise les classes fournies par le framework .NET pour envoyer des e-mails, aussi vous navez pas besoin dinstaller des composants supplmentaires. 2 - Les classes du framework .NET reposent sur le composant CDO pour envoyer des e-mails ; par consquent vous avez besoin dun service SMTP install sur le serveur hbergeant cette application. Ce qui suit est une explication du code du dessus : SqlCommand userEmail = new SqlCommand("SELECT email FROM" + "employees WHERE emp_id=" + DBUtility.UserId, Settings.IntranetDBDataAccessObject ); SqlCommand assignedUserEmail = new SqlCommand( "SELECT email FROM" + "employees WHERE emp_id=" + item.user_id_assign_to.Value.ToString(), Settings.IntranetDBDataAccessObject );
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 56 -
SqlCommand taskId = new SqlCommand( "SELECT max(task_id) FROM" + "tasks WHERE user_id_assign_by=" + DBUtility.UserId , Settings.IntranetDBDataAccessObject ); Dans le code du dessus trois objets SqlCommand sont dfinis. Comme vous devez vous en souvenir, ces objets sont utiliss pour excuter des requtes de la base de donnes. Le premire requte SQL est utilise pour rcuprer ladresse email de lutilisateur connect. La seconde requte SQL rcupre ladresse email de lutilisateur qui la tche est attribue. La proprit user_id_assign_to de lobjet item est utilise pour obtenir lID de lutilisateur qui la tche est attribue. Enfin, la dernire requte SQL est utilise pour obtenir lID de la tche. Le dernier ID insr de tche peut tre obtenu en utilisant diffrentes mthodes avec diffrentes bases de donnes. Malheureusement, Microsoft Access ne supporte pas la rcupration du dernier enregistrement insr ; donc vous allez avoir besoin dutiliser lobjet SqlCommand pour consulter le plus grand ID de tche soumis par lutilisateur connect (en supposant que les ID de tches sont crs par incrmentation). System.Web.Mail.MailMessage newMessage = new System.Web.Mail.MailMessage(); Cr un objet MailMessage, qui est sous lespace de nommage System.Web.Mail. newMessage.From = userEmail.ExecuteScalar().ToString(); newMessage.To = assignedUserEmail.ExecuteScalar().ToString(); newMessage.Subject = "New task for you!"; newMessage.BodyFormat = System.Web.Mail.MailFormat.Html; newMessage.Body = "The following task was submitted:<br><br>" + "Task ID :"+ taskId.ExecuteScalar().ToString() + "<br><br>"+ item.task_desc.Value; Le code du dessus excute la requte de la base de donnes et positionne les diverses proprits de lobjet MailMessage. Positionnez la proprit " BodyFormat" de lobjet MailMessage Html, ce qui permettra denvoyer un contenu au format HTML (et non au format texte brut). Le corps de email comprend la description de la tche et de lID de tche. System.Web.Mail.SmtpMail. SmtpServer = "localhost" System.Web.Mail.SmtpMail.Send(newMessage); Positionnez ladresse du serveur SMTP qui sera utilis pour envoyer lemail, puis utilisez la mthode statique Send de la classe SmtpMail pour envoyer lemail. Si vous navez pas de serveur SMTP sur votre machine en local, vous pouvez entrer ladresse dun serveur SMTP externe auquel vous avez accs (mail.yourdomain.com).
- 57 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) C# if(DBUtility.UserId.ToString() != item.user_id_assign_to.Value.ToString()) { SqlCommand userEmail = new SqlCommand("SELECT email FROM" + "employees WHERE emp_id=" + DBUtility.UserId, Settings.IntranetDBDataAccessObject); SqlCommand assignedUserEmail = new SqlCommand("SELECT email FROM" + "employees WHERE emp_id=" + item.user_id_assign_to.Value.ToString(), Settings.IntranetDBDataAccessObject); System.Web.Mail.MailMessage newMessage = new System.Web.Mail.MailMessage(); newMessage.From = userEmail.ExecuteScalar().ToString(); newMessage.To = assignedUserEmail.ExecuteScalar().ToString(); newMessage.Subject = " A task was assigned to you"; newMessage.BodyFormat = System.Web.Mail.MailFormat.Html; newMessage.Body = "The following task was assigned to you:<br><br>" + "Task ID :" + Request.QueryString["task_id"].ToString() + "<br><br>"+ item.task_desc.Value; System.Web.Mail.SmtpMail. SmtpServer = "localhost"; System.Web.Mail.SmtpMail.Send(newMessage ); }
- 58 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) VB.Net If Convert.ToString (DBUtility.UserId) <> Convert.ToString(item.user_id_assign_to.Value) Then
Dim userEmail, assignedUserEmail As String userEmail = Convert.ToString(Settings.IntranetDBDataAccessObject.ExecuteScalar("SELECT email FROM employees WHERE emp_id=" & DBUtility.UserId)) assignedUserEmail = Convert.ToString(Settings.IntranetDBDataAccessObject.ExecuteScalar("SELECT email FROM employees WHERE emp_id=" & Convert.ToString(item.user_id_assign_to.Value)))
newMessage.From = userEmail newMessage.To = assignedUserEmail newMessage.Subject = "A task was assigned to you" newMessage.BodyFormat = System.Web.Mail.MailFormat.Html NwMessage.Body = "The following task was assigned to you :<br><br> Task ID :" & Convert.ToString(Request.QueryString("task_id")) & "<br><br>" & item.task_desc.Value
End if Les principales diffrences entre le code ci-dessus et celui utilis dans lvnement After Insert sont les suivantes : 1 - Une condition if a t ajoute pour envoyer un email seulement si un utilisateur attribue une tche une autre personne. 2 - task_id est rcupr depuis lURL utilisant lindexeur Request.QueryString . Nous pouvons utiliser cette mthode parce que des tches peuvent tre mises jour seulement si lutilisateur est arriv la page en cours par une URL qui contient un ID de tche mettre jour. Une telle URL ressemble : http://localhost/TaskManager/tasks_maint.aspx?task_id=9
- 59 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Remarque : Vous aurez besoin de Microsoft Access 2000 ou une version suprieure pour diter manuellement le fichier bas e de donnes. Si votre code email fonctionne correctement, vous devez alors vous retrouver sur la page Liste de Tches aprs lajout ou la modification dune tche, et la personne qui la tche a t attribue doit recevoir un email.
Etape 5
Implmenter la Scurit dEnregistrement dans lEvnement After Initialize
Votre Gestionnaire de Tches est dsormais pratiquement complet, seule une fonctionnalit pouvant savrer importante manque, savoir la Scurit. En ltat actuel nimporte qui peut modifier et supprimer nimporte quelle tche. Vous voudrez certainement limiter laccs pour que seuls les employs autoriss puissent mettre jour leurs tches. Il y a plusieurs faons de procder, et nous allons examiner plusieurs dentre elles. 1 - Cliquez sur la page tasks_maint dans lExplorateur de Projet. 2 - Dans la fentre Proprits, slectionnez longlet Evnements. 3 - Ajoutez Custom Code (Code Personnalis) lvnement After Initialize de la page. Procdez comme suit : C# // Write your own code here. VB.Net ' Write your own code here. Avec le code ci-dessous : C# if(Request.QueryString["task_id"] != null) { SqlCommand taskCmd = new SqlCommand("SELECT user_id_assign_to FROM" + "tasks WHERE task_id=" + Request.QueryString["task_id"], Settings.IntranetDBDataAccessObject ); int assignedUserId = (int)taskCmd.ExecuteScalar();
- 60 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) VB.Net if Request.QueryString("task_id") <> " " Then Dim assignedUserId As Integer
if Convert.ToInt32(DBUtility.UserId) <> assignedUserId Then tasksHolder.Visible = false; `Response.Redirect( "tasks_list.aspx" ) End if End if Le code du dessus permet de tester les mthodes suivantes pour implmenter la scurit denregistrement : Ne pas montrer la tche (formulaire Enregistement) sur la page si la tche slectionne nappartient pas lutilisateur connect. Un utilisateur non autoris verra une page blanche. Vous pouvez cacher nimporte quel formulaire sur une page en attribuant une valeur false (faux) la proprit Visible (visible) de la page dont le formulaire dpend. Tout dabord, vrifiez la prsence de la variable query string task_id, qui prcise le mode du formulaire Enregistrement (mode Mise jour ou Suppression), puisque vous voulez limiter les droits des utilisateurs : visualisation et modification des tches qui leur sont attribues. Le bloc if sassure que tous les utilisateurs peuvent crer de nouvelles tches. Vous pouvez tester cette fonctionnalit en insrant le code du dessus dans lvnement, puis en passant en mode Live Page et en essayant de modifier une tche qui ne vous est pas attribue et dans ce cas, vous verrez une page vide (seulement avec un en-tte). Bien quune telle fonctionnalit ne soit pas trs utile, elle illustre comment vous pouvez cacher les formulaires sur une page. Ajoutez un autre formulaire enregistrement votre page, qui ne puisse pas tre mis jour et qui ait seulement des champs Etiquette qui montre les informations relatives aux tches. Une fois que vous avez deux formulaires sur la mme page, vous pouvez cacher chaque formulaire par programmation en utilisant des critres dexclusion. Rediriger les utilisateurs non autoriss sur une autre page. Seuls les utilisateurs qui sont attribues des tches peuvent visualiser la page. Vous pouvez mettre en application et tester cette fonctionnalit en modifiant lgrement le code du dessus comme montr cidessous :
- 61 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) C# if(Request.QueryString["task_id"] != null) { SqlCommand taskCmd = new SqlCommand( "SELECT user_id_assign_to FROM" + "tasks WHERE task_id=" + Request.QueryString["task_id"], Settings.IntranetDBDataAccessObject );
assignedUserId = Settings.IntranetDBDataAccessObject.ExecuteScalar("SELECT user_id_assign_to FROM tasks WHERE task_id=" & Request.QueryString("task_ id"))
if Convert.ToInt32(DBUtility.UserId) <> assignedUserId Then; `taskHolder.Visible = false Response.Redirect("tasks_list.aspx") End if End if Le code ci-dessus indique que vous devez commenter la ligne prcdemment active et activer la ligne qui commence avec Response.Redirect. La mthode Redirect de lobjet Response est utilise pour rediriger lutilisateur sur une nouvelle page. Vous pouvez simplement attribuer la page de destination la mthode Redirect et la page sera alors automatiquement redirige. Pour tester cette fonctionnalit : modifiez le code tel que montr, passez en mode Live Page , puis essayez de modifier une tche qui ne vous est pas attribue.
- 62 -
JSP
Extension des Fonctionnalits de lApplication avec la Programmation dEvnements ( JSP)
Vous avez certainement remarqu que jusqu prsent vous avez construit votre Gestionnaire de Tches sans avoir vous proccuper du code. En effet, CodeCharge Studio peut vous aider construire des systmes fonctionnels sans programmation ; toutefois la cration de systmes plus sophistiqus requiert un minimum de programmation. Heureusement, CodeCharge Studio facilite la programmation en proposant un diteur de code de haut niveau, en plus des Evnements et des Actions qui vous aident insrer des morceaux de code pr-programms dans le programme. Voici les dfinitions dune Action et dun Evnment : Action Composant de gnration de code dfinissable par lutilisateur, qui insre un bloc de code dans une procdure vnementielle. CodeCharge Studio est fourni avec de nombreuses Actions pr-dfinies, qui se trouvent dans le dossier suivant : (CCS folder)\Components\Actions. Intrieurement, les actions consistent en du code XML et XSL pouvant tre facilement personnalis. Par exemple, une action peut tre paramtre sur un Textbox pour valider une adresse e-mail. Procdure Evnementielle Une procdure automatiquement excute en rponse un vnement lanc par un programme son excution. Les vnements sont les meilleurs emplacements pour mettre du Code Personnalis (Custom Code) .
Etape 1
Utiliser lEvnement Before Show Row pour Changer la Couleur du Texte
Dmarrons la programmation basique avec une tche simple de changement de la couleur dun champ grille sur notre page Liste de Tches. Concrtement, nous allons mettre en vidence les tches qui vous sont attribues en affichant votre nom en bleu dans la grille. 1 - Ouvrez la page tasks_list dans lExplorateur de Projet. 2 - Ouvrez larborescence de la grille tasks. 3 - Fates un clic droit sur le champ emp_login1 et slectionnez Proprits. 4 - Dans longlet Donnes, paramtrez la valeur de la proprit Name (Nom) user_id_assign_to . 5 - Dans lExplorateur Projet, fates un clic droit sur le champ task_name et slectionnez Proprits. 6 - Dans longlet Donnes, paramtrez la valeur de la proprit Content (Contenu) HTML. 7 - Slectionnez la grille tasks dans lExplorateur de Projet, ou cliquez nimporte o dans la lgende du formulaire. 8 - Slectionnez longlet Evnements dans la fentre Proprits. 9 - Fates un clic droit sur lvnement Before Show Row et slectionnez Ajouter du Code... . Lvnement Before Show Row se dclenche dans le programme aprs que les valeurs champ soient attribues, mais avant dtre gnres en HTML. En ajoutant du code dans cet vnement, vous pouvez modifier la valeur champ avant quelle ne soit montre.
- 63 -
- 64 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Ce code est excut si la condition prcdente "if" est rencontr. Elle modifie la valeur du contrle (user_id_assign_to). La valeur champ est remplace avec la valeur du nom du login utilisateur encapsul dans du code HTML qui spcifie la couleur de police (le bleu), et ajoute un tag HTML <b> pour obtenir une police en gras. Vous remarquerez que le mot blue a des double guillemets, qui seront remplacs par un guillemet simple lexcution. Dans la mesure o les guillemets marquent le dbut et la fin de la chane de caractres, lutilisation de double guillemet permet dinsrer un guillemet dans une chane de caractres.
- 65 -
Etape 2
Modifier un Champ Etiquette sur la Page Maintenance de Tches
Maintenant procdons une modification ncessaire sur la page Maintenance de Tches sur laquelle vous avez d remarqu que le champ Etiquette Assigned By naffiche pas le nom de lemploy, mais lID utilisateur, comme montr ci-dessous ; cest parce que la table employees contient le nom de lutilisateur, juste comme la ListBox Assigned To affiche les noms des employs dune autre table.
Il y a plusieurs mthodes possibles pour traiter de la question. Merci de vous rfrer aux explications qui suivent : 1 - Crez une Requte qui contient plusieurs tables et qui peut tre utilise en tant que source de donnes par le formulaire Enregistrement. Malheureusement, des requtes qui contiennent plusieurs tables ne peuvent pas tre mises jour de par leur nature, et donc votre formulaire Enregistrement entier peut sarrter de fonctionner. En dautres termes, si vous avez indiqu que vous vouliez utiliser une requte contenant une table tasks et employees dans votre formulaire Enregistrement, alors si vous attribuez une tche quelquun dautre, le programme ne pourra pas savoir si vous vouliez mettre jour la table tasks avec le nouveau employee_id, ou si vous vouliez mettre jour la table employees et changer le nom de lemploy. Ainsi, si vous utilisez plusieurs tables comme source de donnes pour le formulaire Enregistrement, vous devrez galement dfinir les oprations Custom Insert , Custom Update et Custom Delete dans les proprits du formulaire Enregistrement pour indiquer quels champs de la base de donnes devront tre mis jour avec les valeurs correspondantes saisies sur la page. Cette mthode semble en effet reprsenter beaucoup deffort juste pour affiche r une valeur supplmentaire sur la page. 2 - Utilisez une Procdure Evnementielle pour insrer du Code Personnalis (Custom Code) o vous pourrez produire la valeur dsire par programmation. Cette mthode est trs flexible, dans la mesure o elle vous p ermet dtendre le code gnr par lajout de votre propre code. Ltape qui suit dcrit en dtail cette mthode.
- 66 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 2 - Dans la fentre Proprits, cliquez sur longlet Evnements. 3 - Fates un clic droit sur lvnement Before Show et slectionnez Ajouter du Code... . CodeCharge Studio va alors automatiquement passer en mode Visualisation du Code .
Une fois en mode Visualisation du Code , vous devriez voir les lignes de code suivantes : //user_id_assign_by Label Handler Head @13-91DFA71C--> public class tasksuser_id_assign_byLabelHandler implements LabelListener { public void beforeShow(CCSEvent e) { //End user_id_assign_by Label Handler Head--> //Event BeforeShow Action Custom Code @13-4EFC2132--> /* Write your own code here. */ //End Event BeforeShow Action Custom Code--> //user_id_assign_by Label Handler Tail @13-F5FC18C5--> } } //End user_id_assign_by Label Handler Tail--> 2 - Remplacez le texte : /* Write your own code here. */
- 67 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) par : if (e.getRecord().isEditMode()) { e.getControl().setValue(DBTools.dLookUp("emp_name", "employees", "emp_id=" + DBTools.toSql(e.getControl().getFormattedValue(),JDBCConnection.INTEGER,"IntranetDB"), "IntranetDB")); } else { e.getControl().setValue(DBTools.dLookUp("emp_name","employees", "emp_id="+ DBTools.toSql(Utils.getUserId(e.getPage()),JDBCConnection.INTEGER,"IntranetDB") , "IntranetDB")); } Dans le code du dessus, le premier bloc "if" vrifie si le formulaire Enregistrement en cours est en mode mise jour, et si tel est le cas, il rcupre le nom de lemploy appropri, et lui attribue la valeur de contrle en cours. Si le formulaire nest pas en mode mise jour, le nom de la session utiliateur en cours est attribu comme valeur de contrle. Les lments suivants constituent le code : e : le pointeur de lEtiquette user_id_assign_by , pour laquelle lvnement est appel. getFormatedValue and setFormatedValue : les mthodes qui lisent et modifient la valeur du contrle (dans ce cas lEtiquette). Ces mthodes utilisent en option un paramtre qui spcifie si une valeur doit tre convertie en un nombre (Entier) ou en du texte (Chane de caractres). isEditMode : proprit du formulaire (parent du contrle), qui spcifie si lenregistrement peut tre dit/mis jour. En fonction de la valeur de cette proprit, nous affichons soit le nom de la personne qui a initialement soumis la tche (mode Mise jour), ou celui de la personne qui soumet la tche (mode Insertion). getOneRow : une mthode qui rcupre une valeur de base de donnes base sur une requte SQL. Ici, cette mthode rcupre le nom de lEmploye (emp_name) dans la table employees en utilisant la condition suivante : la cl (emp_id) est gale la valeur courante de lEtiquette. IntranetDB : le nom de la connexion objet pooled qui dfinit la connexion base de donnes utilises pour rcuprer le nom de lemploy. Utils.getUserId(e.getPage()) : une mthode qui rcupre la valeur de la session " UserID", qui contient lID de lutilisateur connect au systme. Le morceau de code se lit aprroximativement comme suit : If record is being edited : Attribue le nom de la personne qui a initialement soumis la question lEtiquette user_id_assign_by, en cherchant le nom de lemploy dans la table employees utilisant la connexion IntranetDB et la valeur de lEtiquette user_id_assign_by. If new record is being created : Attribue un utilisateur connect lEtiquette user_id_assign_by en rcuprant son nom dans la table employees utilisant la connexion IntranetDB et la session "UserID" qui contient lID utilisateur courant. Maintenant que vous avez modifi par programmation la valeur de lEtiquette tasksuser_id_assign_by pour sortir le nom de lemploy la place de lID, vous allez devoir spcifier que ce champ est un champ Texte, et non plus un champ Numrique. 1 - Cliquez sur longlet Donnes dans la fentre Proprits. 2 - Slectionnez Text en tant que Data Type (Type de Donnes).
- 68 -
Etape 3
Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches
Vous avez prcdemment utilis lvnement Before Show pour afficher le nom de la personne qui est attribue une tche. Cependant, les champs Etiquette ne peuvent pas tre mis jour de par leur nature, alors bien que le nom de lemploy soit affich sur la page, il nest pas crit dans la base de donnes. Dans la mesure o nous voulons que la base de donnes enregistre le nom de lID de la personne qui soumet une tche, nous allons donc devoir ajouter la logique de programmation. 1 - Ajoutez un champ Cach votre page depuis longlet Formulaires de la Bote Outils (Toolbox). Ce type de champ nest pas visible dans le navigateur, mais il sera utilis pour stocker une valeur et mettre jour la base de donnes. 2 - Configurez le nouveau champ en paramtrant ses proprits comme indiqu ci-aprs : Name (Nom) : assigned_by - le nom du champ Cach qui vient dtre ajout. Cela peut tre nimporte quel nom. Control Source : user_id_assign_by - le champ/colonne de la base de donnes qui sera utilis(e) pour retrouver la valeur du champ et qui sera mis(e) jour avec la nouvelle valeur en cas de changement. Data Type (Type de Donnes) : Integer - le type de la valeur lie au Control Source . Nos ID utilisateur/employ sont numriques. Default (Par Dfaut) : Utils.getUserId(e.getPage()) - Valeur Default pour ce champ sil est vide. Ce code rcupre lID utilisateur de la session en cours. Ainsi vous pouvez simplement indiquer que vous voulez enregistrer lID de lutilisateur connect dans le champ user_id_assign_by pour chaque nouvelle tche qui sera soumise.
- 69 -
- 70 -
Etape 4
Programmation du Formulaire Enregistrement
Maintenant que vous avez cr une application simple de Gestion de Tches, vous souhaitez certainement ltendre pour quelle soit la fois plus pratique et plus utile Dans cette section, vous allez avoir un aperu sur la manire dimplmenter des applications pratiques et sophistiques par lajout de code et dactions, ceci afin doffrir des fonctionnalits supplmentaires votre Gestionnaire de Tches. Vous allez apprendre : Envoyer des notifications demail la personne qui la tche est attribue, Autoriser seulement la personne qui la tche est attribue la modifier.
Ajouter du Code dans lEvnement After Insert pour Envoyer des Emails
1 - Slectionnez le formulaire tasks en le slectionnant depuis lExplorateur de Projet, ou en cliquant nimporte o dans la lgende du formulaire. 2 - Dans la fentre Proprits, cliquez sur longlet Evnements. 3 - Slectionnez lvnement After Insert. 4 - Cliquez sur le bouton [+]. 5 - Slectionnez Ajouter du Code...
- 71 -
Une fois en mode Visualisation du Code , remplacez le commentaire gnr : ' Write your own code here. Par le code ci-dessous : String uid = Utils.getUserId(e.getPage()); String from = (String)DBTools.dLookUp("emp_name", "employees", "emp_id=" + uid, "IntranetDB"); String to = (String)DBTools.dLookUp("email", "employees", "emp_id=" + e.getRecord().getControl("user_id_assign_to").getFormattedValue(), "IntranetDB"); String host = "mysmtphost.com"; String subject = "New task for you"; String body = "The following task was submitted:<br><br>" + "Task ID:" + DBTools.dLookUp("max(task_id)", "tasks", "user_id_assign_by=" + uid, "IntranetDB") + "<br><br>" + e.getRecord().getControl("task_desc").getFormattedValue(); SimpleMailer.sendEmail(from, to, subject, body, true, host); Comme vous avez d vous en rendre compte, le code du dessus permet denvoyer des emails aux utilisateurs qui de nouvelles tches sont attribues. Voici une explication du code : String uid = Utils.getUserId(e.getPage()); Positionne la variable uid la valeur de lID utilisateur de lutilisateur connect. La fonction statique Utils.getUserId est utilise pour rcuprer lID utilisateur en cours. String from = (String)DBTools.dLookUp("emp_name", "employees", "emp_id=" + uid); Positionne la variable from (expditeur) la valeur du champ emp_name pour lutilisateur en cours. La fonction statique DBTools.dLookUp est utilise pour rcuprer la valeur de base de donnes. String to = (String)DBTools.dLookUp("email", "employees", "emp_id=" + e.getRecord().getControl("user_id_assign_to").getFormattedValue()); Positionne la variable to (destinataire) lemail de la personne qui est attribue la tche. La fonction dLookUp est utilise ici pour rcuprer ladresse email approprie.
- 72 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) String host = "mysmtphost.com"; Le serveur SMTP par lequel lemail sera envoy. String subject = "New task for you"; Lobjet de lemail envoyer. String body = "The following task was submitted:<br><br>" + "Task ID:" + DBTools.dLookUp("max(task_id)", "tasks", "user_id_assign_by=" + uid + "<br><br>" + e.getRecord().getControl("task_desc").getFormattedValue(); La variable body (corps) contient le corps de lemail envoyer. La fonction dLookUp est utilise pour rcuprer le plus grand ID de tche soumis par lutilisateur connect (en supposant que les ID de tche soient crs par incrmentation). SimpleMailer.sendEmail(from, to, subject, body, true, host); Envoie lemail en utilisant les variables cres dans le code du dessus. Le cinquime argument indique que lemail sera envoy au format HTML (et non pas au format texte brut).
- 73 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 2 - task_id est rcupr depuis lURL en utilisant la fonction getParameter. Nous pouvons utiliser cette mthode parce que des tches peuvent tre mises jour seulement si lutilisateur est arriv la page en cours par une URL qui contient un ID de tche mettre jour. Une telle URL ressemble : http://localhost/TaskManager/tasks_maint.asp?task_id=9
Etape 5
Implmenter la Scurit dEnregistrement dans lEvnement After Initialize
Votre Gestionnaire de Tches est dsormais pratiquement complet, seule une fonctionnalit pouvant savrer importante manque, savoir la Scurit. Dans ltat actuel du gestionnaire, nimporte qui peut modifier et supprimer nimporte quelle tche. Vous voudrez certainement limiter laccs pour que seuls les employs autoriss puissent mettre jour leurs tches. Il y a plusieurs faons de faire, et nous allons examiner plusieurs dentre elles. 1 - Cliquez sur la page tasks_maint dans lExplorateur de Projet. 2 - Dans la fentre Proprits, slectionnez longlet Evnements. 3 - Ajoutez Custom Code (Code Personnalis) lvnement After Initialize de la page. Une fois en mode Visualisation du Code , remplacez le commentaire gnr par : /* Write your own code here. */
- 74 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) par le code ci-dessous : String currentTask = e.getPage().getHttpGetParams().getParameter("task_id"); if (!StringUtils.isEmpty(currentTask)) { String uid = Utils.getUserId(e.getPage()); Object task_id = DBTools.dLookUp("user_id_assign_to","tasks","task_id="+DBTools.toSql(currentTask, JDBCConnection.INTEGER, "IntranetDB")); if (!uid.equals(String.valueOf(task_id))) { e.getPage().getRecord("tasks").setVisible(false); // e.getPage().setRedirect("tasks_list.jsp"); // e.getPage().getRecord("tasks").setAllowUpdate(false); // e.getPage().getRecord("tasks").setAllowDelete(false); } } Le code du dessus permet de tester les mthodes suivantes pour implmenter la scurit denregistrement : Ne pas montrer la tche (formulaire Enregistrement) sur la page si la tche slectionne nappartient pas lutilisateur connect. Un utilisateur non autoris verra une page blanche. Vous pouvez cach nimporte quel formulaire sur une page en lui attribuant une valeur false (faux) pour la proprit Visible (Visible) du formulaire avec la mthode setVisible. Le code "if (!StringUtils.isEmpty(currentTask)) " dans la condition "if" indique que le code doit seulement tre excut si un utilisateur essaie de modifier une tche existante, mais qui ne lui est pas attribue. La condition "if" sassure ainsi que tous les utilisateurs peuvent crer de nouvelles tches. Vous pouvez tester cette fonctionnalit en insrant le code du dessus dans lvnement, en passant en mode Live Page et en essayant de modifier une tche qui ne vous est pas attribue et dans ce cas, vous verrez une page vide. Bien quune telle fonctionnalit ne soit pas trs utile, elle montre comment cacher des formulaires sur une page. Ajoutez un autre formulaire Enregistrement sur la page qui ne puisse pas tre mis jour et qui ait seulement des champs Etiquette qui affichent les informations. Une fois que vous avez deux formulaires sur la page, vous pouvez cacher chaque formulaire par programmation en utilisant des critres dexclusion. Rediriger des utilisateurs non autoriss sur une autre page. Seuls les utilisateurs qui une tche est attribue peuvent visualiser la page.
- 75 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Vous pouvez mettre en application et tester cette fonctionnalit en modifiant lgrement le code du dessus comme montr ci dessous : String currentTask = e.getPage().getHttpGetParams().getParameter("task_id"); if (!StringUtils.isEmpty(currentTask)) { String uid = Utils.getUserId(e.getPage()); Object task_id = DBTools.dLookUp("user_id_assign_to","tasks","task_id="+DBTools.toSql(currentTask, JDBCConnection.INTEGER, "IntranetDB")); if (!uid.equals(String.valueOf(task_id))) { // e.getRecord().setVisible(false); e.getPage().setRedirect("tasks_list.jsp"); // e.getPage().getRecord("tasks").setAllowUpdate(false); // e.getPage().getRecord("tasks").setAllowDelete(false); } } Le code du dessus montre que vous devez commenter la ligne prcdemment active et activer la ligne qui contient "setRedirect". setRedirect est une mthode utilise par CodeCharge Studio pour dterminer si la page en cours doit tre redirige sur une autre page, par exemple si un utilisateur na pas de session ouverte. Cette variable peut tre utilise seulement sur les pages ayant un accs restreint et qui requirent une authentification de lutilisateur. Vous pouvez simplement attribuer la page de destination en utilisant la mthode setRedirect, et la page sera alors automatiquement redirige. Vous pouvez tester cette fonctionnalit en modifiant le code comme montr, en passant en mode Live Page, et en essayant alors de modifier une tche qui ne vous est pas attribue.
PHP
Extension des Fonctionnalits de lApplication avec la Programmation dEvnements (PHP)
Vous avez certainement remarqu que jusqu prsent vous avez construit votre application de Gestion de Tches sans avoir vous proccuper du code. En effet, CodeCharge Studio peut vous aider construire des systmes fonctionnels sans programmation ; toutefois la cration de systmes plus sophistiqus requiert un minimum de programmation. Heureusement, CodeCharge Studio facilite la programmation en proposant un diteur de code de haut niveau, en plus des Evnements et des Actions qui vous aident insrer des morceaux de code pr-programms dans le programme. Voici les dfinitions dune Action et dun Evnment : Action Composant de gnration de code dfinissable par lutilisateur, qui insre un bloc de code dans une procdure vnementielle. CodeCharge Studio est fourni avec de nombreuses Actions pr-dfinies, qui se trouvent dans le dossier suivant : (CCS folder)\Components\Actions. Intrieurement, les actions consistent en du code XML et XSL pouvant tre facilement personnalis. Par exemple, une action peut tre paramtre sur un Textbox pour valider une adresse e-mail. Procdure Evnementielle Une procdure automatiquement excute en rponse un vnement lanc par un programme son excution. Les vnements sont les meilleurs emplacements pour mettre du Code Personnalis (Custom Code) .
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 76 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Connexion la Base de Donnes ct Serveur en PHP Bien que la connexion en mode Conception (via lutilisateur de lassistant), quand vous utilisez le PHP puisse tre faite une base de donnes Microsoft Access, la connexion ct Serveur doit tre configure diffremment. La base de donne la plus utilise avec le PHP est MySQL ; la connexion ct Serveur doit alors tre configure pour se connecter MySQL. Avant de connecter la base, vous devez tout dabord crer la base. Le dossier examples de linstallation de CodeCharge Studio propose un fichier script MySQL, qui peut tre utilis pour recrer les tables de la base de donnes Intranet.
Etape 1
Utiliser lEvnement Before Show Row pour Changer la Couleur du Texte
Dmarrons la programmation basique avec une tche simple de changement de la couleur dun champ grille sur notre page Liste de Tches. Concrtement, nous allons mettre en vidence les tches qui vous sont attribues en affichant votre nom en bleu dans la grille. 1 - Ouvrez la page tasks_list dans lExplorateur de Projet. 2 - Ouvrez larborescence de la grille tasks. 3 - Fates un clic droit sur le champ emp_login1 et slectionnez Proprits. 4 - Dans longlet Donnes, paramtrez la valeur de la proprit Name (Nom) user_id_assign_to . 5 - Dans lExplorateur Projet, fates un clic droit sur le champ task_name et slectionnez Proprits. 6 - Dans longlet Donnes, paramtrez la valeur de la proprit Content (Contenu) HTML. 7 - Slectionnez la grille tasks dans lExplorateur de Projet, ou cliquez nimporte o dans la lgende du formulaire. 8 - Slectionnez longlet Evnements dans la fentre Proprits. 9 - Fates un clic droit sur lvnement Before Show Row et slectionnez Ajouter du Code... . Lvnement Before Show Row se dclenche dans le programme aprs que les valeurs champs soient attribues, mais avant dtre gnres en HTML. En ajoutant du code dans cet vnement, vous pouvez modifier la valeur champ avant quelle ne soit montre.
- 77 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) global $tasks; if ($tasks->user_id_assign_to->GetValue() == CCGetSession("UserLogin") && strlen(CCGetSession("UserLogin"))) { $tasks->task_name->SetValue("<b><font color=\"blue\">". $tasks->task_name->GetValue()."</font></b>"); } Ce qui suit est une explication sur le fonctionnement du code PHP du dessus : if ($tasks->user_id_assign_to->GetValue() == CCGetSession("UserLogin") && strlen(CCGetSession("UserLogin"))) Cest une condition if (si) qui est vraie seulement si la valeur du champ user_id_assign_to est gale au nom du login de lemploy connect. Le champ de base de donnes employees1_emp_login fournit la valeur pour le champ user_id_assign_to dans le formulaire Grille. Une fois connect au systme, le programme reconnat vos tches en comparant votre nom de login la valeur emp_login de la personne qui une tche est attribuee. UserLogin est une variable de session utilise par les programmes gnrs par CodeCharge, et cette variable conserve le nom de Login de la session utilisateur en cours jusqu son expiration. Note : Il sagit de variable de session cres par dfaut par CodeCharge Studio : UserID : la valeur champ cl primaire de la session utilisateur UserLogin : le nom de Login de lutilisateur connect au systme GroupID : le niveau/groupe de scurit de lutilisateur connect au systme
- 78 -
Etape 2
Modifier un Champ Etiquette sur la Page Maintenance de Tches
Maintenant procdons une modification ncessaire sur la page Maintenance de Tches sur laquelle vous avez d remarqu que le champ Etiquette Assigned By naffiche pas le nom de lemploy, mais lID, comme montr ci-dessous ; cest parce que la table tasks contient seulement lID utilisateur, alors que la table employees contient les noms des utilisateurs rels.
- 79 -
Il y a plusieurs mthodes possibles pour traiter de la question. Merci de vous rfrer aux explications qui suivent : 1 - Crez une Requte qui contient plusieurs tables et qui peut tre utilise en tant que source de donnes par le formulaire Enregistrement, comme vous lavez dj fait avec la grille sur la page Liste de Tches. Malheureusement, les requtes qui contiennent plusieurs tables ne peuvent pas tre mises jour de par leur nature, et donc le formulaire Enregistrement entier peut sarrter de fonctionner. En dautres termes, si vous avez indiqu que vous vouliez utiliser une requte contenant une table tasks et employees dans votre formulaire Enregistrement, alors si vous attribuez une tche quelquun dautre, le programme ne pourra pas savoir si vous vouliez mettre jour la table tasks avec le nouveau employee_id, ou si vous vouliez mettre jour la table employees et changer le nom de lemploy. Ainsi, si vous utilisez plusieurs tables comme source de donnes pour le formulaire Enregistrement, vous devrez galement dfinir les oprations Custom Insert , Custom Update et Custom Delete dans les proprits du formulaire Enregistrement pour indiquer quels champs de la base de donnes devront tre mis jour avec les valeurs correspondantes sai sies sur la page. Cette mthode semble reprsenter beaucoup deffort juste pour afficher une valeur supplmentaire sur la page. 2 - Utilisez une Procdure Evnementielle pour insrer du Code Personnalis (Custom Code) o vous pourrez produire la valeur dsire par programmation. Cette mthode est trs flexible, dans la mesure o elle vous permet dtendre le code gnr par lajout de votre propre code. Ltape qui suit dcrit en dtail cette mthode.
- 80 -
Une fois en mode Visualisation du Code, si vous gnrez du PHP, vous devriez voir le fichier tasks_maint_events.php , avec les lignes de code suivantes : //Custom Code @28-73254650 //------------------------//Write your own code here. //------------------------//End Custom Code Remplacez le texte : // Write your own code here. Par : global $tasks; global $DBIntranetDB; if ($tasks->EditMode) { $tasks->user_id_assign_by->SetValue(CCDLookUp("emp_name", "employees", " emp_id=". $DBIntranetDB->ToSQL($tasks->user_id_assign_by->GetValue(), ccsInteger), $DBIntranetDB)); } else { $tasks->user_id_assign_by->SetValue(CCDLookUp("emp_name", "employees", " emp_id=". $DBIntranetDB->ToSQL(CCGetUserID(), ccsInteger), $DBIntranetDB)); } Le code du dessus comprend les lments suivants : tasks : le nom du formulaire Enregistrement sur la page EditMode : proprit du formulaire, qui indique si lenregistrement peut tre dit. En fonction de la valeur de cette proprit, nous affichons soit le nom de la personne qui a initialement soumis la tche (mode Edition), ou de la personne qui soumet la tche (mode Insertion).
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 81 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) user_id_assign_by : le nom de lEtiquette dans la grille et en mme temps le nom du champ de base de donnes qui a t utilis pour crer cette Etiquette, et qui est maintenant sa source de donnes. SetValue : une mthode dun objet (dans ce cas lEtiquette), qui peut tre utilise pour modifier la valeur de lobjet. $tasks->user_id_assign_by->SetValue : mthode SetValue entirement qualifie, qui dit au programme quel objet il se rfre. En dautres termes, cest la mthode SetValue qui affecte le champ user_id_assign_by , qui en retour appartient la grille tasks. CCDLookUp : fonction de CodeCharge qui supporte la rcupration dune valeur de base de donnes sur un nom de champ, un nom de table, et une condition. Ici, cette fonction rcupre le nom de lEmploy (emp_name ) dans la table employees, en utilisant la condition suivante : la cl (emp_id) est gale la valeur courante de lEtiquette. ToSQL : fonction de CodeCharge qui convertit une valeur en un format support par la base de donnes. Cette fonction requiert un paramtre qui dit si une valeur doit tre convertie en un nombre ( Integer) ou en du texte. Dans ce cas, cette fonction convertit la valeur courante de lEtiquette en un nombre pouvant tre utilis avec la fonction CCDLookUp. Il est conseill de toujours utiliser cette fonction avec CCDLookUp. $DBIntranetDB : le nom de lobjet qui dfinit la connexion base de donnes que vous voulez utiliser avec la fonction CCDLookup. CCGetUserID() : fonction de CodeCharge qui retourne lID de lutilisateur connect au systme. Le code se lit approximativement comme suit : If a record is being edited : Attribue le nom de la personne qui a initialement soumis la question lEtiquette user_id_assign_by, par la recherche du nom de lemploy dans la table employees, en utilisant la fonction CCDLookup qui utilise la connexion IntranetDB et la valeur de lEtiquette user_id_assign_by. If a new record is being created : Attribue un utilisateur connect lEtiquette user_id_assign_by en rcuprant son nom dans la table employees et en utilisant la fonction CCDLookUp qui utilise la connexion IntranetDB et la fonction CCGetUserID (qui permet dobtenir lID de lutilisateur connect). Maintenant que vous avez modifi par programmation la valeur de lEtiquette user_id_assign_by pour sortir le Nom de lEmploy au lieu de lID, vous allez devoir indiquer que ce champ est dsormais un champ Texte, et non un champ Numrique. 1 - Cliquez sur longlet Donnes dans la fentre Proprits. 2 - Slectionnez Text en tant que Data Type (Type de Donnes).
Etape 3
Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches
Vous avez prcdemment utilis lvnement Before Show pour afficher le nom de la personne qui est assigne une tche. Cependant, les champs Etiquette ne peuvent pas tre mis jour de par leur nature, alors bien que le nom de lemploy soit affich sur la page, il nest pas crit dans la base de donnes. Comme nous voulons que la base de donnes enregistre le nom ou lID de la personne qui soumet une tche, nous allons devoir ajouter la logique de programmation pour effectuer cela. 1 - Ajoutez un champ Cach votre page depuis longlet Formulaires de la Bote Outils (Toolbox).
- 82 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Ce type de champ nest pas visible dans le navigateur, mais il sera utilis pour stocker une valeur et mettre jour la base de donnes. 2 - Configurez le nouveau champ en paramtrant ses proprits comme indiqu ci-dessous : Name (Nom) : assigned_by - le nom du champ Cach qui vient dtre ajout. Cela peut tre nimporte quel nom. Control Source : user_id_assign_by - le champ/colonne de la base de donnes qui sera utilis(e) pour rcuprer la valeur du champ et qui sera mis(e) jour avec la nouvelle valeur en cas de changement. Data Type (Type de Donnes) : Integer - le type de la valeur lie au Control Source . Nos ID utilisateur/employ sont numriques. Default (par Dfaut) : CCGetUserID( ) - CCGetUserID() est une fonction de CodeCharge qui rcupre lID de lutilisateur connect au systme. Ainsi vous pouvez facilement indiquer que vous voulez enregistrer lID de lutilisateur dans le champ user_id_assign_by pour chaque nouvelle tche qui sera soumise.
- 83 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 2 - Dans la fentre Proprits, paramtrez Default Value (Valeur Par Dfaut) CurrentDateTime. Cest ainsi que le champ Etiquette peut afficher la date bien que le champ Cach ne soit pas visible pour lutilisateur.
Etape 4
Programmation du Formulaire Enregistrement
Maintenant que vous avez cr une application simple de Gestion de Tches, vous souhaitez certainement ltendre pour quelle soit la fois plus pratique et plus utile Dans cette section, vous allez avoir un aperu sur la manire dimplmenter des applications pratiques et sophistiques par lajout de code et dactions, ceci afin doffrir des fonctionnalits supplmentaires votre Gestionnaire de Tches. Vous allez apprendre : Envoyer des notifications demail la personne qui la tche est attribue, Autoriser seulement la personne qui la tche est attribue la modifier.
- 84 -
Ajouter du Code dans lEvnement After Insert pour Envoyer des Emails
1 - Slectionnez le formulaire tasks dans la page tasks_maint en le slectionnant depuis lExplorateur de Projet, ou en cliquant nimporte o dans la lgende du formulaire. 2 - Dans la fentre Proprits, cliquez sur longlet Evnements. 3 - Slectionnez lvnement After Insert. 4 - Cliquez sur le bouton [+]. 5 - Slectionnez Ajouter du Code...
Une fois en mode Visualisation du Code , remplacez le commentaire gnr : // Write your own code here.
- 85 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Par le code du dessus : global $DBIntranetDB; global $tasks; $from_name =CCDLookUp("emp_name", "employees", "emp_id=". $DBIntranetDB->ToSQL(CCGetUserID(), ccsInteger), $DBIntranetDB); $from_email=CCDLookUp("email", "employees", "emp_id=". $DBIntranetDB->ToSQL(CCGetUserID(), ccsInteger), $DBIntranetDB); $to_email=CCDLookUp("email", "employees", "emp_id=". $DBIntranetDB->ToSQL($tasks->user_id_assign_to->GetValue(), ccsInteger), $DBIntranetDB);
$headers = "From: ".$from_name."<".$from_email.">;"; $headers .= "Content-Type: text/html"; $subject = "New task for you"; $message = "The following task was submitted:<br><br>". "Task ID: ".CCDLookUp("max(task_id)", "tasks", "user_id_assign_by=". $DBIntranetDB->ToSQL(CCGetUserID(), ccsInteger), $DBIntranetDB)."<br><br>". $tasks->task_desc->GetText();
mail$to_email, $subject, $message, $headers); Comme vous pouvez le constater, le code ci-dessus envoie des emails aux utilisateurs qui de nouvelles tches sont attribues. Ce qui suit est une explication du code : $from_name = CCDLookUp("emp_name", "employees", "emp_id=".$DBIntranetDB->ToSQL (CCGetUserID(), ccsInteger),$DBIntranetDB); Paramtre from_name la valeur du champ emp_name pour lutilisateur connect. $from_email = CCDLookUp("email", "employees", "emp_id=".$DBIntranetDB->ToSQL(CCGetUserID(), ccsInteger), $DBIntranetDB); Paramtre from_email la valeur du champ email dans la table employees o emp_id correspond lutilisateur connect. La fonction CCDLookUp est utilise pour rcuprer une valeur de base de donnes, alors que CCGetUserID retrouve lID de la connexion utilisateur en cours. $to_email = CCDLookUp("email", "employees", "emp_id=".$DBIntranetDB->ToSQL($tasks->user_id_assign_to>GetValue(), ccsInteger), $DBIntranetDB);
- 86 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Paramtre to_email lemail de la personne qui la tche est attribue. La fonction CCDLookUp est utilise ici pour rcuprer ladresse email approprie. $headers = "From: ".$from_name."<".$from_email.">;"; Ajoute des dtails sur lexpditeur dans len-tte demail $headers .= "Content-Type: text/html;"; Indique que lemail sera envoy au format HTML, et non pas au format texte brut. $subject = "New task for you"; Le sujet de lemail envoyer. $message = "The following task was submitted:<br><br>"."Task ID: ". CCDLookUp("max(task_id)", "tasks", "user_id_assign_by=".$DBIntranetDB->ToSQL(CCGetUserID, ccsInteger), $DBIntranetDB)."<br><br>". $tasks->task_desc->GetText(); La variable message contient le corps de lemail qui sera envoy. La fonction CCDLookUp est utilise pour rcuprer le plus grand ID de tche soumis par lutilisateur connect (en supposant que les ID de tche soient crs par incrmentation). mail ($to_email, $subject, $message, $headers); Envoie lemail en utilisant les variables cres dans le code du dessus.
- 87 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 3 - Ajoutez le Custom Code (Code Personnalis) dans lvnement After Update : global $DBIntranetDB; global $tasks; if (CCGetUserID() != $tasks->user_id_assign_to->GetValue()) { $from_name = CCDLookUp("emp_name", "employees", "emp_id=". $DBIntranetDB->ToSQL(CCGetUserID(), ccsInteger), $DBIntranetDB); $from_email = CCDLookUp("email", "employees", "emp_id=". $DBIntranetDB->ToSQL(CCGetUserID(), ccsInteger), $DBIntranetDB); $to_email = CCDLookUp("email", "employees", "emp_id=". $DBIntranetDB->ToSQL($tasks->user_id_assign_to->GetValue(),ccsInteger), $DBIntranetDB); $headers = "From: ".$from_name."<".$from_email.">;"; $headers .= "Content-Type: text/html;"; $subject = "A task was assigned to you"; $message = "The following task was assigned to you:<br><br>". "Task ID: ".CCGetFromGet ("task_id", " " )."<br><br>". $tasks->task_desc->GetText(); mail($to_email, $subject, $message, $headers); } Les principales diffrences entre le code ci-dessus et celui utilis dans lvnement After Insert sont les suivantes : 1 - Une condition if a t ajoute pour envoyer un email seulement si un utilisateur attribue une tche une autre personne. 2 - task_id est rcupr depuis lURL utilisant la fonction CCGetFromGet. Nous pouvons utiliser cette mthode parce que des tches peuvent tre mises jour seulement si lutilisateur est arriv la page en cours par une URL qui contient un ID de tche mettre jour. Une telle URL ressemble : http://localhost/TaskManager/tasks_maint.php?task_id=9
- 88 -
Etape 5
Implmenter la Scurit dEnregistrement dans lEvnement After Initialize
Votre Gestionnaire de Tches est dsormais pratiquement complet, seule une fonctionnalit p ouvant savrer importante manque, savoir la Scurit. Dans ltat actuel nimporte qui peut modifier et supprimer nimporte quelle tche. Vous voudrez certainement limiter laccs pour que seuls les employs autoriss puissent mettre jour leurs tches. Il y a plusieurs faons de procder, et nous allons examiner plusieurs dentre elles. 1 - Cliquez sur la page tasks_maint dans lExplorateur de Projet. 2 - Dans la fentre Proprits, slectionnez longlet Evnements. 3 - Ajoutez Custom Code (Code Personnalis) lvnement After Initialize de la page. Procdez comme suit : Une fois en mode Visualisation de Code, remplacez le commentaire gnr : // Write your own code here. Par ce code : global $tasks; global $Redirect; global $DBIntranetDB; $current_task = CCGetParam("task_id", ""); if ($current_task != 0 && CCGetUserID() != CCDLookUp("user_id_assign_to", "tasks", "task_id=". $DBIntranetDB->ToSQL($current_task, ccsInteger), $DBIntranetDB)) { $tasks->Visible = false; // $Redirect = "tasks_list.php"; // $tasks->UpdateAllowed = false; // $tasks->DeleteAllowed = false; } Le code du dessus permet de tester les mthodes suivantes pour implmenter la scurit denregistrement : Ne pas montrer la Tche (formulaire Enregistrement) sur la page si la tche s lectionne nappartient pas lutilisateur connect. Un utilisateur non autoris verra une page blanche. Vous pouvez cacher nimporte quel formulaire sur une page en lui attribuant une valeur False (Faux) pour la proprit Visible (visible) du formulaire. Le code $current_task != 0 dans la condition if indique que le code doit seulement tre excut si lutilisateur essaie de modifier une tche existante et qui ne lui est pas attribue. La condition if sassure aussi que tous les utilisateurs peuvent crer de nouvelles tches. Vous pouvez tester cette fonctionnalit en insrant le code du dessus dans lvnement, puis en passant en mode Live Page, et en essayant de modifier une tche qui ne vous est pas attribue... et alors une page vide devrait safficher. Une telle fonctionnalit nest pas trs utile, mais elle montre comment cacher des formulaires sur une page. Ajoutez un autre formulaire Enregistrement sur votre page qui ne puisse pas tre mis jour et qui ait seulement des champs Etiquette qui montrent les informations. Une fois que vous avez deux formulaires sur la page, vous pouvez cacher chaque formulaire par programmation en utilisant des critres dexclusion.
- 89 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Rediriger des utilisateurs non autoriss sur une autre page. Seuls les utilisateurs qui sont attribues des tches peuvent visualiser la page. Vous pouvez mettre en application et tester cette fonctionnalit en modifiant lgrement le code du dessus, comme montr cidessous : global $tasks; global $Redirect; global $DBIntranetDB; $current_task = CCGetParam("task_id", ""); if($current_task != 0 && CCGetUserID() != CCDLookUp("user_id_assign_to", "tasks", "task_id=". $DBIntranetDB->ToSQL($current_task, ccsInteger), $DBIntranetDB)) { // $tasks->Visible = false; $Redirect = "tasks_list.php"; // $tasks->UpdateAllowed = false; // $tasks->DeleteAllowed = false; } Le code du dessus montre que vous devez commenter la ligne prcdemment active, et activer la ligne qui commence avec $Redirect. $Redirect est une variable utilise par CodeCharge Studio pour dterminer si la page en cours doit tre redirige sur une autre page, par exemple dans le cas o un utilisateur na pas de session ouverte. Cette variable peut tre utilise seulement sur les pages ayant un accs restreint et ncessitant une authentification. Vous pouvez simplement attribuer la page de destination la variable $Redirect, et alors la page sera automatiquement redirige. Testez cette fonctionnalit en modifiant le code comme montr, passez en mode Live Page, et essayez de modifier une tche qui ne vous est pas attribue.
ColdFusion
Extension des Fonctionnalits de lApplication avec la Programmation dEvnements (ColdFusion)
Vous avez certainement remarqu que jusqu prsent vous avez construit votre Gestionnaire de Tches sans avo ir vous proccuper du code. En effet, CodeCharge Studio peut vous aider construire des systmes fonctionnels sans programmation ; toutefois la cration de systmes plus sophistiqus requiert un minimum de programmation. Heureusement, CodeCharge Studio facilite la programmation en proposant un diteur de code de haut niveau, en plus des Evnements et des Actions qui vous aident insrer des morceaux de code pr-programms dans le programme. Voici les dfinitions dune Action et dun Evnment : Action Composant de gnration de code dfinissable par lutilisateur, qui insre un bloc de code dans une procdure vnementielle. CodeCharge Studio est fourni avec de nombreuses Actions pr-dfinies, qui se trouvent dans le dossier suivant : (CCS folder)\Components\Actions. Intrieurement, les actions consistent en du code XML et XSL pouvant tre facilement personnalis. Par exemple, une action peut tre paramtre sur un Textbox pour valider une adresse e-mail. Procdure Evnementielle Une procdure automatiquement excute en rponse un vnement lanc par un programme son excution. Les vnements sont les meilleurs emplacements pour mettre du Code Personnalis (Custom Code) . Connexion la Base de Donnes Ct Serveur en ColdFusion
- 90 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Bien que la connexion en mode Conception (via lutilisation de lassistant), quand vous utilisez ColdFusion, puisse tre faite directement une base de donnes Access, la connexion ct Serveur doit tre configure diffremment. Dans ce cas de ColdFusion, la connexion ct Serveur doit tre faite une source de donnes enregistre. Si vous utilisez ColdFusion 4.01, vous aurez besoin de faire la connexion en utilisant ODBC DSN. Pour des versions suprieures de ColdFusion (version 5.0 ou MX), vous pouvez utiliser nimporte quelle source de donnes qui a t enregistre dans ladministrateur ColdFusion. Pour plus dinformations sur les connexions base de donnes en ColdFusion, merci de vous rfrer la section sur les connexions ct Serveur en ColdFusion.
Etape 1
Utiliser lEvnement Before Show Row pour Changer la Couleur du Texte
Dmarrons la programmation basique avec une tche simple de changement de la couleur dun champ grille sur notre page Liste de Tches. Concrtement, nous allons mettre en vidence les tches qui vous sont attribues en affichant votre nom en bleu dans la grille. 1 - Ouvrez la page tasks_list dans lExplorateur de Projet. 2 - Ouvrez larborescence de la grille tasks. 3 - Fates un clic droit sur le champ emp_login1 et slectionnez Proprits. 4 - Dans longlet Donnes, paramtrez la valeur de la proprit Name (Nom) user_id_assign_to . 5 - Dans lExplorateur Projet, fates un clic droit sur le champ task_name et slectionnez Proprits. 6 - Dans longlet Donnes, paramtrez la valeur de la proprit Content (Contenu) HTML. 7 - Slectionnez la grille tasks dans lExplorateur de Projet, ou cliquez nimporte o dans la lgende du formulaire. 8 - Slectionnez longlet Evnements dans la fentre Proprits. 9 - Fates un clic droit sur lvnement Before Show Row et slectionnez Ajouter du Code... . Lvnement Before Show Row se dclenche dans le programme aprs que les valeurs champs soient attribues, mais avant dtre gnres en HTML. En ajoutant du code dans cet vnement, vous pouvez modifier la valeur champ avant quelle ne soit montre.
- 91 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) <CFPARAM Name="Session.UserLogin" Default=""> <CFIF flduser_id_assign_to EQ Session.UserLogin AND Session.UserLogin NEQ ""> <CFSET fldtask_name= '<b><font color="blue">' & fldtask_name & '</font></b>'> </CFIF> Ce qui suit est une explication sur le fonctionnement du code du dessus : <CFPARAM Name="Session.UserLogin" Default=""> Ce code vrifie lexistence de la variable de session UserLogin. Si la variable nexiste pas, elle est cre et ses valeurs paramtres sur une chane vide. <CFIF fldtask_name EQ Session.UserLogin AND Session.UserLogin NEQ ""> Cette instruction conditionnelle est vraie seulement si la valeur du champ fldtask_name est gale au nom de Login de lemploy connect au systme. Le champ de base de donnes employees1_emp_login fournit la valeur pour le champ fldtask_name dans le formulaire Grille. Une fois connect au systme, le programme reconnatra vos tches en comparant votre nom de Login la valeur emp_login de la personne qui la tche est attribue. UserLogin est une des variables de session utilises par les programmes gnrs par CodeCharge, et elle conserve le nom de Login de la session utilisateur en cours jusqu son expiration. Note : Il sagit des variables de session cres par dfaut par CodeCharge Studio : UserID : la valeur champ cl primaire de la session utilisateur UserLogin : le nom de Login de lutilisateur connect au systme GroupID : le niveau/groupe de scurit de lutilisateur connect au systme <CFSET fldtask_name= '<b><font color="blue">' & fldtask_name & '</font></b>'> Ce code est excut si la condition prcdente if (si) est rencontre. Elle modifie la valeur du champ task_name. La valeur champ est remplace par sa valeur de base de donnes encapsule dans du code HTML, qui spcifie la couleur de police, comme le bleu, et ajoute un tag HTML <b> pour afficher la police en gras. </CFIF> Cette ligne manque la fin de la condition if, aussi lexcution du code restant nest pas affecte par cette condition.
- 92 -
Etape 2
Modifier un Champ Etiquette sur la Page Maintenance de Tches
Maintenant vous allez procder une modification ncessaire sur la page Maintenance de Tches sur laquelle vous avez d remarqu que le champ Etiquette Assigned By naffiche pas le nom de lemploy, mais lID, comme montr ci-dessous ; cest parce que la table tasks contient seulement lID utilisateur, alors que la table employees contient les noms des utilisateurs rels.
- 93 -
Il y a plusieurs mthodes possibles pour traiter de la question. Merci de vous rfrer aux explications qui suivent : 1 - Crez une Requte qui contient plusieurs tables et qui peut tre utilise en tant que source de donnes par le formulaire Enregistrement, comme vous lavez dj fait avec la grille sur la page Liste de Tches. Malheureusement, les requtes qui contiennent plusieurs tables ne peuvent pas tre mises jour de par leur nature, et donc le formulaire Enregistrement entier peut sarrter de fonctionner. En dautres termes, si vous avez indiqu que vous vouliez utiliser une requte contenant une table tasks et employees dans votre formulaire Enregistrement, alors si vous attribuez une tche quelquun dautre, le programme ne pourra pas savoir si vous vouliez mettre jour la table tasks avec le nouveau employee_id, ou si vous vouliez mettre jour la table employees et changer le nom de lemploy. En consquence, si vous utilisez plusieurs tables comme source de donnes pour le formulaire Enregistrement, vous devrez galement dfinir les oprations Custom Insert , Custom Update et Custom Delete dans les proprits du formulaire Enregistrement pour prciser quels champs de la base de donnes devront tre mis jour avec les valeurs correspondantes saisies sur la page. Cette mthode semble reprsenter beaucoup deffort juste pour afficher une valeur supplmentaire sur la page. 2 - Utilisez une Procdure Evnementielle pour insrer du Code Personnalis ( Custom Code) o vous pourrez produire la valeur dsire par programmation. Cette mthode est trs flexible, dans la mesure o elle vous permet dtendre le code gnr par lajout de votre propre code. Ltape suivante dcrit en dtail cette mthode.
- 94 -
Une fois en mode Visualisation du Code , remplacez le texte suivant : <!--- write your own code here ---> par : <CFIF blnEditModeTasks> <CF_CCToSQL Value= "#flduser_id_assign_by#" Type= "#ccsInteger#" > <CF_CCDLookUp Field="emp_name" Table="employees" Where="emp_id=#CCToSQL#" Connection="IntranetDB"> <CFSET flduser_id_assign_by=CCDLookUp> <CFELSE> <CF_CCToSQL Value="#Session.UserID#" Type="#ccsInteger#" > <CF_CCDLookUp Field="emp_name" Table="employees" Where="emp_id=#CCToSQL#" Connection="IntranetDB"> <CFSET flduser_id_assign_by=CCDLookUp> </CFIF> Le code du dessus est compos des lments suivants : blnEditModeTasks : variable de formulaire, qui indique si lenregistrement est ditable. En fonction de la valeur de cette proprit, le programme affichera soit le nom de la personne qui a initialement soumis la tche (mode Edition), soit le nom de la personne qui soumet la tche (mode Insertion). user_id_assign_by : le nom de lEtiquette dans la Grille, et en mme temps le nom du champ de la base de donnes qui a t utilis pour crer cette tiquette, et qui est maintenant sa source de donnes. flduser_id_assign_by : le nom de la variable utilise par le programme gnr pour se rfrer ltiquette et au champ de la base de donnes changer. CodeCharge Studio construit des noms de variables par jajout du prfixe " fld" au nom du champ. CCDLookup : tag personnalis de CodeCharge qui supporte la rcupration dune valeur de base de donnes base sur un nom de champ, un nom de table, et une condition. Ici, cette fonction rcupre le Nom de lEmploy emp_name dans la table employees en utilisant la condition suivante : la cl emp_id est gale la valeur courante de lEtiquette. CCToSQL : tag personnalis de CodeCharge qui convertit une valeur dans le format support par la base de donnes. Cette fonction requiert un paramtre qui dit si une valeur doit tre convertie en un nombre (Entier) ou en du texte. Dans ce cas, cette fonction convertit la valeur courante de lEtiquette en un nombre pouvant tre utilis avec la fonction CCDLookUp. Il est conseill de toujours utiliser cette fonction avec CCDLookup. IntranetDB : le nom de la connexion base de donnes que vous voulez utiliser dans la fonction CCDLookUp. Session.UserID : la variable de session qui contient lID de lutilisateur connect au systme.
- 95 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Le code se lit approximativement comme suit : If a record is being edited : Attribue le nom de la personne qui a initialement soumis la question lEtiquette user_id_assign_by, par la recherche du nom de lemploy dans la table employees en utilisant le tag personnalis CCDLookUp qui utilise la connexion IntranetDB et la valeur de lEtiquette user_id_assign_by. If a new record is being created : Attribue lutilisateur connect lEtiquette user_id_assign_by en rcuprant son nom dans la table employees et en utilisant le tag personnalis CCDLookUp, qui utilise la connexion IntranetDB et le tag personnalis CCGetUserID (qui permet dotenir lID de lutilisateur connect). Maintenant que vous avez modifi par programmation la valeur de lEtiquette user_id_assign_by pour sortir le Nom de lEmploy la place de lID, vous allez devoir indiquer que ce champ est dsormais un champ Texte, et non plus un champ Numrique. 1 - Cliquez sur longlet Donnes dans la fentre Proprits. 2 - Slectionnez Text en tant que Data Type (Type de Donnes).
Etape 3
Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches
Vous avez prcdemment utilis lvnement Before Show pour afficher le nom de la personne qui une tche est attribue. Cependant, les champs Etiquette ne peuvent pas tre mis jour de par leur nature, alors bien que le nom de lemploy soit affich sur la page, il nest pas crit dans la base de donnes. Dans la mesure o nous voulons que la base de donnes enregistre le nom ou lID de la personne qui soumet une tche, nous allons devoir ajouter la logique de programmation pour effectuer cela. 1 - Ajoutez un champ Cach votre page depuis longlet Formulaires de la Bote Outils (Toolbox). Ce type de champ nest pas visible dans le navigateur, mais il sera utilis pour stocker une valeur et mettre jour la base de donnes. 2 - Configurez le nouveau champ en paramtrant ses proprits comme indiqu ci-dessous : Name (Nom) : assigned_by - le nom du champ Cach qui vient dtre ajout. Cela peut tre nimporte quel nom. Control Source : user_id_assign_by - le champ/colonne de la base de donnes qui sera utilis(e) pour rcuprer la valeur du champ et qui sera mis(e) jour avec la nouvelle valeur en cas de changement. Data Type (Type de Donnes) : Integer - le type de la valeur lie au Control Source . Nos ID utilisateur/employ sont numriques. Default (Par Dfaut) : Session.UserID - Session.UserID est une variable de session cre par CodeCharge qui conserve lID de lutilisateur connect au systme. Ainsi, vous pouvez simplement spcifier que vous voulez enregistrer lID de lutilisateur connect dans le champ user_id_assign_by pour chaque nouvelle tche qui est soumise.
- 96 -
1 - Cliquez sur le champ task_start_date dans lExplorateur de Projet. 2 - Dans la fentre Proprits, paramtrez Default Value (Valeur Par Dfaut) CurrentDateTime. Cest ainsi que le champ Etiquette peut afficher la date bien que le champ Cach ne soit pas visible pour lutilisateur.
- 97 -
Etape 4
Programmation du Formulaire Enregistrement
Maintenant que vous avez cr une application simple de Gestion de Tches, vous souhaitez certainement ltendre pour quelle soit la fois plus pratique et plus utile Dans cette section, vous allez avoir un aperu sur la manire dimplmenter des applications pratiques et sophistiques par lajout de code et dactions, ceci afin doffrir des fonctionnalits supplmentaires votre Gestionnaire de Tches. Vous allez apprendre : Envoyer des notifications demail la personne qui la tche est attribue, Autoriser seulement la personne qui la tche est attribue la modifier.
Ajouter du Code dans lEvnement After Insert pour Envoyer des Emails
1 - Slectionnez le formulaire tasks dans la page tasks_maint en le slectionnant depuis lExplorateur de Projet, ou en cliquant nimporte o dans la lgende du formulaire. 2 - Dans la fentre Proprits, cliquez sur longlet Evnements. 3 - Slectionnez lvnement After Insert. 4 - Cliquez sur le bouton [+]. 5 - Slectionnez Ajouter du Code...
- 98 -
Une fois en mode Visualisation du Code , remplacez le commentaire gnr : <!--- write your own code here ---> par le code du dessous : <CF_CCDLookUp Field="email" Table="employees" Where="emp_id=#flduser_id_assign_to#" Connection="IntranetDB"> <CFSET mai1_To=CCDLookUp> <CF_CCDLookUp Field="email" Table="employees" Where="emp_id=#Session.UserID#" Connection="IntranetDB"> <CFSET mai1_From=CCDLookUp> <CF_CCDLookUp Field="max(task_id)" Table="tasks" Where="user_id_assign_by=#Session.UserID#" Connection="IntranetDB"> <CFMAIL TO="#mai1_To#" FROM="#mai1_From#" SUBJECT="New task for you" TYPE="HTML" > The following task was submitted:<br><br> Task ID:#CCDLookUp# <br><br>#fldtask_desc# </CFMAIL> Ce qui suit est une explication du code du dessus : <CF_CCDLookUp Field="email" Table="employees" Where="emp_id=#flduser_id_assign_to#" Connection="IntranetDB"> <CFSET mai1_To= CCDLookUp> Paramtre ladresse email To (Destinataire) ladresse email de la personne qui est attribue la tche. Le tag personnalis CCDLookUp est utilis ici pour rcuprer ladresse email approprie. <CF_CCDLookUp Field= "email" Table= "employees" Where= "emp_id=#Session.UserID#" Connection=quot;IntranetDB"> <CFSET mai1_From= CCDLookUp>
- 99 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Paramtre ladresse email From (Expditeur) la valeur du champ email dans la table employees o emp_id correspond lutilisateur connect. La fonction CCDLookUp est utilise pour rcuprer une valeur de base de donnes, alors que Session.UserID retrouve lID de la connexion utilisateur en cours. <CF_CCDLookUp Field="max(task_id)" Table="tasks" Where="user_id_assign_by=#Session.UserID#" Connection= "IntranetDB"> Rcupre lID de tche courante. Le dernier ID de tche insr peut tre obtenu en utilisant diffrentes mthodes avec diffrentes bases. Malheureusement, Microsoft Access ne supporte pas la rcupration du dernier enregistrement insr, alors vous devrez utiliser la fonction CCDLookUp pour rcuprer le plus grand ID de tche soumis par lutilisateur connect (en supposant que les ID de tche soient crs par incrmentation). <CFMAIL TO="#mai1_To#" FROM="#mai1_From#" SUBJECT="New task for you" TYPE="HTML" > The following task was submitted:<br><br> Task ID:#CCDLookUp# <br><br>#fldtask_desc# </CFMAIL> Le tag CFMail envoie une adresse email en utilisant les variables paramtres dans le tag. Le corps du tag comprend le corps de ladresse email envoyer.
- 100 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Les principales diffrences entre le code ci-dessus et celui utilis dans lvnement After Insert sont les suivantes : 1 - Une condition if (si) a t ajoute pour envoyer un email seulement si un utilisateur attribue une tche une autre personne. 2 - task_id est rcupr depuis lURL utilisant le tag personnalis CCGetParam. Nous pouvons utiliser cette mthode parce que des tches peuvent tre mises jour seulement si lutilisateur est arriv la page en cours par une URL qui contient un ID de tche mettre jour. Une telle URL ressemble : http://localhost/TaskManager/tasks_maint.cfm?task_id=9
Etape 5
Implmenter la Scurit dEnregistrement dans lEvnement After Initialize
Votre Gestionnaire de Tches est dsormais pratiquement complet, seule une fonctionnalit pouvant savrer importante manque, savoir la Scurit. Dans ltat actuel nimporte qui peut modifier et supprimer nimporte quelle tche. Vous voudrez certainement limiter laccs pour que seuls les employs autoriss puissent mettre jour leurs tches. Il y a plusieurs faons de procder, et nous allons examiner plusieurs dentre elles. 1 - Cliquez sur la page tasks_maint dans lExplorateur de Projet. 2 - Dans la fentre Proprits, slectionnez longlet Evnements. 3 - Ajoutez Custom Code (Code Personnalis) lvnement After Initialize de la page. Procdez comme suit : Une fois en mode Visualisation de Code, remplacez le commentaire gnr : <!------------------------------------> <!--- Write your own code here ---> <!------------------------------------>
- 101 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) par le code du dessous : <CF_CCGetParam strName="task_id" outputvar="current_task"> <CFPARAM Name="Session.UserID" Default=""> <CF_CCToSQL Value="#current_task#" Type="#ccsInteger#"> <CF_CCDLookUp Field="user_id_assign_to" Table="tasks" Where="task_id=#CCToSQL#"> <CFIF current_task NEQ 0 AND Session.UserID NEQ CCDLookUp> <CFSET hideTasks = True> <!---<CFSET strRedirect = "tasks_list.cfm"> ---> <!---<CFSET blnUpdateAllowedTasks = False> ---> <!---<CFSET blnDeleteAllowedTasks = False> ---> <!---<CFSET hideUpdate = True>---> <!---<CFSET hideDelete= True>---> </CFIF> Le code du dessus vous permet de tester les mthodes pour implmenter la scurit denregistrement : Ne pas montrer la Tche (formulaire Enregistrement) sur la page si la tche slectionne nappartient pas lutilisateur connect. Un utilisateur non autoris verra une page blanche. Vous pouvez cacher nimporte quel formulaire sur une page en attribuant une valeur True (vraie) la variable hideTasks (cacher Tches). Le code "current_task NEQ 0 " dans la condition CFIF indique que le code sera seulement excut si un utilisateur essaie de modifier une tche existante et qui ne lui est pas attribue. Vous pouvez tester cette fonctionnalit en insrant le code du dessus dans lvnement, passer en mode Live Page et en essayant de modifier une tche qui ne vous est pas attribue et dans ce cas, vous verrez une page vide. Bien que cette fonctionnalit ne soit pas trs utile, elle illustre comment cacher des formulaires sur une page. Maintenant ajoutez un autre formulaire Enregistrement votre page qui ne puisse pas tre mis jour et qui ait seulement des champs Etiquette qui montrent les informations. Une fois que vous avez deux formulaires sur la page, vous pouvez cacher chaque formulaire par programmation en utilisant des critres dexclusion. Rediriger des utilisateurs non autoriss sur une autre page. Seuls les utilisateurs qui les tches sont attribue s peuvent visualiser la page. Vous pouvez mettre en application cette fonctionnalit en modifiant lgrement le code du dessus comme montr ci-dessous : <CF_CCGetParam strName="task_id" outputvar="current_task"> <CFPARAM Name="Session.UserID" Default=""> <CF_CCToSQL Value="#current_task#" Type="#ccsInteger#"> <CF_CCDLookUp Field="user_id_assign_to" Table="tasks" Where="task_id=#CCToSQL#"> <CFIF current_task NEQ 0 AND Session.UserID NEQ CCDLookUp> <!---<CFSET hideTasks = True> ---> <CFSET strRedirect = "tasks_list.cfm"> <!---<CFSET blnUpdateAllowedTasks = False> ---> <!---<CFSET blnDeleteAllowedTasks = False> ---> <!---<CFSET hideUpdate = True>---> <!---<CFSET hideDelete= True>---> </CFIF>
- 102 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Le code du dessus montre que vous devez commenter la ligne prcdemment active, et activer la ligne qui commence avec <CFET stRedirect. StrRedirect est une variable utilise par CodeCharge Studio pour dterminer si la page en cours doit tre redirige sur une autre page, par exemple si un utilisateur na pas de session ouverte. Cette variable peut tre utilise seulement sur les pages ayant un accs restreint et ncessitant une authentification. Vous pouvez simplement attribuer la page de destination la variable strRedirect et la page sera alors automatiquement redirige. Testez cette fonctionnalit en modifiant le code comme montr, ensuite passez en mode Live Page, et essayez alors de modifier une tche qui ne vous est pas attribue.
Perl
Extension des Fonctionnalits de lApplication avec la Programmation dEvnements ( Perl)
Vous avez certainement remarqu que jusqu prsent vous avez construit votre Gestionnaire de Tches sans avoir vous proccuper du code. En effet, CodeCharge Studio peut vous aider construire des systmes fonctionnels sans programmation ; toutefois la cration de systmes plus sophistiqus requiert un minimum de programmation. Heureusement, CodeCharge Studio facilite la programmation en proposant un diteur de code de haut niveau, en plus des Evnements et des Actions qui vous aident insrer des morceaux de code pr-programms dans le programme. Voici les dfinitions dune Action et dun Evnment : Action Composant de gnration de code dfinissable par lutilisateur, qui insre un bloc de code dans une procdure vnementielle. CodeCharge Studio est fourni avec de nombreuses Actions pr-dfinies, qui se trouvent dans le dossier suivant : (CCS folder)\Components\Actions. Intrieurement, les actions consistent en du code XML et XSL pouvant tre facilement personnalis. Par exemple, une action peut tre paramtre sur un Textbox pour valider une adresse e-mail. Procdure Evnementielle Une procdure automatiquement excute en rponse un vnement lanc par un programme son excution. Les vnements sont les meilleurs emplacements pour mettre du Code Personnalis (Custom Code) . Connexion la Base de Donnes cot Serveur en Perl Bien que la connexion en mode conception (via lutilisation de lasssistant), quand vous utilisez Perl, puisse tre faite une base de donnes Microsoft Access, la connexion ct Serveur doit tre configure diffremment. En particulier, linterface DBI doit tre utilise pour que la connexion utilise un driver DBD appropri, disponible sur le serveur sur lequel les pages Web seront publies. Pour plus dinformations sur la configuration des connexions ct Serveur, merci de vous rfrer la section sur les connexions ct Serveur en Perl.
Etape 1
Utiliser lEvnement Before Show Row pour Changer la Couleur du Texte
Dmarrons la programmation basique avec une tche simple de changement de la couleur dun champ grille sur notre page Liste de Tches. Concrtement, nous allons mettre en vidence les tches qui vous sont attribues en affichant votre nom en bleu dans la grille. 1 - Ouvrez la page tasks_list dans lExplorateur de Projet. 2 - Ouvrez larborescence de la grille tasks. 3 - Fates un clic droit sur le champ emp_login1 et slectionnez Proprits. 4 - Dans longlet Donnes, paramtrez la valeur de la proprit Name (Nom) user_id_assign_to . 5 - Dans lExplorateur Projet, fates un clic droit sur le champ task_name et slectionnez Proprits. 6 - Dans longlet Donnes, paramtrez la valeur de la proprit Content (Contenu) HTML. 7 - Slectionnez la grille tasks dans lExplorateur de Projet, ou cliquez nimporte o dans la lgende du formulaire.
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 103 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 8 - Slectionnez longlet Evnements dans la fentre Proprits. 9 - Fates un clic droit sur lvnement Before Show Row et slectionnez Ajouter du Code... . Lvnement Before Show Row se dclenche dans le programme aprs que les valeurs champs soient attribues, mais avant dtre gnres en HTML. En ajoutant du code dans cet vnement, vous pouvez modifier la valeur champ avant quelle ne soit montre.
- 104 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) $tasks->{task_name}->SetValue("<b><font color='blue'>" . $tasks->{task_name}->GetValue() . "</font></b>"); Ce code est excut si la condition if est rencontre. Elle modifie la valeur du champ task_name. La valeur du champ est remplace par sa valeur de base de donnes encapsule dans du code HTML, qui spcifie la couleur de police, telle que le bleu, et ajoute un tag HTML <b> pour afficher la police en gras. De plus, notez que le code est orient objet et que vous indiquez que vous voulez attribuer une valeur au champ task_name dans la grille tasks. SetValue est une mthode dun objet, pouvant tre utilise pour modifier la valeur de lobjet.
- 105 -
Etape 2
Modifier un Champ Etiquette sur la Page Maintenance de Tches
Maintenant procdons une modification ncessaire sur la page Maintenance de Tches sur laquelle vous avez d remarqu que le champ Etiquette Assigned By naffiche pas le nom de lemploy, mais lID, comme montr ci-dessous ; cest parce que la table tasks contient seulement lID utilisateur, alors que la table employees contient les noms des utilisateurs rels.
Il y a plusieurs mthodes possibles pour traiter de la question. Merci de vous rfrer aux explications qui suivent : 1 - Crez une Requte qui contient plusieurs tables pouvant tre utilise en tant que source de donnes par le formulaire Enregistrement, comme vous lavez dj fait avec la grille sur la page Liste de Tches. Malheureusement, les requtes qui contiennent plusieurs tables ne peuvent pas tre mises jour de par leur nature, et donc le formulaire Enregistrement entier peut sarrter de fonctionner. En dautres termes, si vous avez indiqu que vous vouliez utiliser une requte contenant une table tasks et employees dans votre formulaire Enregistrement, alors si vous attribuez une tche quelquun dautre, le programme ne pourra pas savoir si vous vouliez mettre jour la table tasks avec le nouveau employee_id, ou si vous vouliez mettre jour la table employees et changer le nom de lemploy. Ainsi, si vous utilisez plusieurs tables comme source de donnes pour le formulaire Enregistrement, vous devrez galement dfinir les oprations Custom Insert , Custom Update et Custom Delete dans les proprits du formulaire Enregistrement pour indiquer quels champs de la base de donnes devront tre mis jour avec les valeurs correspondantes saisies sur la page. Cette mthode semble reprsenter beaucoup deffort juste pour afficher une valeur supplmentaire sur la page. 2 - Utilisez une Procdure Evnementielle pour insrer du Code Personnalis (Custom Code) o vous pourrez produire la valeur dsire par programmation. Cette mthode est trs flexible, dans la mesure o elle vous permet dtendre le code gnr par lajout de votre propre code. Ltape suivante dcrit en dtail cette mthode.
- 106 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 2 - Dans la fentre Proprits, cliquez sur longlet Evnements. 3 - Fates un clic droit sur lvnement Before Show et slectionnez Ajouter du Code... . CodeCharge Studio va alors automatiquement passer en mode Visualisation du Code .
Une fois en mode Visualisation du Code , si vous gnrez du Perl, vous devriez voir le fichier tasks_maint_events.pl , avec les lignes de code suivantes : # ------------------------# Write your own code here. # ------------------------Remplacez le texte : # Write your own code here. Par : $DBIntranetDB = clsDBIntranetDB->new(); if ( $tasks->{EditMode} ) { $tasks->{user_id_assign_by}->SetValue(CCDlookUp("emp_name", "employees", " emp_id=" . $DBIntranetDB>ToSQL($tasks->{user_id_assign_by}->GetValue(), $ccsInteger),$DBIntranetDB)); } else { $tasks->{user_id_assign_by}->SetValue(CCDlookUp("emp_name", "employees", " emp_id=" . $DBIntranetDB->ToSQL(CCGetSession("UserID"), $ccsInteger), $DBIntranetDB)); } Le code du dessus est compos des lments suivants : tasks : le nom du formulaire enregistrement sur la page. EditMode : proprit du formulaire, qui indique si lenregistrement est ditable. En fonction de la valeur de cette proprit, nous affichons soit le nom de la personne qui a initialement soumis la tche (mode Edition), soit le nom de la personne qui soumet la
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 107 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) tche (mode Insertion). user_id_assign_by : le nom de lEtiquette dans la Grille, et en mme temps le nom du champ base de donnes qui a t utilis pour crer cette Etiquette, et qui est dsormais sa source de donnes. SetValue : une mthode dun objet (dans ce cas lEtiquette), qui a t utilise pour modifier la valeur de lobjet. $tasks->{user_id_assign_by}->SetValue : mthode SetValue entirement qualifie, qui dit au programme quel objet il se rfre. En dautres termes, cest la mthode SetValue qui affecte le champ user_id_assign_by , qui en retour dpend de la grille tasks. CCDlookup : fonction de CodeCharge qui supporte la rcupration dune valeur de base de donnes base sur un nom de champ, un nom de table, et une condition. Ici, cette fonction rcupre le Nom de lEmploy ( emp_name) dans la table employees en utilisant la condition suivante : la cl (emp_id) est gale la valeur courante de lEtiquette. ToSQL : Fonction de CodeCharge qui convertit une valeur dans un format support par la base de donnes. Cette fonction requiert un paramtre qui dit si une valeur doit tre convertie en un nombre (entier) ou en du texte. Dans ce cas, cette fonction convertit la valeur courante de lEtiquette en un nombre pouvant tre utilis avec la fonction CCDlookup. Il est conseill de toujours utiliser cette fonction avec CCDlookup. $DBIntranetDB : le nom de lobjet qui dfinit la connexion base de donnes que vous voulez utiliser dans la fonction CCDLookup. CCGetSession("UserID") : fonction de CodeCharge qui retourne lID de lutilisateur connect au systme. Le code se lit approximativement comme suit : If a record is being edited : Attribue le nom de la personne qui a initialement soumis la question lEtiquette user_id_assign_by, par la recherche du nom de lemploy dans la table employees en utilisant la fonction CCDLookup, qui utilise la connexion IntranetDB et la valeur de lEtiquette user_id_assign_by. If a new record is being created : Attribue lutilisateur connect lEtiquette user_id_assign_by en rcuprant son nom dans la table employees en utilisant la fonction CCDLookup qui utilise la connexion IntranetDB et la fonction CCGetSession("UserID"), qui permet dobtenir lID de lutilisateur connect. Maintenant que vous avez modifi par programmation la valeur de lEtiquette user_id_assign_by pour produire le Nom de lEmploy la place de son ID, vous allez devoir indiquer que ce champ est dsormais un champ Texte, et non plus un champ Numrique. 1 - Cliquez sur longlet Donnes dans la fentre Proprits. 2 - Slectionnez Text en tant que Data Type (Type de Donnes).
- 108 -
Etape 3
Ajouter un Champ Cach "Assigned By" pour la Mise Jour Automatique de Nouvelles Tches
Vous avez prcdemment utilis lvnement Before Show pour afficher le nom de la personne qui attribue une tche. Cependant, les champs Etiquette ne peuvent pas tre mis jour de par leur nature, alors bien que le nom de lemploy soit affich sur la page, il nest pas crit dans la base de donnes. Dans la mesure o nous voulons que la base de donnes enregistre le nom ou lID de la personne qui soumet une tche, nous allons devoir ajouter la logique de programmation pour effectuer cela. 1 - Ajoutez un champ Cach votre page depuis longlet Formulaires de la Bote Outils (Toolbox). Ce type de champ nest pas visible dans le navigateur, mais il sera utilis pour stocker une valeur et mettre jour la base de donnes. 2 - Configurez le nouveau champ en paramtrant ses proprits comme indiqu ci-dessous : Name (Nom) : assigned_by - le nom du champ Cach qui vient dtre ajout. Cela peut tre nimporte quel nom. Control Source : user_id_assign_by - le champ/colonne de la base de donnes qui sera utilis(e) pour retrouver la valeur du champ et qui sera mis(e) jour avec la nouvelle valeur en cas de changement. Data Type (Type de Donnes) : Integer - le type de la valeur lie au Control Source . Nos ID utilisateur/employ sont numriques. Default (par dfaut) : CCGetSession("UserID" ) - CCGetSession("UserID") est une fonction de CodeCharge qui rcupre lID de lutilisateur connect au systme. Ainsi, vous pouvez simplement spcifier que vous voulez enregistrer lID de lutilisateur connect dans le champ user_id_assign_by pour chaque nouvelle tche qui est soumise.
- 109 -
1 - Cliquez sur le champ task_start_date dans lExplorateur de Projet. 2 - Dans la fentre Proprits, paramtrez Default Value (Valeur Par Dfaut) CurrentDateTime. Cest ainsi que le champ Etiquette peut afficher la date, bien que le champ Cach ne soit pas visible pour lutilisateur.
- 110 -
Etape 4
Programmation du Formulaire Enregistrement
Maintenant que vous avez cr une application simple de Gestion de Tches, vous souhaitez certainement ltendre pour quelle soit la fois plus pratique et plus utile Dans cette section, vous allez avoir un aperu sur la manire dimplmenter des applications pratiques et sophistiques par lajout de code et dactions, ceci afin doffrir des fonctionnalits supplmentaires votre Gestionnaire de Tches. Vous allez apprendre : Envoyer des notifications demail la personne qui la tche est attribue, Autoriser seulement la personne qui la tche est attribue la modifier.
Ajouter du Code dans lEv nement After Insert pour Envoyer des Emails
1 - Slectionnez le formulaire tasks dans la page tasks_maint en le slectionnant depuis l Explorateur de Projet, ou en cliquant nimporte o dans la lgende du formulaire. 2 - Dans la fentre Proprits, cliquez sur longlet Evnements. 3 - Slectionnez lvnement After Insert. 4 - Cliquez sur le bouton [+]. 5 - Slectionnez Ajouter du Code...
Une fois en mode Visualisation du Code, remplacez le commentaire gnr : // Write your own code here.
- 111 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Par le code suivant : $DBIntranetDB = clsDBIntranetDB->new();
$from_name = CCDlookUp("emp_name", "employees", "emp_id=" . CCGetSession("UserID") , $DBIntranetDB); $from_email = CCDlookUp("email", "employees", "emp_id=" . CCGetSession("UserID"), $DBIntranetDB); $to_email= CCDlookUp("email", "employees", "emp_id=" . $tasks->{user_id_assign_to}->GetValue(), $DBIntranetDB);
$subject = "New task for you"; $message = "The following task was submitted:<br><br>" . "Task ID: " . CCDlookUp("max(task_id)", "tasks", "user_id_assign_by=" . CCGetSession("UserID"), $DBIntranetDB) . "<br><br>" .
$tasks->{task_desc}->GetValue();
if(open(SENDMAIL, "| sendmail $from_name")) { print SENDMAIL "From: $from_email\nTo: $to_email\nSubject: $subject\n\n$message\n.\n"; close(SENDMAIL); } Comme vous avez pu le constater, le code du dessus envoie des emails aux utilisateurs qui de nouvelles tches sont attribues. Ce qui suit est une explication du code : $from_name = CCDlookUp("emp_name", "employees", "emp_id=" . CCGetSession("UserID") , $DBIntranetDB); Paramtre from_name la valeur du champ emp_name pour lutilisateur connect. $from_email = CCDlookUp("email", "employees", "emp_id=" . CCGetSession("UserID"), $DBIntranetDB); Paramtre from_email la valeur du champ email dans la table employees o emp_id correspond lutilisateur connect. La fonction CCDlookUp est utilise pour rcuprer une valeur de base de donnes, alors que CCGetSession("UserID") rcupre lID de lutilisateur connect. $to_email= CCDlookUp("email", "employees", "emp_id=" . $tasks->{user_id_assign_to}->GetValue(), $DBIntranetDB); Paramtre to_email lemail de la personne qui est attribue la tche. La fonction CCDlookUp est utilise ici pour rcuprer ladresse email approprie. $subject = "New task for you";
- 112 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Lobjet de lemail envoyer. $message = "The following task was submitted:<br><br>" . "Task ID: " . CCDlookUp("max(task_id)", "tasks", "user_id_assign_by=" . CCGetSession("UserID"), $DBIntranetDB) . "<br><br>" . $tasks->{task_desc}>GetValue(); La variable message contient le corps de lemail qui sera envoy. La fonction CCDlookUp est utilise pour rcuprer le plus grand ID de tche soumis par lutilisateur connect (en supposant que les ID de tche sont crs par incrmentation). if(open(SENDMAIL, "| sendmail $from_name")) { print SENDMAIL "From: $from_email\nTo: $to_email\nSubject: $subject\n\n$message\n.\n"; close(SENDMAIL); } Envoie lemail en utilisant les variables cres dans le code du dessus.
if (CCGetSession("UserID") != $tasks->{user_id_assign_to}->GetValue()) { $from_name = CCDlookUp("emp_name", "employees", "emp_id=" . CCGetSession("UserID") , $DBIntranetDB); $from_email = CCDlookUp("email", "employees", "emp_id=" . CCGetSession("UserID"), $DBIntranetDB); $to_email= CCDlookUp("email", "employees", "emp_id=" . $tasks->{user_id_assign_to}->GetValue(), $DBIntranetDB); $subject = "A task was assigned to you"; $message = "The following task was assigned to you:<br><br>" . "Task ID: " . CCGetFromGet("task_id", "") . "<br><br>" . $tasks->{task_desc}->GetValue(); if(open(SENDMAIL, "| sendmail $from_name")) { print SENDMAIL "From: $from_email\nTo: $to_email\nSubject: $subject\n\n$message\n.\n"; close(SENDMAIL); } } Les principales diffrences entre le code ci-dessus et celui utilis dans lvnement After Insert sont les suivantes :
Traduction ralise par KAPITEC SOFTWARE S.A.S. - Date : mars 2004
- 113 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) 1 - Une condition if a t ajoute pour envoyer un email seulement si un utilisateur attribue une tche une autre personne. 2 - task_id est rcupr depuis lURL utilisant la fonction CCGetFromGet. Nous pouvons utiliser cette mthode parce que des tches peuvent tre mises jour seulement si lutilisateur est arriv la page en cours par une URL qui contient un ID de tche mettre jour. Une telle URL ressemble : http://localhost/TaskManager/tasks_maint.cgi?task_id=9
Etape 5
Implmenter la Scurit dEnregistrement dans lEvnement After Initialize
Votre Gestionnaire de Tches est dsormais pratiquement complet, seule une fonctionnalit pouvant savrer importante manque, savoir la Scurit. Dans ltat actuel du gestionnaire, nimporte qui peut modifier et supprimer nimporte quelle tche. Vous voudrez certainement limiter laccs pour que seuls les employs autoriss puissent mettre jour leurs tches. Il y a plusieurs faons de procder, et nous allons examiner plusieurs dentre elles. 1 - Cliquez sur la page tasks_maint dans lExplorateur de Projet. 2 - Dans la fentre Proprits, slectionnez longlet Evnements. 3 - Ajoutez Custom Code (Code Personnalis) lvnement After Initialize de la page. Procdez comme suit : 4 - Une fois en mode Visualisation du Code, remplacez le commentaire gnr : # Write your own code here.
- 114 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Par ce code : $DBIntranetDB = clsDBIntranetDB->new(); $current_task = CCGetParam("task_id", ""); $task_user_id = CCDlookUp("user_id_assign_to", "tasks", "task_id=" . $DBIntranetDB->ToSQL($current_task, $ccsInteger), $DBIntranetDB);
if ( ($current_task != 0) && (CCGetSession("UserID") != $task_user_id) ) { $tasks->{Visible} = 0; # $Redirect = "tasks_list.cgi"; } Le code du dessus vous permet de tester les diffrentes mthodes pour implmenter la scurit denregistrement : Ne pas montrer la Tche (formulaire Enregistrement) sur la page si la tche slectionne nappartient pas lutilisateur connect. Un utilisateur non autoris verra une page blanche. Vous pouvez cacher nimporte quel formulaire sur une page en lui attribuant une valeur 0 la proprit Visible (visible) du formulaire. Le code $current_task != 0 dans la condition if indique que le code sera seulement excut si lutilisateur essaie de modifier une tche existante et qui ne lui est pas attribue. La condition if sassure galement que tous les utilisateurs peuvent crer de nouvelles tches. Vous pouvez tester cette fonctionnalit en insrant le code du dessus, en passant en mode Live Page, et en essayant de modifier une tche qui ne vous est pas attribue ; vous verrez alors une page vide. Bien que cette fonctionnalit puisse ne pas tre trs sutile, elle illustre comment cacher des formulaires sur une page. Ajoutez un autre formulaire Enregistrement sur la page, qui ne puisse pas tre mis jour et qui aient juste des champs Etiquette qui montrent les informations. Une fois que vous avez vos deux formulaires sur la page, vous pouvez cacher chaque formulaire par programmation en utilisant des critres dexclusion. Rediriger des utilisateurs non autoriss sur une autre page. Seuls les utilisateurs qui les tches sont attribues peuvent visualiser la page. Vous pouvez mettre en application et tester cette fonctionnalit en modifiant lgrement le code du dessus comme montr cidessous : $DBIntranetDB = clsDBIntranetDB->new(); $current_task = CCGetParam("task_id", ""); $task_user_id = CCDlookUp("user_id_assign_to", "tasks", "task_id=" . $DBIntranetDB->ToSQL($current_task, $ccsInteger), $DBIntranetDB);
- 115 -
CODECHARGE STUDIO - GUIDE DE DEMARRAGE RAPIDE (DIDACTICIEL) Ce code montre que vous devriez commenter la ligne prcdemment active, et activer la ligne qui commence avec $ Redirect. $Redirect est une variable utilise par CodeCharge Studio qui dtermine si la page en cours doit tre redirige sur une page en cours doit tre redirige sur une autre page, par exemple, dans le cas o un utilisateur naurait pas de session ouverte. Cette variable peut tre utilise seulement sur les pages ayant un accs restreint et ncessitant une authentification. Vous pouvez simplement attribuer la page de destination la variable $ Redirect et la page sera alors automatiquement redirige. Testez cette fonctionnalit en modifiant le code comme montr, en passant en mode Live Page, et enfin en essayant de modifier une tche qui ne vous est pas attribue.
CONCLUSION
Ce didacticiel vous a permis dutiliser le Gnrateur dApplication pour crer un Gestionnaire de Tches. Bien que de nombreuses autres caractristiques et amliorations puissent tre ajoutes votre application, maintenant vous vous tes familiaris(e) avec linterface de CodeCharge Studio et un grand nombre de ses fonctionnalits. Pour plus dinformations sur des points spcifiques, merci de vous rfrer au Guide Utilisateur de CodeCharge Studio.
- 116 -