14
phpsolmag.org/fr 1 PROJETS HORS SÉRIE Le Plan d’action : Nous allons tout d’abord télécharger le logiciel PHPMaker, puis un fichier démo. Ceci nous permettra d’appréhender toutes les pos- sibilités de l’outil. Ensuite, nous ferons un mini-cahier des charges pour l’application CRM, en spécifiant le MVC (Mo- del-Vue-Controleur) : Model : la structure de BD du CRM (tables, champs) Vue : les écrans que nous souhaitons générer Controleur : PHPMaker génère le code ! Rien à spécifier, hormis du code personnalisé à injec- ter dans l’outil, ou des modifications du code généré. Qu’est-ce qu’un générateur de code ? Les générateurs de code permettent, à partir d’une structure de base de données, de créer les écrans clas- siques de manipulation de données : listing (d’objets en base de données), moteur de re- cherche, page de détail, formulaires d’ajout/modification et page de sup- pression. Ce sont des actions classiques de type “CRUD” (Create- Read-Update-Delete). Quand les utiliser ? Les générateurs sont particulièrement utiles : Créer un CRM avec un générateur de code Dans cet article, nous allons montrer qu’il est possible de créer un CRM complet avec un générateur de code. Nous utiliserons ici „PHPMaker”, l’un des plus simples et efficaces du marché. Il vous permettra de générer des écrans CRUD (listings/moteurs de recherches, formulaires ajout/modification/suppression) sans taper une ligne de code. De plus les écrans générés sont designables, multilingues, et sécurisés. Cet article explique : Comment créer un CRM (logiciel de gestion de la relation client, ou gestion commerciale) avec un générateur de code PHP. Comment utiliser au mieux le générateur de code PHPMaker. La gestion de projet spécifique à ce genre d’outils. Ce qu’il faut savoir : Aucune connaissance PHP, d’hébergement et administration de serveurs n’est nécessaire. Figure 1. Présentation de l’interface

PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

  • Upload
    others

  • View
    4

  • Download
    1

Embed Size (px)

Citation preview

Page 1: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

phpsolmag.org/fr1

Projets

HORS SÉRIE

Le Plan d’action :• Nous allons tout d’abord télécharger le logiciel

PHPMaker,puisunfichierdémo.• Cecinouspermettrad’appréhendertouteslespos-

sibilitésdel’outil.• Ensuite, nous ferons un mini-cahier des charges

pour l’applicationCRM,enspécifiant leMVC(Mo-del-Vue-Controleur):

– Model : la structure de BD du CRM (tables,champs)

– Vue:lesécransquenoussouhaitonsgénérer– Controleur : PHPMaker génère le code ! Rien

àspécifier,hormisducodepersonnaliséàinjec-terdansl’outil,oudesmodificationsducodegénéré.

Qu’est-ce qu’un générateur de code ?Les générateurs de code permettent, à partir d’unestructuredebasededonnées,decréerlesécransclas-siquesdemanipulationdedonnées:

• listing(d’objetsenbasededonnées),moteurdere-cherche,

• pagededétail,• formulaires d’ajout/modification et page de sup-

pression.

Cesontdesactionsclassiquesdetype“CRUD”(Create-Read-Update-Delete).

Quand les utiliser ?Lesgénérateurssontparticulièrementutiles:

Créer un CRM avec un générateur de codeDans cet article, nous allons montrer qu’il est possible de créer un CRM complet avec un générateur de code.Nous utiliserons ici „PHPMaker”, l’un des plus simples et efficaces du marché. Il vous permettra de générer des écrans CRUD (listings/moteurs de recherches, formulaires ajout/modification/suppression) sans taper une ligne de code. De plus les écrans générés sont designables, multilingues, et sécurisés.

Cet article explique :• CommentcréerunCRM(logicieldegestiondelarelationclient,

ou gestion commerciale) avec un générateur de code PHP.• CommentutiliseraumieuxlegénérateurdecodePHPMaker.• Lagestiondeprojetspécifiqueàcegenred’outils.

Ce qu’il faut savoir :• Aucune connaissance PHP, d’hébergement et administration

de serveurs n’est nécessaire.

Figure 1. Présentation de l’interface

Page 2: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

CRM

phpsolmag.org/fr 2HORS SÉRIE

Voicil’écranprincipaldePHPMaker(voirFigure2).L’outilayantpourbutdegénérerdeslistingsetformu-

lairesd’ajout/modification/suppressionàpartirdetablesetchamps,l’interfacepermetdespécifierpourchaquetable/champlesparamètresd’affichageetlelienentrelechampaffichéenHTMLetlechampenbasededon-nées.IlgénèredonclespagesCRUD:listings/recherche,

formulairesd’ajout/modification/suppression.Ilpermetégalementde:

• générerdestableauxavecpagination,avecexportExcel/CSV/PDF/XML...

• créerdes“vues”(commedesvuesSQL,avecjoin-tures).

• créerdesécrans“Master/Detail”:parexemple,af-fichagede lafichedétailléed’unclient,etendes-sous, affichage du listing des contacts chez ceclient.

Enfin,ilgèreletriosécurité/multilinguisme/design!

• sécurité : gestion des utilisateurs, groupes utilisa-teurs,permissionsouACL(AccessControlList).

• multilinguisme : traduction des listings et formu-laires,messagesJavascriptdevalidationdeformu-laire,desélémentsdenavigation,etc.

• design : gestion de thèmes graphiques (“tem-plates”),gestiondemenudenavigation,gestiondeCSS.

Cecivouspermetdecréeruneapplicationprofession-nelle,etfournircetriosécurité/multilinguisme/designenstandard,sanstaperunelignedecode!

PHPMaker génère des pages HTML/PHP, sur desbasesdedonnéesMySQL,PostgreSQL,Access,SQLServeur,Oracle.Lecodegénérén’étantpascrypté,onpeutlemodifier

après génération et y apporter tous les améliorationssouhaitées:élémentsdedesign, insertiond’élémentsAjaxJQuery,de“widgets”avecdel’informationvenantde services SaaS (Google/Zoho, autre...). Les pagesgénérées sont en PHP (d’où le nom “Phpmaker”), ilsuffit ensuite de les copier dans le répertoire ouFTPdel’applicationweb(aprèsavoiréventuellementmodi-fiélefichierdeconfigurationcontenantlescodeslogin/passwordd’accèsàlabasededonnées).

Web:http://www.hkvstore.com/phpmaker/.Démo:http://download.hkvstore.com/phpdemo9/carslist.php (login/passwordadmin/master).

• pour générer des interfaces d’administration avecleslistingsetformulairesclassiquesd’ajout/modifi-cation/suppression(gestiondeparamètres,gestiond’utilisateurs,backofficedegestiondestock–pro-duits/catégories/fournisseurs...)

• pour créer des applications avec principalementdeslistingsetdesformulaires(telunCRM,unlogi-cielcomptable,unegestiond’association...).

Ilsnesontpasadaptésàlacréationdelogicielsnéces-sitantducodeetunaffichageparticuliers(webmail,ca-lendrier, explorateur de fichiers, cartographieGoogle,portaildewidgetdebusinessintelligence...).

Quelquesexemplesdelogiciels:

• PHPMaker (200$), PHPRunner (400$), AppGini(60$),PHPGenerator forMySQL(gratuit,de l’édi-teurSQL“SQLMaestro”).

Autreslogiciels(pluspuissants,maispluscomplexes),donnantdespossibilitéspluspousséesen termesdeconnectivitéauxBD,delanguagedecodegénéré(ASP,JSP...)etdepersonnalisationdesécransgénérés:

• CodeCharge (200 à 500$, application windows,génère du code ASP/PHP/JSP, sur de multiplesbases de données, et intègre un designer visuelpourchaqueécran,cequenefaitpasPHPMaker–personnalisationuniquementparscriptingPHP/JS).

• ScriptCase (325$, application WEB, fonctionnantdans le navigateur, multi-utilisateur. Génère ducode PHP, pour des bases MySQL/PostgreSQL/SQLite/SQLServeur/Oracle).

Présentation rapide de PHMaker

Figure 2. Ecran principal

Page 3: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

phpsolmag.org/fr3

Projets

HORS SÉRIE

Jevousconseilledejeteruncoupd’œilauxdifférentesversionsdulogiciel(etauxpages“Nouveautés”,“Chan-geLog”),quivouspermettrontd’appréhenderplusfaci-lementtoutessesfonctionnalités.

QUICK START. Projet DémoAvantdecréernotrepropreapplicationCRM,nousal-lonstéléchargerunfichierexempleetgénérerlecodecorrespondant.Toutd’abord,téléchargeonsPHPMakerà cette adresse : http://www.hkvstore.com/phpmaker/download.asp.Unefoisinstallé,vouspouveztélécharg-er un fichier exemple déjà configuré, téléchargeablegratuitementsur lesitede l’éditeur.URL :http://www.hkvstore.com/phpmaker/demo.asp,lien“DownloadtheDemo Project” ou directement : http://www.hkvstore.com/phpmaker/php9demo.zip.Ceprojetexempleestunegestiondebasededon-

nées de voitures, avec gestion desmodèles, fournis-seurs...L’utilisateurnonconnectépeut consulter les listings

devoitures.L’utilisateurconnecté(login/password:ad-min/master, lien “login”) accède à une interface d’ad-ministration permettant toutes les opérations CRUD(créer/modifier/supprimer)surlesvoitures,maiségale-mentdegérerlescomptesutilisateuretlesdroitsd’ac-cès(permissions/”ACL”AccessControlList).

• Lefichiercontient:lefichierprojet“PHPMaker”,etle.SQLpermettantdecréerlabasededonnées.

• CréerunebasededonnéeslocaleMySQL“demo”et importez-y le fichier .sql avec PHPMyadmin outoutautreéditeur.

• Ouvrirlefichierdemo9.pmpavecPHPMaker(menu“Project”>“Open”).

Si vous avez importé le fichier .SQL dans uneautre base que “demo” avec le login/passwordroot/<vide>,faites“Tools>Synchronize”.

• Puis allez directement dans l’onglet “Generate”, etsaisissez dans “Application root folder” le réper-toiredegénérationducodePHP,quidoitêtredansvotreserveurweblocal:

C:\xampp\htdocs\phpmaker_demo”parexemple(sivousutilisezXampp).

• Si vous avez déjà un serveur web installé, telApache,cochez“Testingwebserver:Other”.

• Unefenêtreapparaît,cochez“SelectAll”enhautàgauche pour générer tous les fichiers (nécessairelapremièrefois).

Lagénérationdevosfichiersselance.

Votre application devrait désormais être accessible àcetteurl:http://localhost/phpmaker_demo/carslist.php.

JevousconseilledecliquerunpeupartoutdansPHP-Maker,afindevisualisertouslesparamétrages,etcom-parer avec lespagesgénérées : ceci vouspermettradecomprendre l’impactdechaqueparamétragedansPHPMaker.

Projet CRMNous allons désormais nous attaquer à notre projetCRM.Lechallenge:créerunCRMsanstaperunelignedecode,en1heuremaximum.UnCRMconsistantglobalementendeslistings:

• declients/contacts,• propositionscommerciales/bonsdecommande,• emails/appels téléphoniques/rendez-vous client ef-

fectués,aveclesformulairesCRUD(Create-Read-Update-Delete)d’ajout/modification/suppressiondedonnées(clients/contacts,...emails/appelstel/rdv),ungénérateurdecodeestparticulièrementadaptéàcegenredeprojet.

Gestion de ProjetBonnespratiques:

Uneapplication réaliséeavecungénérateur de codenécessitelamêmegestiondeprojetquetoutdévelop-pementspécifique:

• expression du besoin : interviews utilisateurs fi-naux, et leurs managers – ayant souvent besoind’outilsdesupervisionetdetableauxdebordspé-cifiques,

• benchmarkfonctionnel/techniquedesolutionsdéjàexistantessurlemarché:achetons-nousunesolu-tion,ouladéveloppons-nouseninterne?

• reformulation du besoin, et comparaison vis-à-visdesoutilsexistants vousdevezvraimentvousmettre en tête que votreCRM interne est destiné àêtrelancésurlemarché.

Vousdevezlecréercommes’ils’agissaitd’unnou-veauproduitquevousvendriez.

• détermination des 80% de besoins génériques,et des 20% spécifiques (pour lesquels du codagespécifiquepeutêtrenécessaire).

Chaquesociétéadesbesoinsspécifiques,maisquandon“gratte”,onserendcompteque laplupartdesbe-soins sont récurrents, et communsàénormément degens.PensezàlaloidePareto,larègledes80/20:les80%

debesoinsgénériquesserontrapidesàdévelopper,etles20%spécifiquestrèsdifficiles.

Etenfin,:• sécurisé, multilingue (d’abord anglais - même s’il

estdestinéuniquementàdes français -puis fran-

Page 4: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

CRM

phpsolmag.org/fr 4HORS SÉRIE

çais:français=langueétrangère/secondaire).• documentation complète utilisateur/administrateur/

développeur.• installeur/désinstalleur (création build .exe/.rpm/.

deb).

planificationduprojet,etdécoupageenv0,v1,v2,v3:• v0 : prototype réalisé leplus rapidementpossible.

Faire des “sprint”, à la scrum : livrer très rapide-ment une nouvelle version testable par les futursutilisateurs (avec un générateur, tous les jours aumaximum!).

• v1 : réalisation des 80% de fonctionnalités géné-riques demandées (ou réalisables sans problème,sans montée en compétence nécessaire sur unenouvelletechnologie).

• v2:réalisationdes“trios”:– sécurité/multilinguisme/expérience utilisateur

(design/ergonomie/performances),– versionning/tests/documentation (utilisateur/ad-

ministrateur/développeur).– v3 : réalisation des 20% de code spécifique

(pouvantprendre80%dutemps...).

Qu’est-ce qu’un CRM ?CRM=“CustomerRelationshipManager”.

Gestiondelarelationclient:

• gestion de l’activité commerciale : devis/proposi-tions commerciales, bons de commande (généra-tionde facturesgéréedans l’outildecompatibilité,nerelèveplusducommercial).

• historiquedela“relation”client,partouslescanauxdecommunicationhabituelsemail/tel/rdv.

Emails envoyés/reçus, appels sortants/entrants, ren-dez-vouschezleclientoudansleslocaux.

Lanavigations’effectuegénéralementcommesuit:Listeclients• unclicsurclientaffiche:

– lafichededétailduclient(coordonnées),– les propositions commerciales/bons de com-

mandesémis/renvoyéssignésparleclient,– etlalistedescontactschezceclient.

Enfin, unclic suruncontactaffiche lapagededétaildececontactetlalistedesappels/emails/rendez-vouspourcecontact.

Nous pouvons également souhaiter certains listingsparticuliers:• nouveauxclients,• topclients–entermesdeCA,clientstaggés“VIP”

–...

• lesclientsqu’onm’aaffectés,• maTODOlist:listedesappelsàpasser,desemails

àenvoyer,lesprochainsréunions...

Etenfin,afficherdes tableauxdebord,notamment le“pipe” des ventes, affiché habituellement sous formed’entonnoirinversé:

• PHPMakernepourrapasgénérercegenredegra-phique, mais il propose l’outil PHP Report Maker(http://www.hkvstore.com/phpreportmaker/).

• Et vous pouvez utiliser des bibliothèques de re-portingde typeFusionCharts,quiproposententreautres ce fameux entonnoir des ventes inversé :http://www.fusioncharts.com/.

Base de donnéesVoiciicilastructuredebasededonnées:

• clients: table“customer”:id,name(varchar255),type(int),

address_street/address_postal_code/address_city/address_country(varchar255).

• propositionscommerciales: table “opportunities” : id, id_customer (int), name

(varchar255),amount(float).• contacts: table “contacts” : id, id_customer (int), firstname/

lastname(varchar255),email/phone(varchar255).• rendez-vous: table “meetings” : id, id_contact (int), subject (var-

char 255), date_begin/date_end (datetime), dura-tion(int).

• appels: table “calls” : id, id_contact (int), subject (varchar

255), date_begin/date_end (datetime), duration(int),direction(varchar255).

• emails: table“emails”:id,id_contact(int),subject(varchar

255),date(datetime),email_from/email_to(varchar255),content(text),direction(varchar255).

Ajoutezpourchaquetable,àlafin,les4champsdes-cription/comments (text) et date_creation/date_last_update(datetime).Vous pouvez copier/coller la requête suivante sur

chaquetable,enchangeantuniquement lenomde latable:

ALTER TABLE `calls` ADD

`date_creation` DATETIME NULL ,

ADD `date_last_update` DATETIME NULL ,

ADD `description` INT NULL ,

ADD `comments` TEXT NULL

Page 5: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

phpsolmag.org/fr5

Projets

HORS SÉRIE

Vouspouvezégalementrajouter2champsmetadata_categories/metadata_tags (text) pour catégoriser/tag-gertouslesobjetsstockésdansvotrebasededonnées.Chaque objet nous entourant peut être catégorisé/

taggé:

• typedesociété=SSII,éditeurdelogiciel,entreprisefinale...

• typedecontact=prospect,fournisseur,candidat,...• typederendez-vous=1errdv,qualificationbesoin,...• typed’appelouemail=entrantousortant...• typed’opportunité=pourunclientexistant,unnou-

veauclient.

RÈGLESDEPARAMETRAGEDESCHAMPS/TABLES:TousleschampssontenNULLautorisé,l’idenautoin-crément,lesvarcharentaille255,lesdatesauformatdatetime.Pourunpremier jet/prototype,nousn’effec-tuonsaucuneoptimisation(celapeutsechangeraprèssansproblème),l’objectifestdecréerlabasededon-nées le plus rapidement possible, afin de générer unprototypefonctionnel.Je préfixe les champs de manière à les regrouper

ensemble : address_street/address_postal_code/ad-dress_city/address_countryet jemets leschamps id_xxxautoutdébutdelatable,justeaprèsl’ID:ceciper-metdevoir immédiatement les liaisonsavecd’autresobjets/tables.Quelques bonnes pratiques pour la création de

champs:

• id (et non id_customer, etc...) : toujours id danschaquetable(ouid_NomDeLaTable),ensuitedanslesjointuresSQL.

• name/title (nomduclient, intituléde lapropositioncommerciale,sujetdel’email...).

• description(chaqueobjetquinousentouredanslaviedetouslesjourspossèdeunedescription...).

• comments (toujours donner la possibilité de com-menter n’importe quel objet en base de données.Celapeutégalementêtreutilepoursaisirdesdon-nées pour lesquelles ilmanque un champ de for-mulaire–c’est-à-direqu’ilfautfaireévoluerlabasededonnées,etregénérerleprojetPHPMaker).

• date_creation• date_last_update: il est important de savoir qui a fait quoi, et quand

surladonnée.

Ladonnéenevautriensionnesaitpasd’oùellevient,etcequ’ellevautàuninstantT:latracabilitéesttrèsimportante.Vouspouvezutiliser laméthodeQQOQC-CP:QuiafaitQuoi,Où,Quand,Comment,Combien,Pourquoi?Uneapplicationbienconçuedoitpouvoirré-pondreàcesquestions.

Sivotretablen’apasbesoind’êtreoptimisée,vouspou-vez:

• pourleschampstexte: utiliser varchar(255) – pour les titres/intitulés – et

“text” si vous pensez que votre contenu peut dé-passerles255caractères.

• NULLautorisépourchaquechamp: C’estauniveauapplicatifenPHPetJavascriptque

vousinterdirezdesentréesvides,pasauniveaudelabasededonnées!

PHPMaker gère les champs obligatoires très bien(coche“Validation>Required”etcase“ErrorMessage”pourdéfinirvotremessaged’erreurJavascript,enmul-tilingue!).

• desnomsdechampenanglais: Arrêtezdepenserfranco/français,etcréezd’abord

votreapplicationpourl’international,etensuitepourlaFrance.(Français=languesecondaire!).

Leséditeursdelogicielsfonctionnantbien(typeTa-lend) se lancent d’abord à l’international, puis re-viennent en France, qui est unmarché beaucouppluspetit.

Première génération rapidePourgénéreruneapplication,seuls2écranssontréel-lementnécessaires:• onglet “Database” pour définir les informations de

connection.• onglet“Generate”pourgénérerlesfichiersPHP/Ja-

vascript/autres!

Spécifiez ici les informations de connection dans leschamps Server, UserName, Password, Database : leserveurlocal,lelogin/passworddel’utilisateurdebasededonnées,etenfinlenomdelabasededonnées.Usuellement:localhost,root,“”(motdepassevide),

etbase“crm”danslecadredeceprojet.

Figure 3. Connection à la base de données

Page 6: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

CRM

phpsolmag.org/fr 6HORS SÉRIE

Ilfautavoirpréalablementcréél’utilisateurdeBDetlabasededonnées(dansPHPMyadminparexemple,souvent livré avec les “stacks” “tout-prêts” de typeXamppouWamp).AprèsavoircliquésurConnect,vousvisualisez les tablessur votregauche (voirFigure3).Allezensuitedirectementsurl’ongletGenerate(voirFi-gure4).

Danscetonglet “Generate”,vousgénérez l’applica-tionensaisissantdans“Applicationrootfolder”leréper-toirededestination,oùseragénéré lecodePHP.Cerépertoire doit être dans votre serveurweb local, parexemple:“C:\xampp\htdocs\crm”,sivousavezinstalléXampp(racineduserveurweb:“c:\xamp\htdocs”). Si vous avez déjà un serveur web démarré (ex.

Apache),décochez“IISExpress”.Vouspouvezcocher“BrowseafterGeneration”sivoussouhaitezlancerl’ap-plicationdansvotrenavigateuràchaquenouvellegé-nération/regénération.Ouvouspouvezallermanuellementdansvotrenavi-

gateurettapezl’urlcorrespondante,ici“http://localhost/crm/”.

Génération en cours : fichiers communs/includes/as-sets(js/css/images),puis5fichierspartable:xxx_info.php,xxx_list.php,xxx_add.php,xxx_edit.php,xxx_de-lete.phpoùxxxestlenomdelatable.

Findelagénération(voirFigure9)!

Figure 4. Liste des tables après connection

Figure 5. Onglet Générer

Figure 6. Paramètres de génération

Figure 7. Sélection des pages PHP à générer

Figure 8. Génération en cours

Page 7: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

phpsolmag.org/fr7

Projets

HORS SÉRIE

Vousretrouvezbienici6pages,affichantles6listingsde clients, contacts, proposition commerciale, appelstéléphoniques, emails, et rendez-vous. PHPMaker adoncgénérépourchaque“objet”(client,contact...)nonseulementunlistingpaginé(20lignesparpage),maiségalementunmoteurderecherche,et lesformulairesdecréation/modification/suppression.

Àcestade,nouspouvonsstockernosdonnées,mais:• les donnéesne sont pas reliéesentreelles (com-

mentdirequelescontactsn°3et4sontreliésauclient1?),

• et l’interface ne permet pas de naviguer dans ladonnée : je liste les clients, je cliquesurunclientpourafficherlesdétailsdececlient(coordonnées,chiffred’affairestotal,...)etlalistedespropositionscommercialespourceclient.

Demême,ilfautimplémenterleschémadenavigation“Master-Detail”suivant:

Liste clients => détail client + liste contacts chez ceclient=>détailContact+ listeappels/emails/rdvpourcecontact.

Ensuite,nousallonsaméliorerletrio“sécurité/multilin-guisme/expérience utilisateur (design/ergonomie/per-formances):

• traductiondel’applicationenfrançais.• améliorerl’expérienceutilisateur:“UX”/designet

ergonomie : amélioration kit graphique, menu denavigation,champHTMLpoursaisirdescommen-taires,menus.

• sécurité : gestion utilisateurs, log de tous les ac-cès à l’application, historisation des modificationsdesdonnées(quiamodifiéquoi,quandetpourquoi–idéalement).

Et enfin, faciliter et améliorer la recherche et l’accès àl’information:• miseenplaced’unmoteurderechercheavancé,• exportsexcel/csv,• quelquesvuesdetype“top10clients”,“10derniers

clients”,“répartitionCAparsecteurd’activité”.

Deuxième générationNousallonsdésormaisparamétrerendétailsPHPMa-kerafindefaireunesecondegénérationcorrespondantplusànossouhaits,précédemmentlistés.NousallonsdoncparcourirdemanièreméthodiquetouslesécransdeparamétragePHPMaker,commesuit:

• leplusimportant:paramétragesdestablesetvues(“Custom Views” et “Reports”), puis des champspourchaquetable.

• le “+” (“trio” sécurité/multilinguisme/design), danslesongletsPHP/HTML/Securityetlemenu“Tools”.

Voicilalistedestables(cliquersur«Tables»danslemenugauche,voirFigure12).Nousspécifionsici,pourchaquetable,sinousgéné-

ronsunepagedelisting,unformulaired’ajout/modifica-tion/suppression…

Figure 9. Fin de la génération !

Figure 10. Interface web générée

Figure 11. Ormulaire d’ajout

Figure 12. Paramétrages des tables : liens ajout/modifier/supprimer

Page 8: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

CRM

phpsolmag.org/fr 8HORS SÉRIE

Encliquant sur sur le nomd’une tabledans lemenugauche,nouslistonsleschampsdecettetable,etpou-vonsdonc,champparchamp,définir:

• danslasection«ViewTag»:sonaffichagedansles listings (miseen forme/couleur/police, lienhrefsurlechamp…).

• dans la section«Edit Tag» : sonaffichagedansles formulaires d’ajout/modification (input/selectmenu/radiobouton…).

Ilestconseillédeparamétrerdansl’ordre:

• lestables,puisleschamps,• letriomultilinguisme/design/sécurité.

Revenonsdoncauparamétragedeslistings.Vouspou-vezdéfiniricilesoptionsdelisting:• lapagination (nombred’enregistrementsàafficher

parpage),affichagedelapaginationenhautouenbas(oules2)

• l’affichage ou non, ou à gauche/droite, des liens“détail/copier/modifier/supprimer” pour chaque en-registrement.

• la fonctionnalité d’export, et les formats d’exportproposés(CSV,Excel,PDF,XML...).

Ensuite,pourchaquetable,vouspouvezdéfinirsivoussouhaitezgénérerunlisting,unformulaired’ajout/modi-fication,unmode«grille»(éditionàlaExcel)…

Pourchaquetable,vousindiquezicilesfonctionnalitésproposéesauxutilisateurs:

• “inline add/edit”, “grid add/edit” : possibilité d’ajou-ter/éditerenmodeligne(commedansExcel)dansleslistings,aulieud’êtreredirigéversunformulaire(vertical)d’ajout/modificationdedonnées,

• “view”:générationpagededétail.

S’ilyaunepageaumoinsàgénérer,c’estcelle-ci!,pourlemode “lecture seule” aux personnes non-autoriséesàmodifierlesdonnées.Eneffet,leslistingsnepeuventpas toutafficher,entreautres leschamps “text”conte-nantpotentiellementénormémentdedonnées, lapagededétailvientdoncencomplémentdulistingpouraffi-cherlesdonnéesnonaffichéesdansleslistings.Onsim-plifieradoncleslistings–pasdescrollinghorizontal–enn’affichant que le strict nécessaire – c’est-à-dire qu’onmasqueraparexempledans les listings l’userIDayantcréél’enregistrement,ladatedecréationmaisonafficheladatedemodification,lechamp“commentaire”etc.).

• “add/copy”:affichagedesliens“ajouter/copier”dansleslistings(etgénérationdespagesadéquates),

• delete/edit : génération des pages supprimer/édi-ter,etaffichagedesliensadéquatsdansleslistings (à droite ou à gauche, selon ce que vous avezconfiguré dans PHPMaker - onglet “PHP > List/ViewPageOptions”),

• captcha:affichaged’un“captcha”,• quick/advanced/highlight : recherche rapide (sur

tousleschamps,àlaGoogle),avancée(recherche

Figure 13. Paramétrages des champs : type de champ de formulaire d’ajout/modifications, affichage dans listing

Figure 14. Options de listing (pagination, liens d’actions, exports CSV...)

Figure 15. Paramétrage des tables (inline edit/add...)

Figure 16. Paramétrage des tables (view, add, delete, update)

Figure 17. Paramétrage des tables (multi-update, search, audit trail)

Page 9: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

phpsolmag.org/fr9

Projets

HORS SÉRIE

multicritères), surlignage des résultats de la re-cherche,

• audittrail:historisationdetouteslesmodificationseffectuées sur cette table (ajout/modification/sup-pressionpartielleoucomplèted’enregistrements).

• Email notificationonAdd/Edit/Delete : à cocher sivoussouhaitezêtreavertiparmailàchaquecréa-tion/modification/suppressionsurcertainestables.

Astuce:vouspouvezégalementcréerunfluxRSSsurlatable“AuditTrail”vialelogicielXMLMakerdumêmeéditeur,etenregistrercefluxRSSdansOutlook/Thun-derBirdoutoutautrelecteuremail.Àutiliseravecpar-cimonie.

Pourchaquechampaffichésur lespagesde listings,pagesdedétailetformulairesd’ajout/modification,vousdevrezindiquer:

• son lienavec labasededonnées(quelchampdeBDafficheroumettreàjour),

• samiseenforme.

Lamiseenformevouspermetdemodifier:gras/italique,fontes,couleurs,liensbrefsurcelien...Parexemple,PHP-Makeraffichesurleslistingsunliendétail.php?id=[id]surlesIDredirigeantsurlapagededétail.Vouspouvezdéci-derderajoutercemêmeliendedétailsurletitre:sélec-tionnezalors“id”danslechamp“Hreffield”etajoutezlepréfixe“détail.php?id=”danslechamp“Hyperlink>prefix”.

Lienaveclabasededonnées:PHPMakergère tous les typesdechampdebasededonnées,ettouslestypesd’affichage:

• varchar:affichaged’unchamptexte(input)oumotdepasse.

• text:affichaged’untextarea,oud’unéditeurHTMLenrichi(extensionCKEditor).

• date:affichagechamptexte+popupdesélectiondedate(extensionJSCalendar).

Vous pouvez également afficher des cases à cocher(checkbox),boutonsradiooumenusdéroulants (pou-

vantêtre“cascadés”:lasélectiond’unmenurafraîchitlemenuen dessous, utile par exemple pour saisir lacatégorie/sous-catégoried’unproduitparexemple).Et enfin, les champs “hidden” (variable cachée) et

“fichier”(pouruploaderdesfichiers).Vousdevezavoirprécédemmentparamétrélerépertoireoùserontstoc-késvosfichiersuploadés:onglet“PHP>GeneralOp-tions>FileUpload”2012-07-19_185619-ongletPHP-GeneralOptions-FileUpload.png.Pourchaquechampoupresque,vouspouvezdéfinir:

• latailleduchamp(texte),hauteur/largeur(textarea),lenombremaximaldecaractèrestapés.

• lecaractèreobligatoireduchamp(nedoitpasêtrevide,affichagealorsd’unmessaged’erreurJavas-cript:paramétrable,etenmultilingue!).

• “useLookuptable”...

Enfin,vouspouvezrelierceschampsàdestables,parexemple, afficher le nom d’un client lors de la saisied’unnouveaucontact.Ceci est indispensable pour relier un contact à un

client (c’est-à-dire stocker l’ID du client dans la tabledescontacts),etégalementpourafficherdansles lis-tingsdescontacts lenomduclient (PHPMakern’affi-cheradoncpas l’IDduclientpour lecontact,mais lenom).Ceci est également utile pour afficher une liste de

checkbox/radioboutonsouunmenudéroulant dont lalistedesentréesestdéfiniedansunetabledeparamé-trage.Ainsi,vouspouvezmodifierentempsréellecontenu

desmenusdéroulants/checkbox/radioboutons,etd’au-tantplusfacilementquevousaurezprissoindegénérerunlistingphpmakerpourcettetabledeparamétrage.Pour effectuer ceci, cochez “use Lookup table”, et

indiquez ensuite dans “table name”, “link field”, “dis-playfield”lenomdelatable/lenommysqlduchamp.Parexemple,pourafficherlalistedesclientsdansunmenu déroulant, on sélectionnera la table “account”,linkfield=”id”,displayfield=”name”.Etontrieencrois-santsur lenomduclientavecorderby=”name”,Asc/Desc=”Asc”.Personnellement,jestockelescontenusdetousles

champs (menus déroulants/checkbox/radioboutons),pour toutes les tables,dansuneunique table “setup_fields” (id, table_name, field_name, field_value, field_label),etensuitedansle“Uselookuptable”,jefiltresurlenomdelatable,pourn’afficherquelesoptionsdecemenudéroulant:

“`table_name`”=’nom_de_ma_table’ AND `field_name`”=

’nom_de_mon_champ’”.

Figure 18. Options de paramétrage d’un champ

Page 10: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

CRM

phpsolmag.org/fr 10HORS SÉRIE

LeMasterDetailpermetdecréerunlienentre2objetsdebasesdedonnées.Danslecasd’unCRM:

• pourunclientdonné,nousavonsenvoyéplusieurspropositionscommerciales.

• pour un client donné, nous avons plusieurscontactschezlui.

• pouruncontactdonné,nousstockons la listedesemailsenvoyésetreçus,lesappelsentrantsetsor-tants, les rendez-vouschezceclientoudansnoslocaux.

Nousavonsdoncune liaisonde type1-nentreclientet proposition commerciale, entre client et contact, etentrecontactetemails/appels/rendez-vous.PHPMaker par défaut nous affichera 6 listings : la

listedesclients,lalistedespropositionscommercialespourtouslesclients,lalistedescontactspourtouslesclients, la liste des emails/appels/rendez-vous pourtouslescontactsEtnoussouhaitonsnaviguerdelasorte:listeclients>

jecliquesurunclient,cequiafficheledétailduclientetlalistedespropositionscommercialesetcontactspourceclient.Jecliquesuruncontact,etcelaaffiche ledétaildu

contact et la liste des emails/appels tel/rendez-vouspourcecontact.Onappellececile“Master-Detail”:Master=détailde

laficheclient,Detail=listedescontactspourceclient.Pour activer cette navigation, cliquez sur “Tables”

danslemenugauche(necliquezpassurlenomd’unetable),etcliquezensuitesurlebouton“Modify”enbasàdroite,danslasection“Master/Detail”.

Lescustomscriptsserventàpersonnaliserlesactionsgéréesparlecodegénéré:

• actionsCRUD(Create-Read-Uodate-Delete),c’est-à-dire créer/modifier/supprimer + les listings etpagesdedétail.

Lecodequevoussaisisseziciserainclusdanslecodegénéré.Cesystèmevousévitedoncdedevoirmodi-fierlecodeunefoisgénéré.Eneffet,sivousfaitesunemodificationdans le logiciel et devez regénérer, vousperdezlesmodificationsfaitesdanslecodegénéréetdevezlesressaisiroucopier/coller.Unbongénérateurdecodevouspermetd’incluredu

codepersonnalisé*avant*lagénération.Gestiondutrio«Sécurité/Multilinguisme/Expérience

Utilisateur » (design/ergonomie/Performances). Multi-linguisme.Pouractiver lemultilinguisme,vousdevezeffectuer

les3opérationssuivantes:

• dans lemenu “Tools>Languages”, cochez les lan-guesquevousdésirezutiliserdansvotreapplication.

Si la langue désirée n’apparaît pas, vous pouvez té-lécharger le fichier XML correspondant (par exemple“french.xml”)surleforumdel’éditeur.Enregistrezensuite lesfichiersXMLdans ledossier

“languages”del’application,parexemple:“C:\ProgramFiles\PHPMaker9\languages”,puisfermezetrelancezlelogiciel.Silefichierdelanguen’existepas,vouspouvezcréer

levotre,envousbasantsurunfichierXMLexistant.

Une fois les languescochées,vouspouvezactiver lemultilinguismedansl’onglet“PHP>GeneralOptions”:• cocher “Multi-language” pour activer le support

multilingue,• etindiquezlalanguepardéfautdanslemenu“De-

faultLanguage”.

Figure 19. Master/détail

Figure 20. Custom Scripts

Figure 21. Multilinguisme : options générales

Figure 22. Multilinguisme : options générales (suite)

Page 11: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

phpsolmag.org/fr11

Projets

HORS SÉRIE

• enfin, vous devez saisir les traductions pourchaque entrée de menu, libellé de table, champ,etautreséléments(footer/headerdespages,mes-sages d’erreur Javascript pour la validation deschamps...).

Pour cela, allez dans “Tools >UnicodeProperty Edi-tor”quicentralise toutes les traductions.Vouspouvezégalementcliquerdanslechamp“Caption”(libellé)destablesetchamps,cequifaitapparaîtreunepetiteicone,laquelleaffichelafenêtredetraductionpourcechamp.

N’oubliezpastouslespetitsparamètresliésàlalangue:PHP>GeneralOptions:

• locale:SetLocale:“fr_FR”,• formatd’affichagedeladate:DefaultDateFormat:

“dd/mm/yyyy”

HTML>General:

• Charset:“iso-8859-1(WesternEuropean(ISO))”.

PHPMakerafficherasurchaquepagegénéréeunmenudelangue,enhautàdroite,vouspermettantdechan-gerdelangueàtoutmoment.

Figure 23. Multilinguisme : traduction des labels de champs

Figure 24. Multilinguisme : traduction des menus, messages d’erreurs Javascript...

DesignToutsetrouvedansl’onglet“HTML”(hormislagestiondumenudenavigation).

“HTML>General”:Vous pouvez ici définir entre autres le titre de votreapplication, leheader(logo...)et lefooter(textecopy-right...).

“HTML>Themes”:vouspouvezchoisiricid’utiliserunthèmegraphiqueprédéfiniou“template”,avecdescssprédéfiniespourlestextes,lefonddepages,lesfondsdeslignesdetableaux...Définissezenfinleheader(lo-goparexemple)etlefooter(copyrightparex.).

“HTML>Styles”:Vouspouvezégalement créer vospropresCSSavecl’éditeurintégré.

Figure 25. Design : titre, header/footer, police...

Figure 26. Design : template graphique

Page 12: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

CRM

phpsolmag.org/fr 12HORS SÉRIE

ErgonomieVouspouvez“enrichir”etsimplifierl’expérienceutilisa-teurenactivantdesextensionscomplémentaires,parexemple:

• le “CKEditor” (éditeur HTML enrichi, mieux qu’unsimplechamp“textarea”).

• etle“JSCalendar”(affichantune“popup”decalen-drier pour sélectionner le trio jour/mois/année) aulieudeletaper.

Lesextensionssontactivablesvialemenu“Tools>Ex-tensions”.

Menu de navigationPHPMaker affiche un menu gauche sur toutes lespages générées ; une entrée demenuest créée pardéfautpourchaquetableouvue.Vouspouvezdécidericid’afficherounoml’entréedemenu,encréerdenou-vellesversd’autrespagesnongénéréesviaPHPMa-ker,oudesentréesdemenunepointantnullepart,etservantjusteàregrouperdesliens.Silemenunevousconvientpas,vouspouveznepaslegénérer,etinsérerdanslespagesPHPMakerunme-nu“hand-made”,crééparvous-mêmeviaunautreoutil

Figure 27. Design : éditeur de styles CSS 

Figure 28. RIA : extensions DHTML (éditeur HTML, popup de date) Figure 29. RIA : menu de navigation

Page 13: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

phpsolmag.org/fr13

Projets

HORS SÉRIE

(parexempleSothinkDHTMLMenu,oudesmenusDanslecadredenotreprojetCRM,lemenugénérépardéfautparPHPMakerpourraitêtrelesuivant:

• Clients• Contacts• Propositionscommerciales• AppelsTéléphoniques• Mails• Rendez-vous

Nouspouvonsajouterdesentréesdemenus,etrajou-terdes“vues”(commedesvuesSQL),afind’arriveràcemenu:

• Mes... Clients Propales• Clients Clientsactifs Prospects

Anciensclients• Nouveauxclients ClientsVIP• “Pipe”desventes Propositionscommercialesenvoyées(80) Propositionscommercialesacceptées(10) Bonsdecommandesenvoyés(8) Bonsdecommandesvalidés(5)• Administration GestiondelasécuritéUtilisateursHistoriquedesmodifications

VouspouvezcréerdesvuesSQLdansPHPMaker:cf«CustomViews»danslemenugauche. “MesClients”et“MesPropales”seraientdesvues: lalistedesclientsoupropositionscommerciales,fil-tréesparl’IDdel’utilisateurconnecté.“Clientsactifs”,“Prospects”,“anciensclients”seraient

égalementdesvues:lalistedeclients,filtrésparleur“status”:actif,inactif,...

Figure 30. Sécurité : protection par mot de passe

Figure 31. Sécurité : gestion d’utilisateurs et groupes

Figure 32. Sécurité : gestion d’utilisateurs et groupes (suite)

Page 14: PROJETS Créer un CRM avec un générateur de code · PROJETS Créer un CRM avec un générateur de code ... le logiciel

CRM

phpsolmag.org/fr 14HORS SÉRIE

“Nouveauxclients”et“ClientsVIP”: listedesclientstriéspardatedécroissante(etfiltrésparexemple:dateentrée aujourd’hui et aujourd’hui moins 1mois), listedesclientstriésparchiffred’affairedécroissant.Pourle“Pipe”desventes,celadépenddevotreCRM.

SécuritéVouspouvezindiquersivoussouhaitezprotégervotreapplication simplement par un couple identifiant/motdepasseuniquesaisiici“endur”(hardcodé),communpourtouslesutilisateurs.Vouspouvezégalementacti-verunegestiondesaccèsviaunebased’utilisateurs,desgroupesutilisateurs,etdes“ACL”(AccessControlList).Ces“ACL”permettentdemanièretrèsfinedespéci-

fierquialedroitdefairetelleopération(consulter/lister,créer/modifier/supprimer,copier/exporter...).Untelpeutseulementconsulterladonnée,unautrepeutmodifieruniquementcertainschamps,etunautrepeuttoutfaire(lesuperadministrateurparexemple).

Sécurité – utilisateurs et groupesVous pouvez utiliser une table d’utilisateurs externe(maisdanslamêmebaseutiliséeparPHPMakerdansl’application) ; dans ce cas, indiquez ici le nomde latable stockant vos utilisateurs, et les champs corres-pondantsauloginetaumotdepassequedevrautiliserPHPMaker.PHPMakerpeutcréerunetabled’utilisateurssivous

n’enavezpasencore.Demême,ilpeutcréerdestablespour gérer les groupes et les permissions (consulter/lister, créer/modifier/supprimer, copier/exporter...) pargroupeutilisateurouutilisateurnommé.PHPMakervousproposeégalementdenombreuses

autresoptions:motdepassestockéenmd5,xxxten-tativesdeconnectionaumaximum,affichaged’uncapt-cha, envoi d’un lien d’activation de compte utilisateuraprèscréationducompte,page“motdepasseperdu”...Options accessibles via “Security” > bouton “Ad-

vanced”>fenêtre“AdvancedSecurity”>section“UserLoginOptions”.

Sécurité – audit trailL’ “audit trail” est le fait d’historiser tous les accès(connections/déconnections) à votre application, ainsiquetouteslesopérationseffectuéessurlesdonnées:ajout/modification/suppressiond’entréescomplètesoudechamps.PHPMakerpeut créerpour vous la tablehistorisant

touteslesmodificationseffectuéessurladonnée–quiamodifiéquoi,quand–(nomdelatable,nomduchamp,anciennevaleur,nouvellevaleur,userIDayanteffectuélamodification,datedemodification).

Email SettingsSaisissez ici lesparamètresdevotreserveurdemaillocal.PHPMakerpeutenvoyerdesmailsdansdenom-breusessituations:

• lors de l’enregistrement d’un nouvel utilisateur, oupourlafonctionnalité“motdepasseperdu”,

• la fonctionnalité “AuditTrail”peutvousenvoyerunemail à chaque création/modification/suppressiond’enregistrements,

• vouspouvezenvoyerdesfichesdedétaild’enregis-trement.

Trucs et astucesVouspouvezégalementvouloirsupprimerlesliens“dé-tail/modifier/supprimer”surchaqueligne,afind’allégerl’affichage.Soitvouslesmasquezpardéfautetlesaffi-chezaupassagedelasouris(leplusélégant),soitvousgénérezlespagessanscesliens,soitvousgénérezlespagesavecetmasquezcesliensdanslecodegénéré(oulacolonneaffichantcesliens).Lapremièreméthodeimpliquedemodifierlecodegé-

néréenmettentcesliensdansunDIV/SPANavecunevisibilitémasquéepardéfaut,etderajouterunévéne-mentonmouseoversurleslignes.Doncdesmanipula-tionsdecode.La seconde méthode (générer sans ces liens) né-

cessiteuneastuce:sivousdécochez“Edit”,alorslespagesd’éditionneserontpasgénérées.Ilfautd’abordfaireunegénérationavecdétail/édition/supprimer,puisdécocheretrégénéreruniquementlapagedelisting,etrajouterunlien“detail.php?id=[id]”surl’IDetletitre,parexemple.Lapagedetail.phpn’ayantpasétérégénérée,elleaffichera les liensvers lespagesdemodification/suppression.Retrouvez les fichiersPHPMaker, .sql, fichiersPHP

générés à cette adresse : http://pierrenoel-sirh.com/phpmag/crm_phpmaker.

PIERRE Noël Coach Open Source, j’aide les entreprises à profiter des technologies Open Source afin de créer ou améliorer leur Système d’Information, leurs produits et services.

Figure 33. Sécurité : Audit Trail (historisation des modifications des données)