Instalando & Configurando DotNetNuke, Paso a Paso



El internet es una red bastante amplia y va creciendo cada día más, así también van creciendo el número de páginas interactivas y dinámicas en la web, muchas de ellas tienen una función primordial, MANEJAR CONTENIDOS, como la mayoría de los portales que creamos es con esta finalidad, les mostrare paso a paso como obtener un Gestor de Contenidos para su Portal de Internet.

Uno de mis favoritos aparte después de Share Point, es DotNetNuke, un gestor de contenidos escrito en utilizando la tecnología .NET y que ha venido a revolucionar lo que es el estilo de programación de muchas personas que se dedican a la creación de portales de internet.

En mi caso tengo más de 50 sitios creados en DotNetNuke, y me ha servido de mucho, en este artículo mostrare como obtener la versión gratuita de DotNetNuke y de cómo instalarlo y configurarlo en un ordenador.

1. Debemos de buscar la última versión lanzada al mercado del CMS, en este caso la buscamos aquí http://www.dotnetnuke.com/ 

2. Después de estar en el Portal vamos a la sección de Descargas (DOWNLOAD) y seleccionamos la versión a descargar en este caso será la Versión Comunitaria de DNN, para descargar cualquier versión del producto debes de estar registrado. http://www.dotnetnuke.com/tabid/125/default.aspx

3. Luego de haber descargado el archivo que contendrá el manejador de contenidos, procedemos a ir al Disco donde tenemos nuestros Sites de IIS, en mi caso lo tengo en el directorio por defecto C:\inetpub\wwwroot.

4. Procedemos a Descomprimir el Archivo que descargamos del Site.

5. Luego le cambiamos el nombre a la carpeta llamada DotNetNuke_Community_05.04.04_Install por el nombre del portal que queremos montar, en mi caso le pondré DotNetNuke.

6. Procedemos a otorgarle al directorio los permisos necesarios requeridos por el aplicativo que son (Read, Write, and Change Control), para eso le damos un click derecho en el directorio luego a propiedades y vamos a la pestaña de Seguridad.

7. Luego procedemos agregar el usuario Network Service al directorio y le asignamos los permisos o privilegios ya mentados.

8. Después de haberle Asignado los Permisos y Privilegios Correspondiente al Aplicativo, procedemos a Crear el Directorio Virtual en el IIS, vamos al Sitio por Defecto del IIS, expandimos y ahí debe de estar nuestro directorio DotNetNuke, para hacerlo directorio virtual solo tenemos que dar un Click Derecho y seleccionar Convertir Aplicación (Convert to Application) y Confirmamos la Acción.

9. Luego tenemos que indicarle cual será el primer documento que el site leeara, cada vez que sea accedido por parte de los usuarios, para esto en el menú del IIS solo tenemos que darle Click a la Opcion Documento Predeterminado (Default Document).

10. Luego de esto Debemos Renombrar el Archivo Release.Config por Web.Config

11. Después de haber realizado el Cambio del nombre al archivo, procedemos a abrir nuestro Motor de Base de Datos SQL y a crear una base de datos donde alojaremos toda la información de nuestro Site, en nuestro caso la creare con el nombre de DotNetNuke.


12. Luego de haber creado nuestra base de datos estamos listo para ejecutar nuestro manejador de contenidos, para esto abrimos una nueva ventana en nuestro navegador y escribimos la dirección que creamos en el IIS. http://localhost/DotNetNuke/

13. Con este último paso terminamos lo que sería la parte de instalación de DotNetNuke, solo faltaría la parte de configuración, que no es más bien seguir el asistente, también explicare todo concerniente a la configuración del sitio que decidimos crear.

14. Después de haber instalado DotNetNuke, debemos configurarlo, la herramienta cuenta con su asistente que nos guiara durante todo el proceso, y la primera pregunta del mismo es que método utilizaremos para instalar DotNetNuke, existen 3, "Custom", que es el método personalizado, solo instalamos los módulos u opciones que necesitemos para ese sitio, "Typical", es el método común y permite instalar todos los componentes del CMS, y por ultimo existe un módulo "Auto", para utilizar este módulo debemos modificar la cadena de conexión en el Web.Config e indicarle la base de datos donde la instalaremos, por lo regular si es un sitio nuevo utilizo Typical

15. La siguiente pantalla verifica que poseemos los permisos necesarios para configurar el aplicativo en nuestro portal.

16. Luego el siguiente paso es Configurar las Credenciales de nuestro banco de Datos, que utilizaremos para el portal.

- Seleccionamos la Base de Datos a utilizar (Select Database)
- Escribimos el Nombre del Servidor (Server)
- La Base de Datos (Database)
- Integrate Security (Seguridad Integrada, esto es por si contamos con un active directory el cual está manejando la seguridad y verifica las credenciales de mi ordenador y las compara en nuestro servidor de base de datos para saber si cuenta con los privilegios necesario para crear / modificar objetos en las bases de datos)
- Usuario de la base de datos SQL (User ID)
- Contraseña (Password)
- Ejecutar como Propietario (Run as db Owner)
- Prefijo a utilizar en la Base de Datos (Object Qualifier)

17. Luego de este paso se procede a instalar y configurar toda la base de datos, y se hace un vaciado de los Scripts y data en nuestro servidor de base de datos.

18. Procedemos a Configurar las Credenciales del usuario HOST del portal, este usuario cuenta con los privilegios del administrador del sitio, pero también cuenta con privilegios especiales dentro del site, que el administrador no tiene.

19. Luego indicamos las credenciales del administrador, y también le asignamos un título a nuestro portal, ya que como sabemos podemos administrar un sin número de portales con este CMS.

20. El último paso el Lanzar y Publicar el Site, después de haber instalado y configurado nuestro site con éxito, procederemos a darle un vistazo a como se vería a primera vista nuestro nuevo portal.

En un Próximo articulo hablare sobre Cómo Podemos Extender y Personalizar DotNetNuke como Queramos, aquí les dejo como se vería nuestro Portal después de haberlo construido.

Autocompletar con AJAX Utilizando un WebServices (Autocomplete)

Muchas veces nosotros como desarrolladores de Aplicaciones para la Web, queremos enriquecer cada dia mas nuestros aplicativos, una de las formas para lograr esto es brindar la mayor información que podamos al usuario en una primera vista, AJAX cuenta con un control muy versatil el cual puede ir a la base de datos y desplegarnos la informacion en cuestion de segundos, este es el AUTOCOMPLETE, en este articulo mostrare como podemos utilizarlo, paso a paso:


Para esto solo necesitaremos, crear un WebSite con Visual Studio, como siempre, utilizare de ejemplo la base de datos AdventureWorks que provee SQL para ejemplos.

- Aqui luego de crear el WebSite, arrastro un TextBox de la barra de Herramientas de Visual Studio

- Procedo a darle click Derecho sobre el TextBox y preciono Add Extender

- Dentro de los Controles a elegir selecciono AutoComplete


 - Procedo Agregar un Folder ASPNET


- Luego de Agregar el Folder ASPNET AppCode, Agrego un Nuevo Elemento

- El Nuevo elemento que voy agregar sera una Clase que Nombrare AutoComplete.vb



- Le Escribire el Siguiente Codigo, que lo que hace es buscar en la Tabla donde los campos contengan las variables que le estoy enviando desde mi aplicativo web

- Procedo agregar una nueva carpeta llamada WebServices



- Luego Agrego mi Script Manager (Componente AJAX) desde mi ToolBox, y completo el codigo necesario en mi control para que funcione lo que acabe de programar

- Le doy un Click Derecho a la pagina donde he insertado mi TextBox y mi Control AJAX, y le doy Visualizar en mi Navegador

- Tendremos la siguiente Interfaz

- Buscamos en Nuestra Base de Datos para confirmar y probar que los datos estan filtrandose correctamente

- Luego procedemos a escribir en nuestro TexBox y el Resultado Seria el Siguiente

Siempre y cuando se cumpla la condicion que pusimos en nuestra Clase AutoComplete.vb, podremos visualizar los datos extraidos en cuestiones de segundos desde nuestra base de datos.

CODIGO DE EJEMPLO:

DEFAULT.ASPX



<asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        AUTO COMPLETAR DESDE LA BASE DE DATOS CON AJAX AUTOCOMPLETE<br />
        <br />
        <asp:TextBox ID="TextBox1" runat="server" Width="400px"></asp:TextBox>
       
        <cc1:AutoCompleteExtender ID="TextBox1_AutoCompleteExtender" runat="server" TargetControlID="TextBox1"
        ServicePath="~/WebServices/AutoComplete.asmx"
                ServiceMethod="GetCompletionList"
                MinimumPrefixLength="2"
                CompletionInterval="1000"
                EnableCaching="true"
                CompletionSetCount="12">
        </cc1:AutoCompleteExtender>


AUTOCOMPLETE.VB

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports System.Collections.Generic

<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
<System.Web.Script.Services.ScriptService()> _

Public Class AutoComplete
    Inherits System.Web.Services.WebService
    Dim myConn As New SqlConnection(ConfigurationManager.ConnectionStrings("fvConn").ConnectionString)
    Dim myComm As New SqlCommand

    <WebMethod()> _
    Public Function GetCompletionList(ByVal prefixText As String, ByVal count As Integer) As String()
        Dim read As SqlDataReader
        myComm = New SqlCommand("SELECT FirstName + ' ' + LastName AS NombreCompleto FROM Person.Contact" _
        + " WHERE FirstName Like '" & prefixText & "%' Or LastName Like '" & prefixText & "%' ", myConn)

        myConn.Open()
        read = myComm.ExecuteReader()

        Dim items As New List(Of String)

        While (read.Read())
            items.Add(read("NombreCompleto"))
        End While

        myConn.Close()

        Return items.ToArray
    End Function

End Class

Comparar Resultados en SQL Server

Se que a todos nos ha pasado un caso similar a este que voy a plantear, tenemos un banco de datos lleno de correos electronicos y por una razon el nombre del dominio cambia pero no los correos, por lo cual debemos actualizar nuestra base de datos y ponerle a los correos el nombre del nuevo dominio, un ejemplo de esto fue cuando en republica dominicana Codetel (Compañia Dominicana de Telefonos) vendio su sus acciones a Verizon International, los correos pasaron de ser @codetel.net.do a verizon.net.do, esto para mucho fue un dolor de cabeza, pero aqui les dejare el codigo que ustedes pueden utilizar para no solo resolver ese caso, sino casos similares a este.

En este ejemplo buscare utilizare varias funciones de SQL como lo son SUBSTRING & CHARINDEX, aqui definire las mismas:

SUBSTRING: es una función de subcadena en SQL se utiliza para tomar una parte de los datos almacenados.
CHARINDEX: Devuelve la posición inicial de la expresión especificada en una cadena de caracteres.


Este ejemplo lo ejecutare como siempre en la base de datos de Muestra que trae SQL Server Adventure-Works


Tal y Como vemos en la Imagen con la sintaxis SQL que corrimos seleccionamos todos los correos de la tabla Person.Contact, que pertenecieran al dominio @adventure-works.com, y lo creamos una columna para ver como quedarian si lo reemplazaramos por el dominio @omarfrometa.com.

Luego de verificado que es asi que queremos que queden los datos procedemos a reemplazarlos en nuestro banco de datos, utilizando la sentencia UPDATE, tal y como se muestra en la siguiente imagen.


Aqui les dejo todo el Codigo Que Utilice en este Ejemplo:

UPDATE
      Person.Contact
SET
      EmailAddress = SUBSTRING(EmailAddress, 1, CHARINDEX('@',EmailAddress)) + 'adventure-works.com' 
WHERE
      EmailAddress Like '%omarfrometa.com%'

Pint Screen con C# (Capturar una Imagen)

Estare realizando un ejemplo de como Capturar un Trozo de una pantalla o una pantalla completa con C#.Net, estare explicando paso a paso como realizar esta tarea.

Para eso crearemos una pantalla similar a esta que se refleja en la imagen, la cual contiene los siguientes elementos:

a) 3 Botones (Capturar, Capturar Pantalla Completa, Guardar Imagen)
b) 1 TextBox
c) 1 PictureBox


Luego procedemos a codificar las acciones que queramos que haga este aplicativo, aqui les dejo todo el codigo fuente utilizado:


using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using System.IO;

namespace PrintScreen
{
    public partial class Main : Form
    {
        public Main()
        {
            InitializeComponent();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            // Si no se indica el formato, se guarda como PNG
            //this.picCaptura.Image.Save(this.txtNombre.Text);

            if (String.IsNullOrEmpty(this.txtNombre.Text))
            {
                MessageBox.Show("Debes indicar el nombre del fichero",
                                "Guardar",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                return;
            }

            // Usar el formato según la extensión
            string ext = Path.GetExtension(this.txtNombre.Text).ToLower();
            switch (ext)
            {
                case ".jpg":
                    this.picCaptura.Image.Save(this.txtNombre.Text, ImageFormat.Jpeg);
                    break;
                case ".png":
                    this.picCaptura.Image.Save(this.txtNombre.Text, ImageFormat.Png);
                    break;
                case ".gif":
                    this.picCaptura.Image.Save(this.txtNombre.Text, ImageFormat.Gif);
                    break;
                case ".bmp":
                    this.picCaptura.Image.Save(this.txtNombre.Text, ImageFormat.Bmp);
                    break;
                case ".tif":
                    this.picCaptura.Image.Save(this.txtNombre.Text, ImageFormat.Tiff);
                    break;
                default:
                    this.picCaptura.Image.Save(this.txtNombre.Text);
                    break;
            }
        }

        private void btnCapturar_Click(object sender, EventArgs e)
        {
            // Capturar todo el área del formulario

            Graphics gr = this.CreateGraphics();
            // Tamaño de lo que queremos copiar
            Size fSize = this.Size;
            // Creamos el bitmap con el área que vamos a capturar
            // En este caso, con el tamaño del formulario actual
            Bitmap bm = new Bitmap(fSize.Width, fSize.Height, gr);
            // Un objeto Graphics a partir del bitmap
            Graphics gr2 = Graphics.FromImage(bm);
            // Copiar el área de la pantalla que ocupa el formulario
            gr2.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, fSize);

            // Asignamos la imagen al PictureBox
            this.picCaptura.Image = bm;

            // Guardarlo como JPG
            //bm.Save("formulario.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
        }

        private void btnCapturarPantalla_Click(object sender, EventArgs e)
        {
            // Capturar toda la pantalla

            Graphics gr = this.CreateGraphics();
            // Tamaño de lo que queremos copiar
            // En este caso el tamaño de la ventana principal
            Size fSize = Screen.PrimaryScreen.Bounds.Size;
            // Creamos el bitmap
            Bitmap bm = new Bitmap(fSize.Width, fSize.Height, gr);
            // Un objeto Graphics a partir del bitmap
            Graphics gr2 = Graphics.FromImage(bm);
            // Copiar todo el área de la pantalla
            gr2.CopyFromScreen(0, 0, 0, 0, fSize);

            // Asignamos la imagen al PictureBox
            this.picCaptura.Image = bm;
        }
    }
}

Luego de haber programado estos eventos podremos capturar una parte de la pantalla o la pantalla completa, y se reflejara en nuestro control PictureBox, como tambien podemos ponerle un nombre y guardar esa imagen en nuestro ordenador.