Vous êtes ici Forums
  |  Connexion
 Forums
HomeHomeForums DNNForums DNNDéveloppementDéveloppementComment modifier un module existant ??Comment modifier un module existant ??
Précédente
 
Suivante
Nouveau message
13/12/2007 13:13
 

Lu,

Arrivé depuis peu dans l'univers DotNetNuke, je tente de modifier le module Contacts dont j'ai récupéré les sources sur dotnetnuke.com (www.dotnetnuke.com/Products/Development/Projects/ModuleContacts/Downloads/tabid/856/Default.aspx). Le but étant de faire un module de répertoire téléphonique / contacts sur mesure.

 

Ce module n'est pas encore intégré à DotnetNuke car il est toujours en cours de développement si je ne me trompe pas. J'ai donc récupéré les sources et j'ai ensuite installé le package comme tout autre module... Jusque là aucun souci, le module fonctionne parfaitement.

Ce module doit posséder d'origine 5 champs : Name, Role, Email, Contact1 et Contact2.

J'ai donc modifié les champs existants et j'en ai rajoutés d'autres pour avoir la configuration me convenant. Au final je me retrouve donc avec les champs suivants : Name, Adress, ZipCode, City, Region, Phone, Fax, Email, Website et Speciality.

Bon, là tout va toujours bien, j'ai donc modifié les classes contrôleurs dans le code en rajoutant / modifiant les propriétés, j'ai également créé / modifié les colonnes dans la table contacts et j'ai mis à jour les procédures stockées...

J'en arrive donc au gros problème que je n'arrive pas à résoudre : les références... En effet, lorsque je lance le module, il garde comme références les 2 dll contenues dans le bin et non les classes mises à jour dans le module... Faut-il recréer les dll à partir des classes mise à jour et si oui comment faire pour générer ces fameuses dll ?? Faut-il supprimer les anciennes dll et ajouter les classes mises à jour en référence pour le module et si oui comment (on ne peut pas sélectionner un fichier .vb pour mettre en référence) ??

Ou plus simplement me suis-je complètement trompé dans la mache à suivre pour modifier un module déjà existant et dans ce cas là comment faire pour y arriver ?? Faut-il ouvrir dans visual studio uniquement le module qu'on modifie avant de l'installer de manière classique (via le menu hôte --> modules) dans dnn ? Faut-il ouvrir DotnetNuke dans Visual Studion avec le module installé préalablement en tant que projet et non pas en tant que site web comme j'ai fait ??

Si quelqu'un pouvait me guider un tout petit peu, je lui en serais fort redevable car là je suis un peu à bout d'idées... Je ne sais plus quoi faire...

Voilà la capture d'écran montrant l'erreur dûe aux dll qui forcément étant construites depuis le module original font lamentablement planter le module :

En vous remerciant d'avance

 

++

 
Nouveau message
13/12/2007 13:53
 

Ton exception semble bizarrement plutôt suggérer qu'une procédure stockée n'est pas à jour (GetContacts en l'occurence), mais pour l'histoire des dlls, il faut en effet d'une part recompiler le projet si tu as modifié les classes, et d'autre part migrer les dll dans le répertoire bin du site web, ce qui peut se faire de plusieurs façons:

  • dans les paramètres du projet, en définissant de façon relative le chemin de compilation pour toutes les configs
  • Utiliser un projet visual studio factice et de confort, dont le répertoire cible de compilation est le répertoire bin de DotNetNuke, et qui se charge simplement  de référencer tous les autres projets pour en déplacer les dlls à chaque recompilation. C'était la méthode employée dans la solution vs 2003 de DNN 3.X
  • en disposant dans ta solution du site web ainsi du projet du module (j'imagine une projet de lib ou un wap) et en faisant référence ton projet de module par ton site web (modifie le web.config, puisqu'il n'y a pas de projet à proprement parlé). L'inconvénient est que le site web met généralement longtemps à compiler
  • en ajoutant un événement de post-compilation pour déplacer les dlls

 

Tu pourras également, si tu souhaites rajouter de services et des contrôles additionnels à l'avenir et modifier les ascx principaux, utiliser avantageusement le système de compilation dynamique qui te permettra de rajouter des fonctionnalités à l'avenir sans besoin de recompiler. (Il te faut pour cette fois recompiler le code que tu as changé car il fait partie de la dll)

Pour rappel un module dynamique est compilé dynamiquement avec DotNetNuke; un répertoire de code de couche métier placé dans le répertoire App_Code et déclaré dans le fichier web.config est compilé au démarrage de l'application et son contenu peut être appelé dans les contrôles du site web qui sont compilés dynamiquement à l'exécution.

Le principal avantage est la possibilité de modifier le code sans besoin de recompiler manuellement une dll du répertoire bin, et donc sans redémarrage laborieux de DNN; et mieux l'Edit and Continue est possible en Débug (attache/détache le processus w3wp de l'isapi Asp.Net de IIS).

Pour cela, tu peux passer tes ascx des formulaires principaux (Portalmodulebase) en "CodeFile" dans la déclaration, tu met à jour la propriété de compilation du fichier de code behind à none dans visual studio. Tu recompiles ton projet de module .

Dès lors, tu peux sortir le projet de ton visual studio et développer directement dans le site web en mode dynamique, tout en t'appuyant sur le noyau dans la dll qui devra être référencé pour compiler dans Visual Studio, mais encore une fois; tu n'as pas à compiler à chaque modification, ce fait gagner beaucoup de temps.

Au besoin, tu pourras réintégrer tes classes depuis le répertoire App_code dans le projet pour un packaging final après débug.

Voilà  pour un petit aperçu des différentes façons de développer sous DNN, la difficulté parfois ressentie au démarrage vient sans doute partiellement du fait que nombre de projets de modules remontent encore à l'ancienne génération, et que les deux façons actuelles de développer des modules peuvent prêter à confusion.

J'espère que mon explication éclaire en quoi elles diffèrent et peuvent se compléter.


Jesse
Société de conseil et de service en 
informatique et systèmes d'information
 
Nouveau message
13/12/2007 15:11
 

Re,

Merci pour le coup de main, en effet les procédures stockées GetContact et GetContacts étaient passées à travers les mailles du filet et n'étaient donc pas à jour... Reste cette histoire de dll et de références qui restent encore obscures au nivau de la procédure, je pense que cela fera un bon sujet pour la dernière journée de formation car il est vrai que toutes ces différences au niveau de la programmation sous DNN ne sont pas simples à appréhender...

++

 
Nouveau message
13/12/2007 15:21
 

Je rajouterais tout de même qu'il n'est pas idéal de modifier directement un module du noyau, l'idéal étant de copier le module dans un répertoire propre, avec une définition propre, ce qui implique certes un travail de renommage, mais celui-ci peut se résumer à un judicieux "rechercher/remplacer" (attention tout de même aux scripts).

Cela permet de ne pas risquer une collision lors des futurers montées de version de DNN.

Ok pour la dernière journée de formation.


Jesse
Société de conseil et de service en 
informatique et systèmes d'information
 
Précédente
 
Suivante
HomeHomeForums DNNForums DNNDéveloppementDéveloppementComment modifier un module existant ??Comment modifier un module existant ??