if(t==this){
 t.xxtree269.setDefer();
}else{
 t.xxtree269.setSubload();
 t.xxtree269.emptyNodes();
 t.xxtree269.setUndefer();
}
t.xxtree269.add(269,-1,'Exemples','');
t.xxtree269.add(339,269,'Premier exemple: world','C\'est une application permettant d\'afficher les données provenant de la base de donnée "world" disponible sur le site de <a href="http://www.mysql.com/" target="_blank">MySql<\/a>.\n<br />\n<br />\nLe shéma de la base est le suivant\n<br />\n<img src="img/world-db.gif" alt="" />\n<br />\n<br />\nPour y accéder, cliquez \n<a class="ACTION" href="javascript:OpenWindowUrl(\'http://www.mypitself.com/w01/\');"><img src="img/blinkdore.gif" alt="" /> ici <\/a>\n<br />\n<br />\n');
t.xxtree269.add(271,269,'Deuxième exemple: CRM','Cette application est un petit CRM permettant à un fournisseur de service informatiques de mettre à la disposition de ses clients de type entreprise une organisation leur permettant de gérer leur propres conntacts.\n<br />\n<br />\nChaque société aura un utilisateur principal appelé manager.\n<br />\nLe manager crée les contacts ( nom, prénom, .... )\n<br />\nLe manager définit les informations qui pourront être rattachées aux contacts selon ses besoins propres à la société.\n<br />\n<br />\nLes informations sont de deux types:\n<br />\n- Evènement: c\'est une réunion, un déjeuner ... à une date donnée.\n<br />\n- Relation: c\'est un fait concernant le contact comme par exemple, il est important, moyen ou petit, il parle anglais, italien ou français, demande des conditions particulières de livraison ...\n<br />\n<br />\nLa liste des contacts est unique pour une société donnée et sera partagée par les utilisateurs de la société en relation avec les contacts.\n<br />\n<br />\nLe manager définit les utilisateurs ( login, nom, prénom, mot de passe .... ).\n<br />\n<br />\nL\'utilisateur aura une liste de contacts qu\'il devra piocher parmi la liste des contacts de la société. \n<br />\n<br />\nSur chacun des contacts qu\'il se sera approprié il pourra ajouter des relations ou des évènements dans le cadre définit par le manager.\n<br />\n<br />\nLe contact peut être partagé par plusieurs utilisateurs.\n<br />\n<br />\nUn système de requêttage permet à l\'utilisateur de lister ses contacts satisfaisant à des relations particulières. Ces requêtes peuvent être combinées par des fonction ET, OU, NOT ou XOR.\n<br />\n<br />\nLe manager peut effectuer ces requêtes sur tous les contacts de la société.\n<br />\n<br />\nLe modèle de données de cet exemple est celui que vous obtenez en cliquant sur l\'image çi-dessous\n<br />\n<div style="float:left">\n<a href="javascript:OpenOutWindow1(\'img/modmypitcrm.gif\',5,5,720,520)"><img src="img/modmypitcrm_s.gif" alt="" /><\/a>\n<\/div>\n<br />\n<br />\nVous pouvez voir la documentation générale ( normalement pour chaque type d\'utilisateur, il y a une documentation spécifique ) en cliquant <a class="ACTION" href="http://www.mypitself.com/crm01/doc/index_g_0_lang_2.php" target="_blank"> ici <img src="img/picto/13x13/qs.png" alt="" /><\/a>.\n<br />\n<br />\nSi vous voulez l\'essayer en ligne, envoyez moi un mail par la page contact de ce site,\net je vous enverrai une login/mot de passe. Cette application est accessible <a class="ACTION" href="javascript:OpenWindowUrl(\'http://www.mypitself.com/crm01/\');"> <img src="img/blinkdore.gif" alt="" /> ici <\/a>.\n<br />\n<br />\n<br />\n<br />\nCe n\'est qu\'un petit CRM mais vous avez vu d\'autres possibilités de MyPitSelf. \n<br />\n<br />\nJe n\'ai pas voulu saturer l\'application de boutons à cliquer mais il est relativement facile d\'en ajouter pour obtenir par exemple à parir de la fiche contact la liste des personnes qui sont en relation avec elles. \n<br />\n<br />\nOn peut aussi ajouter des tables de sociétés, ajouter des liens entre les sociétés et les contacts, et pleins d\'autres choses qui demandent un peu plus de programmation. \n<br />\n<br />\nA bientôt.\n<br />\n');
t.xxtree269.add(14,269,'Troisième exemple','Nous allons utiliser cet exemple pour voir l\'utilisation de ce système. \n<br />\nLe but est de construire un programme à la demande d\'un client. \n<br />\nLes explications sont minimales, ne vous en faites pas si vous ne saisissez pas tout, ça viendra au fur et à mesure. \n<br />\n<br />\nL\'approche projet a trois niveaux. \n<br />\n<br />\n<span class=LISTTITLE>\nNiveau organisationnel ( que veut le client ? ). \n<\/span>\n<br />\nIl besoin d\'un système permettant de gérer les tâches à réaliser. Chaque utilisateur pourra créer ses propres tâches composées d\'un nom et d\'un niveau de priorité. Le niveau de priorité sera un nombre et chaque utilisateur pourra voir sa liste de tâches triées selon son son ordre de priorité.\n<br />\nChaque utilisateur pourra trouver les tâches contenant une chaine de caractères. \n<br />\nLes managers pourront aussi voir les tâches des autres utilisateurs mais les utilisateurs normaux ne pourront voir que leurs propres tâches. \n<br />\nUn utilisateur peut modifier, dupliquer ou supprimer ses tâches. \n<br />\n<br />\n<span class=LISTTITLE>\nNiveau fonctionnel ( Que devons nous faire ? ). \n<\/span>\n<br />\nUne table contenant un identifiant utilisateur, un nom de tâche et un niveau de priorité. \n<br />\nUne table des utilisateurs contenant l\'identifiant utilisateur, son nom et son prénom. \n<br />\nUne gestion des groupes ( utilisateurs normaux et managers ). \n<br />\n<br />\nNous aurons besoin d\'une fonction affichant une liste de tâches selon son niveau de priorité et selon le fait que les tâches contiennent certains mots. A partir de cette liste, on pourra créer des nouvelles tâches, modifier celles existantes ou les supprimer. \n<br />\nUne autre fonction ( manager ) affichera une liste de tache le nom de l\'utilisateur. \n<br />\nDonc selon le profil utilisateur, il faudra afficher différents menus: \n<br />\nUtilisateur: Voir mes tâches Manager: Voir mes tâches, Voir toutes les tâches \n<br />\n<br />\nUn super utilisateur aura la possibilité d\'autoriser de nouveaux utilisateurs et de leur assigner un niveau d\'utilisation ( manager ou utilisateur ) \n<br />\nUn manager sera considéré comme un utilisateur pour ses propres tâches. \n<br />\n<br />\n<span class=LISTTITLE>\nNiveau technique: ( Comment allons nous réaliser ceci ). \n<\/span>\n<br />\nVoir les chapitres suivants. \n<br />\n<br />\n<u>Remarque:<\/u> Comme pendant une modification, il y a un vérou qui est mis en place et que pendant les procédures suivantes il se peut que vous fermiez des fenêtres alors que vous faites une modification, le vérou restera. \n<br />\nPour le retirer, allez dans le menu <a class="ACTION">Profil<\/a> puis choisisez l\'option <a class="ACTION">Voir les vérous<\/a> puis cliquez sur le bouton <a class="ACTION">Unlock<\/a>. \n');
t.xxtree269.add(15,14,'Un nouvel environnement','Donc,<a class="ACTION" href="javascript:OpenWindowMyPitSelf()">cliquez ici pour ouvrir une fenêtre si ce n\'est déjà fait.<\/a> sur MyPitSelf et connectez vous en tant qu\'utilisateur/mot de passe = 1/1 \n<br />\n<br />\nLa première des choses à faire est de créer un nouvel environnement. \n<br />\n<br />\nNote: pour le moment, je n\'ai pas assez travaillé sur les privilèges sur les bases de données donc il n\'y a pas de réglage fin de ce coté. \n<br />\nCa fonctionne en définissant pour chaque environnement un utilisateur/mot de passe ( ou en définissant toujours le même ) et les autorisations sur les bases sont réglées pour cet utilisateur. \n<br />\nJe vous conseil d\'utiliser MyPitSelfDev, ça marche ! \n<br />\n<br />\nPour réaliser celà, vous devrez faire les actions décrites sur les écrans que vous verez en cliquant ici <a href="javascript:popup(\'CreateNewEnvironment\')"><img src="img/sc.gif" /><\/a>.\n\n<br />\n<br />\nCréer un nouvel environnement revient à créer des répertoires et une base de donnée système. ( regardez dans les répertoires mypitselfp et mypitselfw )\n<br />');
t.xxtree269.add(71,14,'Un nouveau manager','<a class="ACTION" href="javascript:ShowWindowItself();">Cliquez ici pour ouvrir une fenêtre si ce n\'est déjà fait.<\/a> sur MyPitSelf et connectez vous en tant qu\'utilisateur/mot de passe = 1/1 \n<br />\n\nIl faut maintenant créer un manager qui aura la possibilité d\'utiliser ce nouvel environnement.\n<br />\nIl y a trois profils de base dans un développement avec MyPitSelf: \n<ul>\n<li>Le super utilisateur qui peut tout faire.<\/li>\n<li>Le développeur qui ne peut pas créer des éléments mettant en cause l\'architecture du système à développer. <\/li>\n<li>Le manager qui peut faire pas mal de choses. <\/li>\n<\/ul>\nPour le créer, il faudra exécuter les actions que vous verrez en cliquant ici <a href="javascript:popup(\'newdmanager\')"><img src="img/sc.gif" /><\/a>\n<br />\n<br />\nUn développeur de type manager est créé. Son nom est m, son mot de passe est 1. \n<br />\nOn lui a donné l\'autorisation de travailler sur l\'environnement de test. \n<br />\nLe champ contenant l\'Ordre de l\'environnement permet de fixer l\'environnement par défaut ( ordre le plus petit ) de l\'utilisateur quand il se connecte. \n<br />\n<br />');
t.xxtree269.add(17,14,'Commencer à développer','');
t.xxtree269.add(261,17,'Initialiser l&#39;environnement','<a class="ACTION" href="javascript:ShowWindowItself();">Cliquez ici pour ouvrir une nouvelle fenetre si ce n\'est déjà fait<\/a> \n<br />\nQuittez l\'environnement principal si vous êtes connecté en tant qu\'utilisateur 1/1 \n<br />\net connectez vous en tant que <span class=LISTTITLE>m/1 <\/span>\n<br />\n<br />\nComme vous vous êtes connecté en tant qu\'utilisateur m, vous ne voyez pas les mêmes menus que précédamment, en particulier, les menus permettant de gérer les utilisateurs sont réservés au super utilisateur. \n<br />\n<br />\nEn revanche d\'autres menus sont apparus et vous permettront de développer. \n<br />\nIl faut tout d\'abord créer une image de la base de donnée. En fait cette image a déjà été créée lors de la création de l\'environnement. Vous pouvez la voir en cliquant sur le bouton <a class="ACTION">base<\/a> du menu. \n<br />\n<br />\nPuis il faut donner à cette image une existance réelle c\'est à dire créer réellement la base dans MySql. \n<br />Pour ce faire, exécutez les actions que vous voyez en cliquant ici \n<a href="javascript:popup(\'CreerLaBaseDeDonnees\')"><img src="img/sc.gif" /><\/a>. \n<br />\n<br />\nRemarque: La base contient déjà 2 tables: Une table utilisateurs et Lock ( verrous ). \n<br />\nCes deux tables sont créées car MyPitSelf est conçu pour travailler en environnement multi utilisateur. \n<br />\nElles peuvent être supprimées ou modifiées mais pour l\'instant, nous n\'allons pas y toucher. \n');
t.xxtree269.add(262,17,'Créer une table','Puis il faut créer la table des tâches. Cette table est rattachée à la base et contient : <ul>\n<li>Un champ ID = identifiant unique de chaque tâche <\/li>\n<li>Un champ Nom = nom de la tâche sur 64 caractères non vides <\/li>\n<li>Un champ priorite = priorité de la tâche numérique entier <\/li>\n<li>Un champ utilisateur = Référence de l\'utilisateur créant la tâche <\/li>\n<\/ul>\n\n<br />\n<br />\nDes types de données existent déjà, nous allons les utiliser sans créer des nouveaux types. Voir le bouton <a class="ACTION">donnee<\/a> du menu. \n<br />\n<br />\nPour ce faire, exécutez les actions que vous voyez en cliquant ici <a href="javascript:popup(\'CreerLaTableTaches\')"><img src="img/sc.gif" /><\/a>. \n<br />\n');
t.xxtree269.add(263,17,'Créer une requête liste','Maintenant il faut créer une requête permettant de lister les tâches. Elle resemblera à: \n<xmp>\nSELECT T0.ID,T0.Nom,T0.Priorite,T0.xRefUser  \nFROM\n$Data.Taches T0 \nWHERE T0.Priorite <= %SQLPAR0% and\n      T0.Nom LIKE  \'%%SQLPAR1%%\'  and\n      T0.xRefUser = %SQLPAR2%   \nORDER BY \n      T0.Priorite DESC ,\n      T0.ID DESC  \nLIMIT $xxxlistStart , $xxxlistCount\n<\/xmp>\n<br />\n<br />\n%SQLPAR0% et %SQLPAR1% sont les deux critères de recherche possibles des tâches, \n<br />\n%SQLPAR2% limite la recherche à un utilisateur donné. \n<br />\n<br />\nMyPitSelf contient un utilitaire permettant de générer les requêtes sur la base de donnée. \n<br />\n<br />\nNous allons l\'utiliser pour créer une requête de type <span class=ECHO>SELECT LIST<\/span>. <br />\n\nCe type de requêtes a été défini car il permet de générer des instructions propres à l\'affichage d\'une liste. \n<br />\n<br />\nPour l\'utiliser, exécutez les actions que vous voyez en cliquant ici <a href="javascript:popup(\'Creerlapremiererequete\')"><img src="img/sc.gif" /><\/a>. \n<br />\n<br />\nLe résultat de cette action, visible en cliquant sur le menu <a class="ACTION">Requête<\/a> est une requête SQL ayant un Code 1201 dans notre cas. \n<br />\n<br />\nNous avons coché le champ Hidden et Constant car lors de l\'affichage de la liste des tâches, il ne faut pas afficher l\'ID utilisateur ( c\'est l\'utilisateur en cours ) et le critère d\'affichage des tâches est pour l\'utilisateur en cours donc constant. \n<br />\n');
t.xxtree269.add(264,17,'Créer un menu','Maintenant, il faut créer un menu permettant d\'afficher la liste des tâches. \n<br />\nCeci passe tout d\'abord par la création d\'une fonction écrite en langage MyPitSelf. \n<br />\nCette fonction sera ensuite attachée à un menu. \n<br />\nPour ce faire, exécutez les actions que vous voyez en cliquant ici <a href="javascript:popup(\'Creerlepremiermenu\')"><img src="img/sc.gif" /><\/a>.\n<br />\nUtilisez un copier/coller pour éviter de réécrire la fonction. \n<br />\nUn petit mot ici sur le langage MyPitSelf puisque cette fonction a été écrite dans ce langage: <br />\nCette fonction permettant d\'afficher la liste des tâches de l\'utilisateur \n<xmp>\nTac(\n Cst(999999999),    // paramètre priorité de la tâche\n Cst(),             // paramètre Nom de la tâche ( chaine vide )\n VarG(xxUserCode), // Code de l\'utilisateur ( variable globale )\n Cst(3),            // 3 paramètres\n a0_list(           // afficher la liste basée sur ...\n  Sql(1201)         // ... la requête 1201\n )\n)\n<\/xmp>\nveut dire: \n<br />\nTac ==> Take and Call: c\'est l\'INSTRUCTION principale de ce langage: Elle permet \n<ul>\n<li>\nsoit d\'ajouter des valeurs dans la pile d\'appel <\/li>\n<li>soit d\'appeler des fonctions <\/li>\n<\/ul>\nIci, on met des constantes dans la pile d\'appel ( 999999999, chaine vide et la valeur 3) \n<br />\nOn met aussi une variable globale initialisée par le système. Elle représente l\'unique ID de l\'utilisateur. \n<br />\nLa fonction appelée est a0_list avec un paramètre qui est le numéro de la requête à appeler. \n<br />\n<br />\nL\'instruction Tac sait reconnaître les fonctions permettant de mettre des variables dans la pile et celles exécutant des actions. \n<br />\nCe langage est basé sur des fonctions qui peuvent être imbriquées les unes dans les autres ou appelées séquentiellement. \n<br />\ncette fonction peut aussi s\'écrire de la façon suivante: \n<br />\n<xmp>\nTac( Cst(999999999), Cst(), VarG(xxUserCode), Cst(3), a0_list(  Sql(1201) ) )\n<\/xmp>\nLa fonction a0_list par définition prend 1 ou plusieurs paramètres dans la pile de variables, le premier paramètre ( 3 dans notre cas ) indiquant le nombre de paramètres à prendre dans la pile ( 99999, chaine vide, code utilisateur. \n<br />\n<br />\nVous avez compris que // indique un commentaire. \n<br />\n');
t.xxtree269.add(265,17,'Créer les fonctions','Maintenant, il faut créer une fonction permettant d\'ajouter une tâche. \n<br />\n<br />\nNous allons utiliser l\'outil pour créer une requête de type <span class=ECHO>SELECT VALUE<\/span>. \n<br />\nCe type de requêtes a été défini car il permet de générer des instructions propres à l\'affichage d\'une entrée dans la base. Pour ce faire, exécutez les actions que vous voyez en cliquant ici <a href="javascript:popup(\'selectvaluesurtache\')"><img src="img/sc.gif" /><\/a>. \n<br />\n<br />\nEnfin, nous pouvons créer la fonction de type <span class=ECHO>LISTTOP<\/span> rattachée à la liste affichant la requête <span class=ECHO>1201<\/span> \n<br />\nPour ce faire, exécutez les actions que vous voyez en cliquant ici <a href="javascript:popup(\'fonctionnouvelletache\')"><img src="img/sc.gif" /><\/a>. <br />\n<br />\nEnfin la dernière étape sera de regénérer toutes les requêtes, de compiler toutes las fonctions, d\'établir la langue par défaut du programme et de créer les utilisateurs initiaux ( 0 = tous, 1 = super user ) \n<br />\nPour ce faire, exécutez les actions que vous voyez en cliquant ici <a href="javascript:popup(\'postinitialisation\')"><img src="img/sc.gif" /><\/a>. \n<br />\n<br />\nFinalement, on peut commencer à tester l\'application qui contient maintenant quelque chose.');
t.xxtree269.add(18,14,'Tester','');
t.xxtree269.add(266,18,'Ajouter des tâches',' <a class="ACTION" href="javascript:ShowWindowMain();">Cliquez ici<\/a>et choisisez le bouton <a class=ACTION>Test<\/a> pour ouvrir une fenêtre sur votre nouveau programme en vous connectant avec le nom/mot de passe 1/1. \n<br />\n<br />\nMaintenant, vous êtes le super utilisateur du NOUVEAU PROGRAMME, vous pourrez définir les autres utilisateurs et leurs droits tout comme vous avez défini un nouvel utilisateur dans l\'environnement principal. \n<br />\n<br />\nTout d\'abord, il faut savoir que par défaut, le super utilisateur est aussi un utilisateur normal et peut avoir accès à tous les menus.Si lors de la création du menu ( plus haut ) , vous ne cochez pas la case "pas pour super", le menu est disponible pour le super utilisateur. \n<br />\n<br />\nMaintenant, nous allons tester le menu tâches en cliquant ici <a href="javascript:popup(\'testerlestaches\')"><img src="img/sc.gif" /><\/a>. \n<br />\n<br />\n');
t.xxtree269.add(267,18,'Ajouter des utilisateurs','Puis nous allons ajouter deux utilisateurs en les rattachant à des groupes d\'utilisateurs\nmanager et utilisateurs qu\'il faudra ensuite créer dans l\'environnement de développement.\n<br />\nPour créer ces utilisateurs, exécutez les actions que vous voyez en cliquant ici <a href="javascript:popup(\'ajouterutilisateurs\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\n');
t.xxtree269.add(268,18,'Ajouter les groupes','Puis nous allons définir deux groupes d\'utilisateurs ( manager et utilisateurs ) \ndans l\'environnement de développement\n<br />\nLes actions à faire sont celles que vous obtenez en cliquant ici <a href="javascript:popup(\'ajoutergroupes\')"><img src="img/sc.gif" /><\/a>. \n<br />\n<br />\nPour leur assigner des menus, les actions à faire sont celles que vous obtenez en cliquant ici <a href="javascript:popup(\'assignerlesmenus\')"><img src="img/sc.gif" /><\/a>. \n');
t.xxtree269.add(20,14,'Ajouter des fonctions','Revenez dans l\'environnement de développement de MyPitSelf en <a class="ACTION" href="javascript:ShowWindowItself();">cliquant ici<\/a> et connectez vous en tant que <span class=ECHO>m/1<\/span>. \n<br />\n<br />\nNous allons ajouter des fonctions qui permettent de voir, de modifier, de dupliquer ou de supprimer une tâche. \n<br />\n<br />\nPour la supression, il faudra tout d\'abord créer une requête de type <span class=ECHO>DELETE VALUE<\/span>. \nRetenez le numéro de requête créé, nous nous en serviront dans les fonctions. \n<br />\nPour ce faire, exécutez les actions que vous voyez en cliquant ici <a href="javascript:popup(\'Ajouterrequetesupp\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\nPuis nous crérons les fonctions de type <span class=ECHO>LISTFUNCT<\/span>. \n<br />\nPour ce faire, exécutez les actions que vous voyez en cliquant ici <a href="javascript:popup(\'AjouterFonctauxTaches\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\n<br />\nMaintenant, nous allont tester les nouvelles fonctions; allez dans l\'environnement test et\nconnectez vous en tant que <span class=ECHO>m/1<\/span>\n<br />\npuis testez en exécutant les actions que vous voyez en cliquant ici <a href="javascript:popup(\'testerfonctionstaches\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\nVoilà, la première partie de l\'aspect organisationnel est fini. Nous allons maintenant créer la fonction permettant au manager de voir les tâches de tout le monde. \n<br />');
t.xxtree269.add(23,14,'Une nouvelle requête.','Maintenant, nous pouvons faire un menu permettant de voir les tâches de tout le monde. Ce menu sera pour les managers. \n<br />\nPour celà, il faudra créer une requête pour lister les tâches et le nom de la personne ayant créée la tâche doit apparaître. \n<br />\nCette requête aura deux tables: la table des utilisateurs et la table des tâches. \n<br />\nExécutez les actions que vous obtenez en cliquant ici <a href="javascript:popup(\'requetetoutestaches\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\nPuis il faudra créer un nouveau menu. \n<br />\nExécutez les actions que vous obtenez en cliquant ici <a href="javascript:popup(\'fonctionstoutestaches\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\n<br />\nPuis reconnectez vous en tant qu\'utilisateur <font color="#ff0000">m/1<\/font>, ce menu est apparu et vous pouvez le tester en exécutant les actions que vous obtenez en cliquant ici <a href="javascript:popup(\'testermenutoutestaches\')"><img src="img/sc.gif" /><\/a>. ');
t.xxtree269.add(25,14,'Tables liées','Le client veut ajouter des fonctionnalités: \n<br />\nA partir de la liste des toutes les tâches, le manager doit pouvoir: \n<br />\nCréer une tache pour un autre utilisateur que lui même. \n<br />\nModifier une tâche d\'un utilisateur et en particulier, la réaffecter à un autre utilisateur. \n<br />\n<br />\nComment mettre celà en place ? \n<br />\n<br />\nJe pense que vous avez compris que MyPitSelf utilise des tables liées. \n<br />\nPar exemple, pendant le développement, vous avez remarqué qu\'on rattachait un menu à une fonction, une table à une base, un champ à une table, un menu à un groupe d\'utilisateur, etc .... \n<br />\nNous allons créer un lien. \n<br /><br />\nLe lien qui nous concerne ici est qu\'une tâche est rattachée à un utilisateur particulier. <br />\nLorsqu\'un manager doit affecter la tache d\'un utilisateur "A" à un autre utilisateur "B", il doit pouvoir choisir l\'utilisateur dans la liste des utilisateurs existants, c\'est à dire dans la table des utilisateurs. \n<br />\n<br />\nCe lien existe déjà partiellement car lors de la création de la table des taches, nous avons spécifié que le champ xRefUser pointait sur le champ code de la table des utilisateurs.\n<br />\nEn revanche, la fonction associée était bidon ( dummy ). Maintenant, nous allons créer une vrai fonction.\n<br />\nCeci passe par la création \n\n<ul>\n<li>\nd\'une liste d\'utilisateurs ( Select du type <span class=LISTTITLE>SELECT LIST<\/span> ),\n<\/li>\n<li>\nD\'une fonction de type <span class=LISTTITLE>XREF<\/span> faisant référence à cette liste.\n<\/li>\n<li>\nd\'un lien entre la table des tâches ( champ utilisateur ) et la table des utilisateurs ( champ ID ) en utilisant cette fonction ( Une tâche est rattachée à un utilisateur mais un utilisateur n\'a pas obligatoirement des taches )\n<\/li>\n<\/ul>\n<br />\n<br />\nConnectez vous à MyPitSelf en tant que m/1 et exécutez les actions que vous verrez en cliquant ici <a href="javascript:popup(\'CreerlienTacheutilisateur\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\nPuis il faut créer les fonctions pour le manager.\n<ul>\n<li>\nd\'une requête de type <span class=LISTTITLE>SELECT VALUE<\/span> permettant au manager de modifier une tâche.\n<\/li>\n<li>\nd\'une fonction en face de chaque tâche avec le type <span class=LISTTITLE>LISTTOP<\/span> permettant de la modifier. \n<\/li>\n<li>\nUne fonction avec le type <span class=LISTTITLE>LISTTOP<\/span> pour créer une nouvelle tâche.\n<\/li>\n<\/ul>\n<br />\nConnectez vous à MyPitSelf en tant que m/1 et exécutez les actions que vous verrez en cliquant ici <a href="javascript:popup(\'CreerfonctionTacheutilisateur\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\nCeci fait, Connectez vous à au programme test en tant que m/1 et exécutez les actions que vous verrez en cliquant ici <a href="javascript:popup(\'testertacheutilisateur\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\nPuis nous allons ajouter la fonction ( type <span class=LISTTITLE>LISTTOP<\/span> ) permettant de créer une nouvelle tâche, connectez vous à MyPitSelf en tant que m/1 et exécutez les actions que vous verrez en cliquant ici <a href="javascript:popup(\'creernouvelletacheutilisateur\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\nCeci fait, connectez vous à votre application en tant que m/1 et exécutez les actions que vous verrez en cliquant ici <a href="javascript:popup(\'testernouvelletacheutilisateur\')"><img src="img/sc.gif" /><\/a>.\n<br />\n<br />\nMaintenant, connectez vous à votre application en tant que <span class=LISTTITLE>u/1<\/span> et\nvous pourrez constater qu\'il existe une tâche affectée.\n<br />\n');
t.xxtree269.add(27,14,'Conclusion','Tout cet exemple vous a montré comment on développe avec MyPitSelf ainsi qu\'une partie des fonctionnalités. \n<br />\n<br />\nIci, l\'approche a été très détaillée et en pratique, il existe des raccourcis pour créer les éléments ( requêtes, fonctions, menus ... ) automatiquement.\n<br />\nEn fait le développement de cette application ne devrait pas prendre plus de 15 minutes.\n<br />\n<br />\nLe livrable se situera finalement dans le répertoire "prod" après avoir utilisé la fonction d\'extraction ( voir menu outil / Créer les programmes dans l\'environnement externe )\n<br />\n<br />\nUn des intérêts d\'avoir un environnement de production séparé de l\'environnement de développement est que ce dernier peut contenir des fonctionnalités du type mise à jour de libellés en ligne.\n<br />\nC\'est pour cela que dans le menu profil, il existe le bouton permettant de basculer le mode de déboggage. Quand ce dernier est actif, on peur suivre à la trace tous les appels de fonctions.\n<br />\n<br />\nComme MyPitSelf est fait en majorité avec lui même, le meilleur exemple de développement que vous pourrez trouver s\'obtient en vous connectant en tant qu\'utilisateur 1/1 à l\'environnement de développement. \n<br />\nPuis cliquez sur le menu "Outil", puis cliquez sur le bouton "Basculer le mode de développement de MyPitSelf". \n<br />\nTous les menus apparaissent alors et vous pourrez voir pas mal de choses. \n<br />\nVous pouvez aussi utiliser le bouton "Cacher ou voir les appels de fonctions" dans le menu profil qui permet de voir quelles fonctions/requêtes sont utilisées. \n<br />\n<br />\nUn trait essentiel de MyPitSelf est que les fonctions écrites dans son langage sont décomposées en unités syntaxiques qui sont visualisable en utilisant le bouton imprimer en face des sources des fonctions dans la liste des fonctions. \n<br />\nLe résultat de cette décomposition est une grille qui peut être mise dans une table de base de donnée. \n<br />\nLes tuples de cette table peuvent être analysés et modifiés par des fonctions de bases de données. <br />\nOn peut exécuter des fonction de reverse engineering sur cette forme tabulaire puis regénérer le code source à partir de cette forme tabulaire . \n<br />\n<br />\n<br />\nVoyez aussi les chapitres suivants pour en apprendre un peu plus sur MyPitSelf \n<br />\n<br />\nJe n\'ai pas encore parlé de beaucoup de choses, il faut que j\'enrichisse encore la documentation, mais je pense que vous les avez plus ou moins présenties. \n<br />\nMyPitSelf va encore évoluer car il y a des trous fonctionnel, mais étant donné que presque tout est en base de donnée, y compris les programmes, que les programmes sont liés aux données et que les programmes sont en fait que des données à traiter, tout ce qu\'il y a à faire est d\'ajouter les données pour combler ces trous. \n<br />\n<br />\nQuand on doit gérer des modèles de données un peu complexes (voir par exemple au hasard, celui de MyPitSelf présent sur la page d\'accueil), c\'est bien d\'avoir un outil que facilide la tâche.\n<br />\n<br />\nJe trouve que MyPitSelf, c\'est pas mal pour gérer des modèles avec beaucoup de liens . \n');
t.xxtree269.SetLoaded();
