Archive for the ‘Uncategorized’ Category

Sobre las versiones de los proyectos

Sunday, March 22nd, 2009

Como sabrás, ya es pública la beta final de la nueva versión de Visual Studio .NET (la 2003), aunque sólo estará disponible para los beta-testers y para los que estén subscritos a MSDN.

La nueva versión de Visual Studio .NET se puede instalar en un equipo que tenga la versión anterior de Visual Studio .NET, (así como también con el Visual Studio 6.0), pudiendo desarrollarse tanto con una como con otra de forma indistinta, sin que haya “incompatibilidades” ni se mezclen las cosas.
Esto es posible debido a que la versión 2002 utiliza el .NET Framework 1.0 y la nueva versión (la 2003) usa la versión 1.1 del .NET Framework, incluso desde ésta última se pueden crear ejecutables que sean “compatibles” con la versión anterior del .NET Framework, así como poder crear ejecutables que utilicen una u otra versión de dicho Framework (que no marco de trabajo como he visto que algunos traducen); en el caso de que esté instalada la versión 1.1 se usará esa versión, sino se usará la versión 1.0.
Por supuesto, esto sólo es posible si no se usa ninguna de las nuevas características incluidas en la versión 1.1 del .NET Framework.

Pero no es esto lo que quería comentar, aunque tampoco está de más que lo sepas.

El problema con el que te puedes encontrar, es que después de haber guardado un proyecto con la versión 2003, quieras abrirlo con la versión 2002, te encontrarás que no puedes hacerlo porque está guardado con una versión posterior, (el IDE se encarga de darte este aviso).
Pero no te apures, tiene solución.
El único problema será si estás usando alguna de las nuevas características de dicha versión, si no es así, lo puedes solucionar de forma fácil y rápida, ya que lo único que se modifica es parte del contenido del fichero de soluciones (.sln) y los de proyectos de Visual Basic y C# (.vbproj u .csproj respectivamente, no he comprobado si el de C++ se modifica, pero me imagino que sí).

En el fichero de soluciones, (.sln), la primera línea tendrá uno de estos dos contenidos, según se haya guardado con la versión 2002 o la 2003:

Para VS .NET 2002:
Microsoft Visual Studio Solution File, Format Version 7.00

Para VS .NET 2003:
Microsoft Visual Studio Solution File, Format Version 8.00

En el caso de los proyectos, la versión 2002 guardará esta información:

        ProductVersion = "7.0.9466"
        SchemaVersion = "1.0"

Mientras que la versión 2003, guardará esta información:

        ProductVersion = "7.10.2292"
        SchemaVersion = "2.0"

Por tanto, cambiando esas líneas, funcionarán correctamente.

Si quieres saber lo que yo hago en esos casos, (y si no, también te lo voy contar), es añadir al final del nombre del proyecto y solución un 3 para la versión 2003, y con la versión 2002 dejo el nombre normal, (ya que por ahora esa es la versión “fiable” de Visual Studio .NET), de forma que si quiero abrirlo con la versión “normal”, los copio, les cambio el nombre y modifico las líneas que te he comentado.

Por supuesto, si el código incluye llamadas a cosas específicas de la versión 2003, tengo que cambiarlo antes de ejecutarlo, si no lo haces, será el propio IDE el que se encargará de avisarte.
Para estos casos te recomendaría usar constantes de compilación condicional (#Const) y usar un #If… Then para incluir el código de una u otra versión dentro del bloque correspondiente.
En el código del formulario de comprimir/descomprimir tienes un ejemplo de cómo usar esto de la “compilación condicional”.

Espero que este comentario te sea de utilidad y te evite algunos quebraderos de cabeza… aunque no muchos, pero es que, después de ver el mensaje que te muestra el Visual Studio .NET 2003 al abrir un proyecto de la versión anterior, parece como si fuera a modificar “todo” el código… y la primera reacción es decir que no… hasta que te das cuenta de que no hay problemas al usar uno u otro.

Fuente: http://www.elguille.info/NET/dotnet/versiones.htm

Recursos en VS .Net. Cómo crear, administrar y obtener recursos incrustados en nuestras aplicaciones

Sunday, March 22nd, 2009

Las aplicaciones de desarrollo profesional requieren que todos cada uno de los archivos que componen un proyecto de aplicación pertenezcan a un esquema que permita de forma rápida ubicar, usar y editar los recursos que formarán parte de la aplicación final; VS .Net nos permite administrar recursos (archivos de texto, archivos de sonido, imágenes, archivos de video, iconos…) bajo los archivos recursos o .resx que simplemente son archivos xml que guardan estructuradamente los datos binarios de nuestros archivos de recursos (base64 – encoded).

Existe una herramienta que permite generar archivos .resx que después podemos incorporar a nuestros proyectos, creada por Lutz Roeder: Resourcer. Simplemente crea una solución de en VS .Net (como biblioteca de clases en VC#), después seleccionaAgregar/Agregar un nuevo elemento y selecciona Archivos de recursos de ensamblado (.resx files); con este archivo ya creadoResourcer lo empleara para añadir los recursos. La interfaz y uso de Resourcer es sencilla; abre desde éste el archivo .resx de tu proyecto y en Edit añade los archivos.

 

 

 

 

 

Teniendo ya nuestros recursos cargado en nuestro .resx file, crearemos una libreria de enlace dinámico que se encargue de tomar el recurso y entregarlo como objeto a nuestra aplicación para su posterior uso en cualquier de VC# o VB .Net, el método definido tomará una instancia del recurso que es llamado por su nombre, bajo este esquema puedes desarrollar futuras aplicaciones que integren en una clase compilada todos los recursos que frecuentemente usas en tus aplicaciones; en lineas generales no te preocupes por ello, que al final tendrás tanto los enlaces para la descarga del código como una pequeña explicación de lo hecho.

public Object getResource(string ResourceName)
     {
       ResourceManager resx = new ResourceManager(“IA.ResourcesDLL.Images”,GetType().Assembly);
       Object obj = (Object)resx.GetObject(ResourceName);
       return (obj);
     }

Crearemos un administrador de recursos para el archivo .resx, en este ejemplo está bajo en namespace IA.Resources.DLL, donde IApuede ser el nombre de tu grupo de trabajo y ResourceDLL es el nombre del Proyecto, Images es el nombre del archivo .resx que estará de último en esta jerarquía, así que GrupoDeTrabajo.NombreProyecto es el nombre de espacio raíz que debe tener el proyecto, desplázate bajo las propiedades de proyecto para establecer el espacio de nombres raíz.

 

 

Ahora en VB .Net o VC# agrega una referencia de la clase compilada a tu proyecto.

Implementacion en C#

//Objeto Resource
this.resx = new IA.ResourcesDLL.Resource();

//Llamada y asignación del recurso al pictureBox1
this.pictureBox1.Image = (Bitmap)resx.getResource(“NombreDelRecurso”);

Implementacion en VB .Net

‘Objeto para manejar los recursos en la Clase Compilada
 Me.resx = New IA.ResourcesDLL.Resource()
‘LLamada al recurso
 Me.obj = Me.resx.getResource(“QuemaCaucho”)
‘Se establece la propiedad Image en el Bitmap creado y convertido
 Me.PictureBox1.Image = New Bitmap(CType(obj, System.Drawing.Bitmap))

 Fuente: http://www.elguille.info/colabora/puntoNET/felixcriv_Recursos.htm

Proyectos Personalizados en Visual Studio 2003

Sunday, March 22nd, 2009

Introduccion

Hace un tiempo, y gracias a la ayuda de mi amigo LucasQ, me encontré frente a la necesitad de crear proyectos personalizados para Visual Studio 2003. Si bien el detalle de cambios que requerían los proyectos no eran muchos, era una forma de ahorrar tiempo, teniendo datos comunes a todos los assemblies ya configurados. Por ejemplo, toda la información del AssemblyInfo, o los namespaces ya configurados.

Una solución simple para este problema era crear una serie de proyectos en Enterprise Template Projects, luego customizarlos y generar proyectos con esta base. Microsoft publica un tutorial muy completo en Crear una nueva plantilla de Enterprise Templates.

 

Creando Proyectos Propios.

Sin embargo, la solución vino por otro lado. LucasQ, me mostró un proyecto de ejemplo que generaba un instalador y automáticamente se configuraba dentro del VS los proyectos nuevos para agregar.

 

Nota: El objetivo de este artículo no es explicar paso a paso como crear un instalador para proyectos personalizados, pero si mostrar la información que se puede modificar sobre un proyecto existente para crear uno propio.

Este instalador, copia una serie de archivos al directorio de instalación especificado y luego el Visual Studio 2003 se sirve de los mismos para la creación de nuevos proyectos.

Asimismo copia los proyectos en blanco dentro del directorio de templates del Visual Studio 2003.

Si examinamos un poco mas los archivos .vsz (Figura 3), nos encontramos con la siguiente información:

VSWIZARD 7.0

Wizard=VsWizard.VsWizardEngine.7.1

Param=”WIZARD_NAME = Ginkgo Class Library”

Param=”WIZARD_UI = FALSE”

Param=”PROJECT_TYPE = CSPROJ”

Estos son los datos que nos mostraran los nuevos proyectos en la ventana de crear proyectos. Los parámetros que soporta son,

  • VSWizard, esta es la versión del template. Siempre debe ser “VSWizard 7.0”.
  • Wizard, Este es el ProgID o el nombre del componente que se utiliza para lanzar los wizards.
  • Param, esta es una colección de parámetros que se utilizan para pasar información al AddIn, se pueden crear los que sean necesarios.

Para más información consultar http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxconVSZFiles.asp.

El archivo .vsdir es el que provee información a las ventanas de creación de nuevos proyectos y nuevos ítems, aquí se indica el nombre, la posición, el icono y otros datos. Para más información consultar http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxconVSDirFiles.asp.

Nota: No me parece muy cómoda la forma en la que se organizaron la información. Nótese que los vsz son parecidos a los archivos .ini y los vsdir es simplemente información concatenada con “|”. Existiendo los config de .Net, esto parece un paso atrás.

Bueno finalmente nuestro proyecto compila toda esta información y genera un nuevo instalador que agrega estos proyectos al Visual Studio 2003. Dentro de la estructura general del proyecto hay un par de puntos interesantes para ver.

Fig 5

Dentro de la carpeta Templates\Templates\Vb7\VBWizards\Ginkgo Class Library\Scripts\1033, encontramos un archivo llamadodefault.js. Este archivo contiene las funciones que se invocan cuando se agrega el nuevo proyecto, si vemos un poco el código del mismo, vemos que utiliza parte de los parámetros que se configuraron en los archivos anteriores y que además tiene comentado código para agregar dinámicamente assemblies al nuevo proyecto. Y al final la línea de compilación del proyecto

//Build project to regenerate propper references

//project.DTE.ExecuteCommand(“Build.BuildSolution”);

La carpeta Templates\Templates\Vb7\VBWizards\Ginkgo Class Library\Templates\1033, contiene el proyecto de Visual Studio como habitualmente lo conocemos.

Bueno con esta información y el proyecto de ejemplo, podemos empezar a compilar instaladores y ver que nuevas posibilidades tenemos. Les muestro como queda un proyecto base, que ya incluye información en cada uno de las clases que lo componen y también una serie de referencias ya establecidas. Espero que en Visual Studio 2005, esta tarea se haya simplificado un poco.

 Fuente: http://www.elguille.info/colabora/NET2005/bcapuano_Proyectos_Personalizados_en_Visual_Studio_2003.htm

Reiniciar el IIS desde Visual Studio 2003.

Sunday, March 22nd, 2009

Introducción

El objetivo de este articulo es mostrar un método simple y efectivo de reiniciar el IIS desde el IDE de Visual Studio 2003 

Desarrollo

Pues bien, ahora que he empezado a moverme entre diferentes PCs de desarrollo, siempre hay pequeñas cosas muy útiles que extraño. Por ejemplo, un archivo BAT para reiniciar el IIS. El mismo tiene el siguiente código dentro:

REM StopISS.cmd

net stop iisadmin /yes

REM StartIIS.cmd

net start iisadmin

net start w3svc

net start smtpsvc

Para generar este archivo hay que copiar el código anterior en un archivo de texto (RestartIIS.txt) y renombrarlo por .bat (RestartIIS.bat). Luego queda listo para la ejecución del mismo.

Para poder aprovecharlo al máximo, por lo general debemos ejecutar este archivo desde dentro del IDE del Visual Studio 2003. Lo que podemos hacer es agregarlo como una External Tool y que quede dentro del IDE. Para esto seleccionamos el menú Tools / External Tools

A continuación, agregamos una nueva External Tool. Los datos básicos de la misma son bastante simples, un pequeño titulo para verla en el menú, la selección de nuestro archivo BAT y opcionalmente podemos seleccionar el check “Use Output Window”, para que la ejecución del Bat se muestre dentro de la ventana de Output de Visual Studio 2003.

Nuestro menú debería quedar así

Y luego al ejecutarlo, la ventana de Output debería mostrar lo siguiente Espero que sea útil, saludos.

Fuente: http://www.elguille.info/colabora/NET2005/bcapuano_RestartIIS_desde_Visual_Studio_2003.htm

Enterprise Library con Visual Studio 2005, .Net 2.0

Sunday, March 22nd, 2009

Introducción

En estos últimos días he recibido varias consultas sobre la utilización de Enterprise Library con .Net 2.0, o Visual Studio 2005. De hecho, la mayoría de las mismas eran sobre errores en la compilación de EntLib.

 

Instalación y Compilación

Lo primero que debemos tener en cuenta es que el instalador de Enterprise Library por defecto compila los proyectos utilizando el IDE del Visual Studio 2003, al terminar la instalación. Si en nuestro caso, solo tenemos instalado Visual Studio 2005, nos aparecerá un error de compilación. Este error, que sale en una ventana de cmd, suele pasar demasiado rápido como para que lo veamos. Pero, podemos reproducirlo con los siguientes pasos para asegurarnos que funcione correctamente EntLib. Primero, lanzamos el bat de compilación que trae EntLib. Este está en Programas –> Microsoft Patterns & Practices –> Enterprise Library – June 2005 –> Build Enterprise Library.

 

Luego se lanza el archivo de compilación y nos aparece el siguiente error:

 

El error nos indica que no se pudo encontrar la ruta de acceso para el Visual Studio 2003, para poder compilar EntLib.

La solución a este problema es compilar EntLib directamente con Visual Studio 2005. Para esto abrimos la solución que contiene todos los proyectos de EntLib. La misma esta en Programas –> Microsoft Patterns & Practices –> Enterprise Library – June 2005 –> Applicaton Blocks for .Net –> Enterprise Library Solution.

 

Cuando se abre la Beta 2 de Visual Studio 2005, lo primero que debemos ver es el Asistente para conversión de Proyectos de Visual Studio. Como EntLib fue codificada y compilada para la version 1.1 de .Net, este asistente nos ayuda a convertir los fuentes a la version 2.0.

 

Los siguientes pasos del asistente nos indican si queremos hacer un BackUp de los fuentes en su estado actual y finalmente nos muestra un log con el resultado de la conversión.

 

 

 

Finalmente, podemos ver dentro de Visual Studio 2005 los fuentes en C# de EntLib y podemos compilarlos.

 

Pero este no es el último paso que debemos seguir. Lo que necesitamos ahora es correr el bat que copia todos los archivos de EntLib a un mismo directorio. Este archivo esta en Programas –> Microsoft Patterns & Practices –> Enterprise Library – June 2005 –> Copy Assemblies to Bin Folder. De esta forma todos los archivos compilados de EntLib quedarían en ..\Archivos de Programa\Microsoft Enterprise Library June 2005\bin.

Pasos para la Compilación

Este es un pequeño repaso de los pasos a seguir:

  1. Abrir la solución de Enterprise Library co Visual Studio 2005.
  2. Ejecutar con las opciones por defecto el Visual Studio Conversion Wizard.
  3. Compilar la solución con Visual Studio 2005.
  4. Ejecutar el bat que copia todos los archivos al directorio de compilación.                                 Fuente: http://www.elguille.info/colabora/NET2005/bcapuano_Enterprise_Library_con_VS2005.htm

Usar un ensamblado de C# desde Visual Basic

Sunday, March 22nd, 2009

Introducción:

Desde que apareció .NET Framework, crear aplicaciones que usen librerías (ensamblados DLL) creadas con cualquiera de los lenguajes soportados ha sido una tarea fácil, entre otras cosas, porque ese es uno de los puntos fuertes de .NET Framework: usar cualquier ensamblado creado con cualquier lenguaje de esta plataforma, desde otro lenguaje que utilice el mismo “marco de trabajo”.

Incluso desde la primera versión para .NET, Visual Studio ha permitido que esa “interoperabilidad” (o comunicación entre lenguajes distintos), sea fácil de realizar. Ya que permite crear soluciones o grupos de proyectos, en los que podemos usar lenguajes diferentes para cada uno de esos proyectos.

Si algunos de esos proyectos son bibliotecas de clases, las podemos usar desde cualquiera de los otros proyectos, simplemente agregando una referencia al proyecto en cuestión y después compilar y ejecutar esos proyectos sin hacer nada de especial.
Lo bueno de todo esto, es que incluso podemos hacer “depuración” entre esos proyectos escritos en lenguajes diferentes. Es decir, podemos poner puntos de interrupción y detener la ejecución en cualquiera de ellos, sin importar en que lenguaje esté escrito.

Sí, es posible que todo esto ya lo sepas… pero… mejor sigue leyendo.

 

Usar ensamblados de otros lenguajes en .NET Framework 2.0

O lo que es lo mismo desde Visual Studio 2005, incluso desde la versiones Express.

En Visual Studio 2005 (no en las versiones Express), el proceso a usar es el mismo que el descrito anteriormente, es decir, creamos una solución y en esa solución podemos agregar nuevos proyectos (o proyectos existentes) de cualquiera de los lenguajes soportados por Visual Studio 2005, y también podemos interoperar entre ellos.

Con las versiones Express de Visual Studio 2005 esto no es posible, es decir, no podemos crear una solución en la que tengamos mezclados proyectos escritos en lenguajes diferentes.
Sí podemos crear una solución con diferentes proyectos, y referenciar esos proyectos, hacer depuración, etc. Pero siempre en el mismo lenguaje.
Esto es lógico, ya que las versiones Express de Visual Studio 2005, en realidad son entornos de desarrollo (IDE) para un solo lenguaje. Por tanto no podemos crear con Visual Basic 2005 Express un proyecto de C#, y lo mismo ocurre al revés.

Nota:
La única versión Express que permite usar más de un lenguaje, es la versión de desarrollo Web: Visual Web Developer 2005 Express Edition, pero eso… es otro tema.
Si quieres saber cómo usar más de un lenguaje en un proyecto Web creado con esa versión, léete esto: Usar clases de VB y C# en una misma aplicación Web de Visual Studio 2005.

Antes de entrar en detalles de cómo hacer esa “comunicación” entre proyectos creados con las versiones Express de Visual Studio 2005, veamos algo que es nuevo en Visual Studio 2005 (y por tanto también aplicable a las versiones Express).

La novedad de Visual Studio 2005 es que podemos crear referencias a otros proyectos, pero no tienen porqué ser ensamblados DLL, sino que también pueden ser ejecutables o ensamblados EXE.
Es decir, podemos crear un EXE y desde otro proyecto de Visual Studio 2005 usar las clases que ese ejecutable exponga, es decir, las clases que hayamos definido como públicas, porque si no son públicas… pues “casi” no se podrán usar… bueno, el “casi” es porque si se pueden usar, al menos si son “amigas” (internal en C#, Friend en Visual Basic), pero eso es otro tema y por ahora solo es posible desde C#, (es que parece que los que preferimos Visual Basic somos ciudadanos de segunda clase, y siempre nos dejan para el final… a ver el si llega el día que eso cambia). Por ahora quédate con la “copla” de que para poder usar una clase de un ensamblado en otro proyecto, esa clase debe ser pública.

 

¿Por qué podemos usar ensamblados escritos en otros lenguajes?

La respuesta es bien simple.
Cuando creamos una referencia a otros proyectos, Visual Studio, en realidad lo que hace es usar el ensamblado resultante y lo copia en la carpeta en la que está el ejecutable (o la librería) que lo tiene referenciado.
Como ves, no hay magia, salvo por la posibilidad de estar con esos proyectos en una misma instancia de Visual Studio en lugar de tener varios IDE abiertos, uno para cada lenguaje.

Por supuesto, todo esto solo es posible con las versiones “normales” de Visual Studio, ya sean de la versión 2002, 2003 o 2005. En realidad de las versiones anteriores a Visual Studio 2005 no existían versiones independientes para cada uno de los lenguajes.
Cuando digo “normales”, a lo que me refiero es a que no son las versiones Express.

 

Usar ensamblados de otros lenguajes con las versiones Express

Como te he comentado en el punto anterior, la “gracia” de usar ensamblados escritos con cualquier lenguaje de .NET desde un proyecto, ya sea escrito en ese mismo lenguaje o en otro diferente, es porque en realidad tenemos una referencia al ensamblado que se genera (o compila).

Sabiendo esto, lo que podemos hacer es, por ejemplo, crear una librería (o biblioteca) de clases con C# y usarla desde Visual Basic.
Esto nos da la “libertad” de poder usar las versiones Express para crear esa “relación” entre clases escritas en un lenguaje que usamos desde otro.

La ventaja “aparente” de usar la versión “normal” de Visual Studio es que en cuanto hacemos un cambio en la clase que tenemos referenciada como proyecto, (al menos si usamos Visual Basic), es que en ese mismo momento nos estamos enterando de que dicha clase ha cambiado.
Pero no te preocupes, ya que si esa librería (o ejecutable) que tenemos referenciada está escrita en otro lenguaje diferente (o estás trabajando con C#), para que esos cambios se “vean” debes compilar el ensamblado al que haces referencia, sino, no se enterará de que ha habido cambios.

¡Y eso mismo es lo que ocurre con las versiones Express!

Sí, aunque tengas por un lado el IDE de Visual C# 2005 Express y por otro el de Visual Basic 2005 Express, cuando se compila el ensamblado al que has hecho la referencia, el otro IDE se da cuenta de ese cambio y te avisa de que algo ha cambiado.

¿Cómo lo hace? Ni idea, no me he puesto a “investigar”, pero es así. Y eso que en realidad a lo que estás haciendo “referencia” es al ensamblado ya compilado.
Por tanto, puedes usar esa característica incluso desde las versiones Express, por supuesto con el “valor añadido” de que en cuanto haces cambios y compilas, desde el otro IDE se da cuenta de esos cambios y te avisa, al menos si es que esos cambios que has hecho afectan al código usado.

Veamos los pasos que debes seguir para probar esto que te acabo de contar.

 

Crear un proyecto de C# y usarlo desde Visual Basic (con las versiones Express)

Nota:
Para que puedas probar esto que te voy a contar, necesitas tener tanto la versión Express de Visual C# 2005 como la de Visual Basic 2005.

Lo que haremos para probar todo esto que te he comentado será lo siguiente:

  1. Primero crearemos un proyecto del tipo Biblioteca de clases usando Visual C# 2005 Express en la que definiremos una clase pública con dos métodos estáticos (compartidos).

  2. A continuación crearemos una aplicación de Windows con Visual Basic 2005 Express desde la que crearemos una referencia a la DLL creada con Visual C#, y usaremos los dos métodos.

  3. Después modificaremos la librería de C# para añadir una propiedad de solo lectura, la que usaremos desde el proyecto de Visual Basic.
    Con esto comprobaremos que después de compilar la DLL desde VB ya podremos usar esa propiedad.

  4. A continuación le cambiaremos el nombre a esa propiedad de solo lectura, y veremos cómo al compilar nuevamente la librería, en el proyecto de Visual Basic nos avisa de que hay un error, (ya que la propiedad de antes ha cambiado de nombre y no existe).

  5. Después crearemos otro proyecto de C#, (el cual lo agregaremos a la misma solución que ya tenemos de C#), en este caso una aplicación de consola, en la que definiremos los mismos métodos que en la clase de la librería.

  6. En el proyecto de Visual Basic añadiremos también una referencia a ese nuevo proyecto de C#, para que compruebes que se pueden usar las clases definidas en un ejecutable.

Vayamos siguiendo esos pasos para que puedas ver todo lo comentado de forma más clara (espero).

 

1- Crear un nuevo proyecto con Visual C# 2005 Express

Abre el Visual C# 2005 Express, y crea un nuevo proyecto del tipo Biblioteca de clases, usa el nombre:PruebaLibreria, (es importante que le dejes ese mismo nombre, ya que lo usaremos desde la aplicación de Visual Basic).

Cámbiale el nombre del fichero de la clase que añade automáticamente (que será Class1) a PruebaCS, seguramente te preguntará si quieres cambiar también el nombre a la clase, dile que sí.

Y añade el siguiente código:

using System;
using System.Reflection;
using System.Diagnostics;

namespace PruebaLibreria
{
    public class PruebaCS
    {
        // Dos métodos estáticos para mostrar el saludo
        public static string Saludo()
        {
            return "Saludo desde la librería de C#";
        }

        public static string Saludo(string nombre)
        {
            return "Hola " + nombre + ", desde la librería de C#";
        }
    }
}

Compila el proyecto por medio de la opción Generar solución del menú Generar (también puedes pulsar la teclaF6).

 

2- Crear un nuevo proyecto con Visual Basic 2005 Express

Abre el Visual Basic 2005 Express y crea un nuevo proyecto del tipo Aplicación para Windows, el nombre no es importante, pero yo le he dado el nombre usarLibreriaDeCS.

Pulsa en My Project (doble click) que estará en la ventana de soluciones, esto te mostrará las fichas de configuración de la aplicación, selecciona Referencias y pulsa en el botón Agregar, esto te mostrará el cuadro de diálogo de agregar referencia, selecciona la ficha Examinar, y busca el directorio en el que está la DLL que has creado con C#.
Tal como ves en la figura 1, normalmente, con Visual C# 2005 Express, esa DLL estará en la carpeta Release.
Pulsa en el botón Aceptar y tendrás la referencia a la librería creada con C#.

Figura 1. Agregar referencia a la DLL creada con C#
Figura 1. Agregar referencia a la DLL creada con C#

En el formulario que tienes en el proyecto de Visual Basic, añade dos botones, dos etiquetas y una caja de textos, tal como ves en la figura 2.

Figura 2. El formulario de la aplicación de Visual Basic
Figura 2. El formulario de la aplicación de Visual Basic

Los controles tienen los nombres predeterminados, salvo la etiqueta de abajo que tiene el nombre LabelSaludo.

Añade el siguiente código al formulario:

Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) _
                Handles Button1.Click
    LabelSaludo.Text = PruebaLibreria.PruebaCS.Saludo()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) _
                Handles Button2.Click
    LabelSaludo.Text = PruebaLibreria.PruebaCS.Saludo(Me.TextBox1.Text)
End Sub

Como puedes comprobar, estamos usando los dos métodos que hemos definido en la clase de la librería de C#, que al estar compartidas (declaradas con static), podemos usarlas sin necesidad de crear una nueva instancia de esa clase, ya que solo es necesario usar el nombre de la clase, y en este caso, también usamos el espacio de nombres en el que está dicha clase. Si no quieres indicar el espacio de nombres, tendrás que añadir una importación de esta forma:

Imports PruebaLibreria

 

3- Añadir una propiedad a la clase de la librería de C#

Ahora vamos a añadir una propiedad de solo lectura al proyecto de C#, así comprobaremos que una vez que compilemos la DLL ya podremos usar esa nueva propiedad en el proyecto de Visual Basic, sin necesidad de refrescar las referencias.

Añade el siguiente código a la clase del proyecto de C#:

// Propiedad de solo lectura para mostrar la versión
// del ensamblado (la numeración de Windows)
public static string Version
{
    get
    {
        Assembly ensamblado = Assembly.GetExecutingAssembly();
        FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(ensamblado.Location);
        return fvi.FileVersion;
    }
}

Para que ese código compile bien, debes añadir también estas dos importaciones:

using System.Reflection;
using System.Diagnostics;

Compila el proyecto para que podamos usar esta propiedad desde Visual Basic.

 

4- Usar la nueva propiedad desde el proyecto de Visual Basic

Pásate al proyecto de Visual Basic, y crea el método para el evento Load del formulario (en modo diseño haz doble click en una parte vacía del formulario), al que debes añadirle el siguiente código:

Private Sub Form1_Load(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) _
                Handles MyBase.Load
    LabelSaludo.Text = "Versión del ensamblado de C#: " & PruebaLibreria.PruebaCS.Version
End Sub

Cuando escribas el punto después del nombre de la clase, te darás cuenta de que aparece la propiedadVersion, además del método Saludo.

Sí, eso es lo que debe ocurrir, pero como habrás comprobado, no has tenido que hacer nada especial, es decir, consigues el mismo “efecto” que si estuvieras usando el Visual Studio “normal”, pero con la ventaja de que estás usando las versiones gratuitas de Visual Basic y Visual C# 2005.

 

El resto de pruebas ya no te las voy a indicar tan “paso a paso”, (o casi), ya que sabrás cómo hacerlas.

 

5- Cambiar el nombre de la propiedad Version

Recuerda que ahora debes cambiarle el nombre a la propiedad que acabamos de crear en el proyecto de C#, para que en lugar de llamarse Version, se llame FileVersion.
Cuando compiles el proyecto de C#, te pasas al de Visual Basic y verás como el IDE de este último te avisa de que la propiedad Version no existe, y tendrás que cambiarle el nombre a FileVersion para poder ejecutar el proyecto.

 

6- Añadir un nuevo proyecto de C#

Lo siguiente será crear un nuevo proyecto en C#, puedes hacerlo agregando un nuevo proyecto a la solución que tienes ahora. Ese proyecto será del tipo Aplicación de consola.

Si en el menú Archivo no aparece la opción Agregar, pulsa con el botón derecho (secundario) en la solución de C#, y ahí si que aparecerá esa opción, de la que tendrás que seleccionar Nuevo proyecto.

Al añadir ese nuevo proyecto, tendrás una clase llamada Program, que contiene el método Main.
Pero esa clase NO es pública, en realidad la clase está definida sin indicar si es pública o privada, pero en C#, el ámbito predeterminado de una clase es private, a diferencia de Visual Basic que es Public, (aquí tienes los ámbitos predeterminados de VB y C#).
Por tanto, debes añadirle el modificador public a la clase Program para que puedas usar los métodos y la propiedad que usaremos.

Esos métodos y la propiedad serán los mismos que hemos usado antes en la otra clase, por tanto solo tienes que copiarlos y pegarlos en el nuevo proyecto, por ejemplo, después del método Main. No te muestro el código ya que es exactamente el mismo, y recuerda agregar las dos importaciones (using) para poder usar las clases de la propiedad FileVersion.

En ese método Main puedes usar esas propiedades, con idea de que compruebes que esa aplicación de consola se comporta como cualquier aplicación de consola, además de proporcionar los miembros públicos que tenga. Fíjate después, (cuando añadas la referencia desde Visual Basic), que el método Main no se podrá usar desde fuera, ya que no se ha definido como public.

static void Main(string[] args)
{
    // Este es un ejecutable que exporta funciones
    Console.WriteLine("Este es el saludo:");
    Console.WriteLine(Saludo());
    Console.WriteLine();
    Console.WriteLine("Esta es la versión: {0}", FileVersion);

    Console.WriteLine("\nPulsa Intro para terminar");
    Console.ReadLine();
}

Acuérdate de generar nuevamente la solución.
Aunque antes deberías cambiar el valor de la versión de ambos proyectos, para que veas claramente en la siguiente prueba que estás usando una u otra versión. La versión que debes modificar es la que está junto aVersión de archivo, no la primera que indica Versión de ensamblado, ya que el código usado en la propiedadFileVersion usa la versión del fichero, (que es la que muestra Windows en las propiedades), no la versión del ensamblado, que es la que usa el .NET para sus cosas.

 

7- Usar el nuevo proyecto desde Visual Basic

Ahora, pásate de nuevo al IDE de Visual Basic y añade una referencia al nuevo proyecto de C#, en este caso debes seleccionar el .EXE que estará en la carpeta correspondiente al nuevo proyecto.

Para usar las dos “referencias”, vamos a añadir un CheckBox al formulario, de forma que según esté seleccionado o no, se use una u otra “librería”.

El código que debe tener ahora el formulario de Visual Basic es el siguiente:

Private Sub Button1_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) _
                Handles Button1.Click
    If CheckBox1.Checked Then
        LabelSaludo.Text = pruebaLibreriaConsola.Program.Saludo()
    Else
        LabelSaludo.Text = PruebaLibreria.PruebaCS.Saludo()
    End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) _
                Handles Button2.Click
    If CheckBox1.Checked Then
        LabelSaludo.Text = pruebaLibreriaConsola.Program.Saludo(Me.TextBox1.Text)
    Else
        LabelSaludo.Text = PruebaLibreria.PruebaCS.Saludo(Me.TextBox1.Text)
    End If
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) _
                Handles MyBase.Load
    If CheckBox1.Checked Then
        LabelSaludo.Text = "Versión del ensamblado de C#: " & _
            pruebaLibreriaConsola.Program.FileVersion
    Else
        LabelSaludo.Text = "Versión del ensamblado de C#: " & _
            PruebaLibreria.PruebaCS.FileVersion
    End If
End Sub

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) _
                Handles CheckBox1.CheckedChanged
    If CheckBox1.Checked Then
        LabelSaludo.Text = "Versión del ensamblado de C#: " & _
            pruebaLibreriaConsola.Program.FileVersion
    Else
        LabelSaludo.Text = "Versión del ensamblado de C#: " & _
            PruebaLibreria.PruebaCS.FileVersion
    End If
End Sub

Como puedes comprobar, cada vez que cambies la marca del CheckBox, también se mostrará la versión de una u otra “librería”. Así sabrás cual estás usando, que en este código será las definiciones de la DLL cuando NO está seleccionado o la del EXE cuando esté con la marca (Checked).

 

Resumiendo que es gerundio

Pues esto es todo, espero que a pesar de tanto “lío”, te haya quedado claro los conceptos que te he querido explicar y que son:

  • Cómo usar código escrito en un lenguaje desde un proyecto escrito en otro lenguaje de .NET.

  • Que en Visual Studio 2005 /.NET Framework 2.0 se pueden crear referencias a ejecutables además de a librerías.

  • Que puedes usar las versiones Express casi de la misma forma que la versión “normal” de Visual Studio.

 

Espero que todo esto te sea de utilidad y que te ayude a saber cómo usar unas clases de .NET desde otro proyecto, porque debes recordar que para usar esas clases no tienes porqué hacerlo desde otro proyecto de otro lenguaje de .NET, ya que también puedes hacerlo desde el mismo lenguaje, que además es aún más fácil de todo lo que te he explicado aquí.

Fuente: http://www.elguille.info/NET/vs2005/como/usar_ensamblado_csharp_desde_visual_basic.htm

Personalizando GridView en Visual Web Developer 2005 Parte I.

Sunday, March 22nd, 2009

Introducción

En las viejas versiones de Visual Basic era prácticamente imposible el tratar de personalizar controles, por ejemplo en la 3.0 creo que la mejor solución era adquirir controles de terceras empresas y aun en la versión 4.0 era tarea titánica el intentar personalizar un control. De la versión 5.0 en adelante Microsoft presento Visual Basic Control Creation Edition y los desarrolladores tenían ampliamente la posibilidad de personalizar muchos controles o crear controles desde cero, pero por supuesto siempre existía un grado de dificultad y que a medida con la nueva aparición de nuevas versiones de Visual Basic esos grados de dificultad se han ido disipando.

Hoy en día el adaptar controles de usuarios a tareas especificas de una aplicación, es parte importante, ya que esto permite el uso de elementos propios en una aplicación, reutilización de la mayor parte del código, una integración mayor de objetos de un mismo proveedor, hay menos posibilidad que sin la utilización de controles de terceros la aplicación no tenga fallo alguno, aunque muchos controles de terceros simplifican sobre manera muchas tareas de programación que son muy complicadas de llevar a la realidad.

Con el nacimiento de Netframework 2.0 muchas tareas de programación se reducen a prácticamente unas pocas líneas de código que es lo que realmente el desarrollador cotidiano necesita, y esto equivale a decir menos complicaciones mayor productividad.

Muchos desarrolladores que conozco me han consultado la forma de como poder personalizar en control GridView o el tradicional DataGrid en una aplicación de Web que permita el ingreso de registros, actualización y/o eliminación. Esto destaca características y/o apariencias muy practicas y parecidas al Grid común y corriente que conocemos en aplicaciones de Visual Basic 2005.

Este artículo trata básicamente en proporcionarle al GridView una mejor utilidad en aplicaciones de Web escalables. En esta primera presentación veremos de manera este importante control de Web permite al usuario final obtener una facilidad de manipular datos sin costo alguno.

Primeros Pasos

En el menú de Visual Studio 2005 hacer clic donde dice nuevo proyecto Web. Luego en el asistente de plantillas de Web o proyectos, hacer clic en el icono ASP.NET Web Site, ubicar el directorio de la aplicación en el lugar donde se desee. A continuación muestro la opción de menú y el formulario del asistente:

Figura 1.0 Proyecto Web

Figura 2.0 Asistente de proyectos Web

Personalizando el GridView.

Una vez creado el proyecto procederemos a colgar en la página predeterminada el control de GridView para posteriormente personalizarlo e incorporarle los controles adecuados. A continuación especifico los pasos necesarios para proceder a colgar el control dentro de la página predeterminada:

  1. En la ventana explorador de soluciones hacer doble clic en la página predeterminada.

  2. Hacer clic en la opción diseño en la parte inferior izquierda del formulario Web.

  3. Hacer clic en el icono el cual presenta el toolbox de controles.

  4. En la sección data seleccionar el control GridView y arrastrarlo hasta el formulario Web.

  5. Hacer clic derecho sobre el control GridView y luego clic en la opción de auto formato.

  6. Seleccionar Colorful en el asistente de auto formato y luego hacer clic en aplicar y aceptar.

  7. Nuevamente hacer clic derecho sobre el control GridView y luego clic en la opción Smart Tag.

  8. Hacer clic en Property Builder.

  9. En las propiedades del control seleccionar Columns.

  10. Insertar 5 columnas de datos de tipo Template Columns.

  11. Modificar el Header Text con los siguientes titulos:

    1. Id. Empleado

    2. Nombres

    3. Apellidos

  12. Repetir el paso número #7.

  13. Hacer clic en Edit Templates.

  14. Hacer clic con el botón derecho y seleccionar el submenú Edit Templete

  15. Seleccionar la columna (0) o Id. Empleado.

  16. En la sección ItemTemplate arrastrar y soltar un control de tipo Label.

  17. Clic derecho sobre el control  y hacer clic en la opción Edit DataBinding.

  18. En la propiedad Text del control seleccionar Custom Binding.

  19. En Code Expression escribir la siguiente instrucción la cual permite vincular el campo con el control. DataBinder.Eval(Container, “DataItem.EmployeeID”). Este es el campo Id. del empleado el cual se imprimirá dentro de cada celda del GridView.

  20. Hacer clic en aceptar.

  21. En la sección FooterTemplate arrastrar un control LinkButton.

  22. Hacer clic derechos sobre el botón y modificar la propiedad Text al texto Grabar.

  23. En la propiedad CommandName poner el nombre de Insert.

  24. Repetir el paso número #14.

  25. Seleccionar la columna (1) Nombres.

  26. En la sección ItemTemplate arrastrar un control de tipo TextBox.

  27. Repetir paso número #17.

  28. Repetir paso número #18.

  29. En Code Expression escribir DataBinder.Eval(Container, “DataItem.FirstName”).

  30. Hacer clic en aceptar.

  31. Arrastrar un control de tipo TextBox a la sección de FooterTemplate.

  32. Repetir paso número #14.

  33. Seleccionar la columna (2) Apellidos.

  34. Arrastrar un control de tipo TextBox en la sección ItemTemplate.

  35. Repetir paso número #17.

  36. Repetir paso número #18.

  37. En Code Expression escribir DataBinder.Eval(Container, “DataItem.LastName”).

  38. Hacer clic en aceptar.

  39. Arrastrar un control de tipo TextBox a la sección de FooterTemplate.

  40. Clic derecho sobre el control y hacer clic en la opción End Template Editing.

GridView Personalizado

Figura 3.0 GridView Personalizado.

Los recuadros que se observan en las columnas Nombres y Apellidos son los controles TextBox, que son los que permitirán los efectos de ingresar, actualizar. El control LinkButton titulado Grabar es el que nos permitirá con algunas cuantas líneas de código insertar y visualizar de manera inmediata los registro en la base de datos. En la columna ID. Empleado no se muestra recuadro alguno ya que es un control Label el que permitirá sobre manera mostrar el ID único del empleado.

Si por alguna razón el aspecto que se observa en la figura anterior no es el mismo, esto es, la posición de los controles no aparecen tal y como se muestra, se requerirá cambiar a la vista Source del documento o formulario Web y eliminar de todos los Tag de los controles insertados la sección Style. Style permite ubicar el control en una posición predeterminada, así que se requerirá eliminar esta sección para que los controles estén en su posición original.

Cada uno de los nombres de campos insertados en los controles correspondientes, son los campos que vienen de una base de datos de SQL Server 2000 y que son enlazados con el objetivo de mostrar y manipular los registros desde el GridView.

Implementando una solución con Microsoft Visual Web Developer 2005

A continuación detallo los requerimientos necesarios para crear el proyecto, desarrollado en Visual Web Developer 2005, Edición Profesional:

  • Microsoft SQL Server 2000

  • Microsoft Visual Studio 2005

  • Microsoft Windows Xp SP 2.0

  • IIS 5.0 Instalado.

  • Computadora Petium o superior.

  • Memoria RAM 128 o superior.

  • Monitor de 15” o superior.

El código

A continuación muestro la sección del código, por el cual en esta primera entrega solo es funcional para insertar datos.

 

Imports System.Data
Imports System.Data.SqlClient
''' <summary>
''' Personalizando el Web GridView 2005.
''' Código compatible con Web DataGrid.
''' </summary>
''' <remarks></remarks>
Partial Class _Default
    Inherits System.Web.UI.Page
    Dim strConnection As String = "User ID=sa;Initial Catalog=Northwind;Data Source=SERVER"
    ''' <summary>
    ''' El procedimiento BindGridView permite cargar los datos de
    '''  la tabla empleados.
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub BindGridView()
        Dim cntDB As New SqlConnection(strConnection)
        Dim DA_Empleados As New SqlDataAdapter("SELECT employeeid," & _
        "firstname,lastname FROM employees", cntDB)
        Dim DAT_Empleados As New DataSet()

        DAT_Empleados.Clear()
        DA_Empleados.Fill(DAT_Empleados, "employees")

        DataGrid1.DataSource = DAT_Empleados
        DataGrid1.DataBind()
    End Sub
    ''' <summary>
    ''' Muestra el GridView al cargar la página.
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles Me.Load
        If Not Page.IsPostBack Then
            Call BindGridView()
        End If
    End Sub
    ''' <summary>
    ''' El método ItemCommand permite identificar los controles que 
    ''' se encuentran incrustrados
    ''' en el Web Grid personalizado.
    ''' El método FindControl permite indentificar los dos controles de
    '''  tipo TextBox que se utilizaran
    ''' con el objetivo de insertar los datos desde el Grid.
    ''' </summary>
    ''' <param name="source"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Protected Sub DataGrid1_ItemCommand(ByVal source As Object, ByVal e _
        As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.ItemCommand
        If e.CommandName = "Insert" Then
            Dim cntDB As New SqlConnection(strConnection)
            Dim tNombres As TextBox = e.Item.FindControl("txtNombres")
            Dim tApellidos As TextBox = e.Item.FindControl("txtApellidos")
            cntDB.Open()

            Dim cmdInsert As New SqlCommand("insert into employees(firstname,lastname) " & _
            "values('" & tNombres.Text & "','" & tApellidos.Text & "')", cntDB)
            cmdInsert.ExecuteNonQuery()

            cntDB.Close()
            Call BindGridView()
        End If
    End Sub
End Class

 

Explicando el código.

El procedimiento privado BindGridView permite ejecutar el WebGrid y cargar los datos desde el instante en que la página es ejecutada desde el explorador de Web. Esto es efectuada gracias al procedimiento evento Page_Load del formulario Web.

El procedimiento o método ItemCommand permite identificar que elementos del Grid son activados de manera automática o manual, esto es, al hacer clic en el hiper botón Grabar, este es identificado y ejecuta una serie de instrucciones gracias a un bloque de sentencia IF..THEN..END..IF.

El método FindControl permite identificar dentro del Grid dos controles con los nombres txtNombres y txtApellidos los cuales son definidos en dos variables del mismo tipo de clase y que posteriormente permiten enviar sus respectivos valores a la tabla de empleados de la base de datos SQL Server 2000. Esto es ejecutado gracias aun comando de tipo SqlCommand.

Finalmente se carga nuevamente el GridView con sus datos más recientes mediante la llamada del procedimiento privado BindGridView().

Conclusiones

En esta primera entrega hemos traspasado una barrera muy importante el insertar registros en un WebGrid de ASP.NET 2.0. Tal y como el modelo de los Grid de Visual Basic, hemos diseñado en funcionamiento y un poco de apariencia el WebGrid en algo más útil que usualmente se utiliza en la mayoría de aplicaciones de Web. Si recordamos un poco acerca de los Grid de Visual Basic, estos permiten el ingreso de datos en la última fila. De la misma forma hemos personalizado el WebGrid de ASP.NET.

En la segunda entrega, veremos como poder eliminar y/o modificar datos existente dentro del WebGrid. Esto permitirá sobre manera obtener un control más versátil y reutilizable en aplicaciones de Web de alto nivel y escalables.

Fuente: http://www.elguille.info/colabora/NET2006/gcuadra_GridViewPersonalizando_ParteI.htm

 

Pon Geeks.ms (o tu rss favorito) en la página de inicio de Visual Studio 2005

Sunday, March 22nd, 2009

Una característica de Visual Studio 2005 que poca gente conoce es integra un rudimentario lector rss en la página de inicio. Habitualmente apunta a un rss de noticias de Microsoft pero es configurable. Basta con ir a las opciones de configuración de Visual Studio:

Como podeís ver yo evidentemente he puesto el rss de mi sitio de noticias sobre desarrollo favorito, Geeks.ms.

Fuente: http://geeks.ms/blogs/rcorral/archive/2006/10/01/Por-Geek.ms-_2800_o-tu-rss-favorito_2900_-en-la-p_E100_gina-de-inicio-de-Visual-Studio-2005.aspx

Extensiones de VS 2005 para WSSv3: Creando Web Parts!

Sunday, March 22nd, 2009

Con las extensiones de Visual Studio para Windows Sharepoint Services 3.0 es realmente sencillo crear y desplegar Web Parts en sitios WSSv3. Partiendo de un sitio SharePoint básico, los pasos a realizar para crear un web part son los siguientes:

Creación de la Web Part.

§  Crear un nuevo proyecto de Visual Studio 2005 de tipo Sharepoint Web Part.

Tras pulsar OK, vemos como VS 2005 nos genera automáticamente un archivo WebPart1.cs con la sintaxis necesaria para crear una Wb Part en WSSv3 ( clase, referencias necesarias y archivo de claves para posteriormente firmar el assembly).

§  El siguiente paso es añadir el contenido de la clase web part. En este caso el código a añadir devuelve los documentos añadidos durante el día actual en las listas de nuestro sitio de WSSv3. Necesitaremos añadir los siguientes espacios de nombres:

 

o   Para poder utilizar la fecha de sistema de WSSv3 tendremos que añadir a nuestro fichero de clase:Microsoft.Sharepoint.Utilities.

o   System.Data, para acceder a los distintos objetos de datos de .NET.

o   System.Web.UI.WebControls, para acceder a los distintos controles web de .NET.

using System;

using System.Runtime.InteropServices;

using System.Web.UI;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Serialization;

using Microsoft.SharePoint;

using Microsoft.SharePoint.WebControls;

using Microsoft.SharePoint.WebPartPages;

using Microsoft.SharePoint.Utilities;

using System.Data;

using System.Web.UI.WebControls;

 

namespace DemoWebPart

{

    [Guid("4491608a-a805-4fa1-a7f8-c6c33388501d")]

    public class DemoWebPart : System.Web.UI.WebControls.WebParts.WebPart

    {

        protected override void Render(HtmlTextWriter writer)

        {

            //Acceso al site de WSSv3

            SPSite Site = SPControl.GetContextSite(this.Context);

            SPWeb Web=Site.OpenWeb();

            //Query para obtener los documentos añadidos hoy a WSSv3

            SPSiteDataQuery Query = new SPSiteDataQuery();

            //Fecha para comparar

            string dtFecha = SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Today);

            //Construimos la query

            Query.Query = “<OrderBy><FieldRef Name=’ID’ /></OrderBy>” +

                        “<Where><Geq><FieldRef Name=’Created’ />” +

                        “<Value Type=’DateTime’>” + dtFecha +

                        “</Value></Geq></Where>”;

            Query.ViewFields = “<FieldRef Name=’Title’ />”;

            Query.Webs = “<Webs Scope=’Recursive’ />”;

            //Mostrar la información

            DataTable tblTabla = Web.GetSiteData(Query);

            DataGrid dgrdGrid = new DataGrid();

            dgrdGrid.DataSource = tblTabla;

            //Si hay filas en la tabla, llenamos el grid.

            if (tblTabla.Rows.Count>0)

            {

                dgrdGrid.DataSource = tblTabla;

                dgrdGrid.DataBind();

                //Renderizamos el control en WSSv3

                dgrdGrid.RenderControl(writer);

            }

            else

            {

                writer.Write(“<b> Ningún ítem ha sido añadido en el día de hoy a las listas.</b>”);

            }

                    }

    }

}

Despliegue de la Web Part

Para desplegar la solución basta con hacer el deploy de la solución. Para ello en el explorador de soluciones (Solution Explorer) seleccionar la solución, pulsar el botón derecho del ratón, seleccionar Deploy Solution. Al hacer el deploy de la solución estamos realizando las siguientes operaciones:

§  Registro del assembly en la GAC del servidor de WSSv3.

 

§  Añadir el assembly como control seguro en el archivo web.config de nuestro sitio de WSSv3 (el path es C:\Inetpub\wwwroot\wss\VirtualDirectories\80).

§  Registrar el assemply dentro de la Solution Management de la administración central de WSSv3: Operations -> Solution Management.

§  Añadir la web part como una feature de WSSv3. Para ver la feature, nos vamos Sites Actions –> Site Settings y luego bajo la columna  Site Collection Administration pinchamos en la opción Site Collection Features. En la página que se abre veremos la feature correspondiente a la web part que hemos desarrollado.

§  Añadir la web part en la galería de web parts de nuestro sitio de WSSv3. Para acceder a la galería los pasos son: Site Actions -> Site Settings   y en la columna Galleries pinchar sobre webparts. En la siguiente página veremos las webparts instaladas y activadas en nuestros sitio WSSv3.

§  Además, en el path de nuestra solución (en la carpeta debug) se generan dos archivos interesantes para poder instalar la web part que hemos creado en cualquier otro sitio de WSSv3:

o   El archivo DemoWebPart.wsp que contiene la descripción de la web part que hemos creado.

o   El archivo setup.bat con los comandos necesarios para desplegar la Web Part y que realiza la misma secuencia de operaciones descritas en la operación de deploy desde VS 2005. Este fichero es el que tendremos que abrir para modificar la url del sitio de WSSv3 dónde queremos desplegar la web part.

Probando la web part.

Para probar la web aprt, nos basta con editar nuestro sitio SharePoint para añadir el WebPart a una página.  Para ello hay que abrir en la página principal de nuestro sitio WSSv3: http://localhost.  Una vez abierta la página ir a Site Actions y seleccionar Edit Page, para entrar en el modo de edición. Una vez en el modo de edición, seleccionar la zona donde se quiere añadir el Web Part, por ejemplo la izquierda (Left) y seleccionar el comando  Add a Web Part. Dentro de la ventana de Add Web Parts to Left seleccionar la Web Part que se quiere añadir (DemoWebPart) y  pulsar el botón Add, con lo que se añade el nuevo Web Part a la página.

Como habéis comprobado, crear y desplegar una Web Part en un sitio WSSv3 es realmente sencillo gracias a las extensiones de VS 2005 para WSSv3. Estas extensiones también nos dan plantillas para definir listas personalizadas, team sites, features, definiciones de sitios o cualquier otro elemento que queramos desplegar (eventos, content types, etc.). Espero que la información haya resultado interesante.

fuente: http://geeks.ms/blogs/ciin/archive/2006/12/01/extensiones-de-vs-2005-para-wssv3-creando-web-parts.aspx

Añadir el soporte de Visual Studio para Workflow Foundation a un proyecto que ya existe

Sunday, March 22nd, 2009

 

Supongamos que necesitamos añadir soporte para Workflow Foundation a un proyecto que no hemos creado usando las plantillas de proyecto para proyectos de Workflow.

Pues bien, para ello basta con abrír nuestro archivo de proyecto (tipicamente *.*proj) y en la sección PropertyGroup añadir el texto que aparece abajo en verde. A partir de este momento ya tendremos disponible el menu contextual que nos permitirá añadir worflows y actividades a nuestra proyecto (vease imagen adjunta).

<PropertyGroup>
….
<ProjectTypeGuids>{14822709-B5A1-4724-98CA-57A101D1B079};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

</PropertyGroup>

Espero que este truquito os sea útil. Si alguien se pregunta como lo he descubierto, la respuesta es usandoWinMerge para comparar un proyecto de Workflow Foundation con uno de libreria de clase normal y corriente.

Fuente: http://geeks.ms/blogs/rcorral/archive/2007/01/16/a-ntilde-adir-el-soporte-de-visual-studio-para-workflow-foundation-a-un-proyecto-ya-existe.aspx