Tuesday, September 19, 2017
.NET, ASP.NET

Dotnetnuke 7 : Creando un módulo personalizado

>helibertoarias helibertoarias
noviembre 11, 2013

En la presente entrada vamos a realizar la instalación de Dotnetnuke 7 y el paso a paso para crear un módulo personalizado utilizando el template de Christoc’s.

1. Requisitos previos dotnetnuke 7

2. Configurando host

Es necesario modificar el archivo host ubicado en C:\Windows\System32\drivers\etc y agregar 127.0.0.1 dnndev.me al final del documento. Esta modificación se requiere para utilizar la plantilla de Christoc’s ya que por defecto esta configurada con el host dnndev.me

Archivo host modificado

3. Configurando sitio en IIS

Creamos un directorio llamado DNN7 en la ruta C:inetpubwwwroot. Dentro del directorio DNN7 copiaremos el contenido de DotNetNuke Community 07.01.02 al cual antes de extraer debemos desbloquear. Luego creamos el sitio web de la siguiente manera en el IIS.

Se crea un sitio web en IIS para un host con dotnetnuke

Para evitar problemas de permisos es recomendado asiginar permisos de control total sobre el sitio para la cuenta de Servicio de Red. Verifique que el pool del sitio se ejecute sobre el Framework 4.0.

Pool framework 4.0

4. Instalando Dotnetnuke

Una vez configurado el sitio, copiado contenidos y asignados los permisos procedemos a crear la base de datos que usará el portal. A esta base de datos la llamaremos DNN7. Luego ingresamos a http://dnndev.me para iniciar el proceso de instalación. Una vez ingrese en el sistema este automaticamente lo redirecciona y lo guia en la instalación.

Instalación Dotnetnuke 7

En la sección de información de la base de datos se utilizo la conexión personalizada. Este portal se instalará sobre una base de datos DNN7 la cual debe existir de manera previa y el usuario de base de datos de la instalación debe tener permisos sobre la misma como propietario. Tambien se anexo como prefijo de objeto “dnn_” esta en una practica recomendada porque permite identificar claramente los componentes del core del portal para cuando sobre la misma base de datos existan tablas adicionales producto de los diversos de los módulo personalizados que se desarrollen.

Instalación Dotnetnuke 7

Y listo el Dotnetnuke esta instalado!

Página principal después de instalación

5. Creando el módulo

Para la creación del módulo se utilizará el template DNNTemplates.vsix el cual debe instalarse. Luego creamos un proyecto nuevo en Visual Studio 2012 usando el template. Es importante ubicar el modulo a crear en la carpeta DesktopModules pues en ella se ubican los modulos del portal.

Creando el módulo usando template

La plantilla de Christoc’s contiene dos proyectos pero para esta prueba seleccionamos el basico, sin embargo el proyecto DAL 2 contiene la implementación de acceso a datos utilizando contextos el cual sería interesante analizar.

Plantilla módulo Dotnetnuke

Luego de creado el proyecto se debe ingresar las propiedades del proyecto para cambiar el nombre predeterminado de los namespace y ensamblados según las necesidades. También es necesario reemplazar el namespace en toda la solución. Luego compilamos el proyecto y procedemos a agregar el módulo al portal creado.

Configurando propiedades de la solución

[Actualizado 06/03/2014]

Para reemplazar el espacio de nombres en toda la solución puedes utilizar la función Buscar y reemplazar, el comando rápido es (Ctrl + h). En la ventana Buscar y Reemplazar ingresamos lo siguiente; en el campo buscar colocamos el espacio predeterminado Christoc.Modules   y en el campo Reemplazar por coloca TuNamespace.  En el campo Buscar en, seleccionamos la opción Toda la solución. Reemplazar, guardar y compilar.

InstalacionDNN-reemplazando-espacionombres

La instalación del módulo se realizará utilizando el archivo DnnModulo.dnn el cual es el manifiesto del módulo, este contiene la metadata del módulo. Aquí se define la vista por defecto que cargara el módulo.

6. Instalando el módulo

Para instalar el módulo en el portal, una vez iniciado sesión en el mismo como administrador, se ingresa en el menú superior a Sistema>Extensiones y seleccione la opción Crear módulo.

Instalando el módulo en el porta

Luego de unos segundo cargará el módulo. El archivo DnnModulo.dnn contiene por defecto la vista Views.ascx como la inicial.

Módulo desplegado

Y hasta aquí termina la configuración y despliegue de módulo. Ahora falta realizar la implementación de acceso a datos la cual se realiza en una próxima entrada.

7. Descargar código fuente

URL Github https://github.com/HelibertoArias/DnnModulo.git

URL Directa DnnModuloCreacionModulo.zip

 

(Visitado 214 veces, 1 visitas hoy)
Heliberto Arias
Mi nombre es Heliberto Arias y vivo en Barranquilla, Colombia. Soy desarrollador de software. He estado en el desarrollo de software desde el 2007. Cree este blog en 2013 para compartir lo que voy aprendiendo cada año, en el escribo de tecnologías Microsoft principalmente en C# (y aunque he usado VB declaro que lo detesto) y SQL Server desarrollado aplicaciones y servicios web entre otros.Me gustaría mucho si te suscribes a mis redes en Youtube, Google+, Twitter, e Instagram.

Comments

  • Ivan Avellaneda
    Ivan Avellaneda

    buenas tardes, muy interezante su artículo, aunque no he podido pasar del punto 5 ya que no se donde cambiar los “namespace en toda la solución”, los cambie en la pestaña de propiedades pero no se donde mas y cuando compilo me salen 21 errores, le agradesco pueda ser un poco mas específico en ese punto, gracias.

    Mar 6, 2014, 3:40 pm
    Responder
  • Heliberto Arias
    Heliberto Arias

    Hola Ivan, actualice la entrada. Revisa y me comentas. Espero te sirva.

    Mar 6, 2014, 8:28 pm
    Responder
  • Ivan Avellaneda
    Ivan Avellaneda

    Buenas tardes Heliberto he seguido al pie de la letra nuevamente el tutorial, luego tube unos problemas de compilación que ya pude superar pero al correr el modulo como tal sobre el DNN, en la página del modulo muestra lo siguientre.

    Error: Modpago no está disponible ahora. DotNetNuke.Services.Exceptions.ModuleLoadException: No se pudo cargar el tipo ‘fdlm.Modules.Modpago.View’. —> System.Web.HttpParseException: No se pudo cargar el tipo ‘fdlm.Modules.Modpago.View’. —> System.Web.HttpParseException: No se pudo cargar el tipo ‘fdlm.Modules.Modpago.View’. —> System.Web.HttpException: No se pudo cargar el tipo ‘fdlm.Modules.Modpago.View’. en System.Web.UI.TemplateParser.GetType(String typeName, Boolean ignoreCase, Boolean throwOnError) en System.Web.UI.TemplateParser.ProcessInheritsAttribute(String baseTypeName, String codeFileBaseTypeName, String src, Assembly assembly) en System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes(IDictionary parseData) — Fin del seguimiento de la pila de la excepción interna — en System.Web.UI.TemplateParser.ProcessException(Exception ex) en System.Web.UI.TemplateParser.ParseStringInternal(String text, Encoding fileEncoding) en System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding) — Fin del seguimiento de la pila de la excepción interna — en System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding) en System.Web.UI.TemplateParser.ParseFile(String physicalPath, VirtualPath virtualPath) en System.Web.UI.TemplateParser.Parse() en System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType() en System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) en System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() en System.Web.Compilation.BuildProvidersCompiler.PerformBuild() en System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) en System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) en System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) en System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean ensureIsUpToDate) en System.Web.UI.TemplateControl.LoadControl(VirtualPath virtualPath) en DotNetNuke.UI.ControlUtilities.LoadControl[T](TemplateControl containerControl, String ControlSrc) en DotNetNuke.UI.Modules.ModuleControlFactory.LoadModuleControl(TemplateControl containerControl, ModuleInfo moduleConfiguration) en DotNetNuke.UI.Modules.ModuleHost.LoadModuleControl() — Fin del seguimiento de la pila de la excepción interna —

     

     

    Si me puedera hechar una manito con ese tema, a ver que estare haciendo mal, nuevamente mil gracias or su ayuda y excelente post, mil gracias.

    Mar 11, 2014, 2:54 pm
    Responder
  • Ivan Avellaneda
    Ivan Avellaneda

    buenas tardes Heliberto muchas gracias por su ayuda, al tratar de correr ya el modulo como tal me da el siguiente error, no se si falta instalar laguna libreria o algo asi. 

     

    Error: Modpago no está disponible ahora. DotNetNuke.Services.Exceptions.ModuleLoadException: No se pudo cargar el tipo ‘fdlm.Modules.Modpago.View’. —> System.Web.HttpParseException: No se pudo cargar el tipo ‘fdlm.Modules.Modpago.View’. —> System.Web.HttpParseException: No se pudo cargar el tipo ‘fdlm.Modules.Modpago.View’. —> System.Web.HttpException: No se pudo cargar el tipo ‘fdlm.Modules.Modpago.View’. en System.Web.UI.TemplateParser.GetType(String typeName, Boolean ignoreCase, Boolean throwOnError) en System.Web.UI.TemplateParser.ProcessInheritsAttribute(String baseTypeName, String codeFileBaseTypeName, String src, Assembly assembly) en System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes(IDictionary parseData) — Fin del seguimiento de la pila de la excepción interna — en System.Web.UI.TemplateParser.ProcessException(Exception ex) en System.Web.UI.TemplateParser.ParseStringInternal(String text, Encoding fileEncoding) en System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding) — Fin del seguimiento de la pila de la excepción interna — en System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding) en System.Web.UI.TemplateParser.ParseFile(String physicalPath, VirtualPath virtualPath) en System.Web.UI.TemplateParser.Parse() en System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType() en System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) en System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() en System.Web.Compilation.BuildProvidersCompiler.PerformBuild() en System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) en System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) en System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) en System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean ensureIsUpToDate) en System.Web.UI.TemplateControl.LoadControl(VirtualPath virtualPath) en DotNetNuke.UI.ControlUtilities.LoadControl[T](TemplateControl containerControl, String ControlSrc) en DotNetNuke.UI.Modules.ModuleControlFactory.LoadModuleControl(TemplateControl containerControl, ModuleInfo moduleConfiguration) en DotNetNuke.UI.Modules.ModuleHost.LoadModuleControl() — Fin del seguimiento de la pila de la excepción interna —

     

    Mil gracias por su ayuda

    Este sitio no tiene calificación

    Mar 11, 2014, 3:06 pm
    Responder
  • Heliberto Arias
    Heliberto Arias

    Hola Iván, revisa y asegúrate que las DLL del proyecto, luego de compilar, estén siendo ubicadas dentro de carpeta bin  que se encuentra en el directorio raíz del portal de DotNetNuke. Para ello da clic derecho sobre el proyecto, selecciona propiedades, y en el opción Generar, ubicada en la ventana de propiedades, verifica que la ruta de acceso de los ensamblados sea tal como se aprecia en la imagen. A veces cuando se cambia el proyecto de modo debug a release se cambia la ruta de ensamblados. Revisa también que el módulo desarrollado este copiado dentro del directorio DesktopModules.

    Dnn7-configurando-compilacion

    Saludos.

    Mar 11, 2014, 8:19 pm
    Responder
  • Ivan Avellaneda
    Ivan Avellaneda

    Heliberto buenas tardes no, no se que pasa ya revise bien este punto y nada me sigue saliendo el mismo error, no se que mas podria ser….

    Mar 12, 2014, 2:43 pm
    Responder
  • Ivan Avellaneda
    Ivan Avellaneda

    Heliberto mil gracias finalmente pude solucionar el problema con el modulo, seria buenisimo si hicieras otro tuto con el desarrollo ya del modulo con acceso a datos, nuevamente mil gracias.

    Mar 13, 2014, 11:17 am
    Responder
    • Heliberto Arias
      Heliberto Arias

      Ivan que bueno que pudiste encontrar solución. Si, tengo pensado próximamente publicar una entrada, que complemente esta, agregando acceso de datos. Para ello me apoyaré en el modelo de capas que se usó en ASP.NET MVC 3 por capas con MySQL.

      Saludos.

      Mar 13, 2014, 11:21 pm
      Responder

Leave a Comment

Your email address will not be published.

siete − cuatro =

Login
Remember me
Lost your Password?
Password Reset
Login