AndorraDotNet

Comunitat d'usuaris .NET del pais dels pirineus
¿No perteneces a AndorraDotNet? ¡Regístrate y sé un miembro!
Iniciar sesión | REGÍSTRATE AQUÍ | Ayuda
en Buscar

400 Bad Request

Dímelo con flores ;-)

December 2007 - Artículos

  • ¿Ya tienes tu regalo de navidad?

    :-)

    No? Pues ya tardas!

    Estas navidades lo que se lleva, el regalo más friki entre todos los regalos no es la camiseta con equalizador, ni el lanzamisiles USB, no... Para estas navidades tenemos un regalo exclusivo y con un alto compromiso social. Se trata del CALENDARIO TÓRRIDO de MVPs de SPECTRA.

    Se venden a 12€ eurillos cada uno y todo el dinero recaudado de los que se vendan, si es que se vende alguno, se mandará a la ONG Human Care International.

    promomvps

    Podeis encontrar más información en este post del Maligno:

    http://elladodelmal.blogspot.com/2007/12/compra-ya-tu-calendario-torrido.html

    ¡Mándalo ya a tus amigo y y conocidos! Aunque viendo el resultado, a lo mejor nos filtran los antivirus... ;-)

    ** crossposting desde el blog de Lluís Franco en geeks.ms **
  • Miembros de honor de auténtico lujo

    Estamos de suerte! Menudo lujazo!

    A partir de hoy AndorraDotNet cuenta con dos colaboradores de auténtico lujo: Se trata de nada más y nada menos que Jorge Serrano y Carlos Segura. Ambos son compañeros míos dentro del programa MVP de Microsoft y unos profesionales como la copa de un pino.

    MVPLogoH

    Jorge estuvo residiendo en Andorra unos años y es sobradamente conocido en este mundo del desarrollo. Miembro de Plain Concepts, escritor de libros técnicos, colaborador habitual en revistas especializadas y unos de los más antiguos en la red (os acordáis de portalvb.com?). Sin embargo lo que me gustaría deciros es que si es grande como profesional, todavía lo es más como persona (y mira que es difícil).

    Carlos es una de las personas que más sabe de SharePoint en este mundo, y sin duda la que más sabe de todas las que conozco. Participó activamente en la creación del grupo de usuarios de Navarra y su sitio acerca de SharePoint es uno de los más visitados en todo el mundo (y no sólo de habla hispana). Es un especialista en la confección de WebParts especializadas y tiene la culpa de mi afición por esta magnífica herramienta.

    Muchas gracias a ambos! Esperamos ansiosos vuestras colaboraciones!

    Enviado Dec 17 2007, 11:38 AM por lfranco con no comments
    Archivado en: ,
  • Añadiendo un poco más de funcionalidad al WebPart

    Anteriormente:

    1 - Creando nuestro primer WebPart para Sharepoint Services 3.0

    Continuando con la serie de artículos acerca de la creación de WebParts para Sharepoint Services 3.0, el paso lógico es crear algo más que un simple WebPart que diga "Hola Mundo!" :-) Así que vamos a ponernos manos a la obra: ¿Que tal si primero identificamos a nuestro interlocutor? Si sabemos el nombre del usuario siempre podremos saludarlo y parecer así un poco más educados...

    ElSegundo

    Para realizar esto vamos a agregar una segunda clase en el proyecto anterior MisPrimerosWebParts, de modo que cada WebPart sea un poco más evolucionado que su predecesor:

       1: public class ElSegundo : WebPart
       2: {
       3:     protected override void RenderContents(HtmlTextWriter writer)
       4:     {
       5:         writer.Write("Hola {0}", this.Page.User.Identity.Name.ToString());
       6:         base.RenderContents(writer);
       7:     } 
       8: }

    Bien, aunque no hemos avanzado demasiado por lo menos es un primer paso. Aunque lo que realmente me gustaría es que el usuario pudiese personalizar el saludo y de este modo abordaremos el verdadero propósito de este artículo: La persistencia de propiedades de la clase en Sharepoint Services.

    No basta con crear una propiedad en la clase para que pueda ser persistida y representada en Sharepoint Services mediante un control PropertyGridEditorPart, ésta debe implementar una serie de atributos:

       1: Personalizable(PersonalizationScope.Shared / User) 

    Indica el ámbito de personalización del WebPart. El ámbito Shared significa que los datos de personalización se aplican a todos los usuarios y para todos los controles personalizables de una página, y que también están disponibles para guardarse en la página. Mientras que el ámbito User indica que los datos de personalización específicos del usuario, así como los datos de personalización aplicables a todos los usuarios, se cargan para todos los controles personalizables de una página. Sólo los datos de personalización específicos del usuario pueden guardarse en la página.

       1: WebBrowsable

    Indica si la propiedad designada de un control de elementos Web se muestra en un objeto PropertyGridEditorPart.

       1: WebDisplayName("Nombre de la propiedad")

    Define el nombre descriptivo de una propiedad de un control de elementos Web.

       1: WebDescription("Descripción de la propiedad")

    Define el valor de cadena que se va a utilizar como información sobre herramientas de una propiedad de un control de elementos Web.

    En nuestro caso particular vamos a crear una propiedad "Saludo" que permita almacenar el saludo preferido por el usuario, de modo que la propiedad implemente los atributos descritos anteriormente del siguiente modo:

       1: private string strSaludo = ""
       2:  
       3: [Personalizable(PersonalizationScope.Shared) ,
       4: WebBrowsable,
       5: WebDisplayName("Tipo de saludo"),
       6: WebDescription("Permite personalizar el tipo de saludo")
       7: ]
       8: public string Saludo
       9: {
      10:     get
      11:     {
      12:         if (strSaludo == String.Empty)
      13:         {
      14:             strSaludo = "Hola";
      15:         }
      16:             return strSaludo;
      17:     }
      18: set { strSaludo = value; }
      19: }
      20:  

    Ahora podremos utilizar la nueva propiedad en el método "RenderControls" para mostrar correctamente el mensaje al usuario:

       1: protected override void RenderContents(HtmlTextWriter writer)
       2: {
       3:     writer.Write("{0}, {1}", Saludo, this.Page.User.Identity.Name.ToString());
       4:     base.RenderContents(writer);
       5: }

    Y para terminar, ya que nuestro WebPart posee propiedades personalizadas, vamos a redondearlo permitiendo la exportación de éstas en forma de fichero XML (esto es sumamente sencillo, y basta con agregar una línea de código en el constructor de la clase, indicando en modo de exportación):

       1: public ElSegundo()
       2: {
       3:     ExportMode = WebPartExportMode.All;
       4: }

    Ahora si. Una vez hemos terminado, debemos volver a generar nuestro proyecto y seguir los pasos que indicábamos en el artículo anterior. Es decir: copiar el ensamblado en el servidor, añadirlo en la GAC, reiniciar IIS (de hecho sólo es necesario reiniciar los servicios de aquellos sitios de WSS 3.0 dónde se haya desplegado el WebPart, etc...).

    Una vez agregado nuestro WebPart a una página podremos observar que podemos editar sus propiedades, y que entre ellas aparece la propiedad creada anteriormente, el valor de la cual podremos modificar y Sharepoint Services se encargará de persistir su valor en la página.

    ElSegundoConfig

    En el próximo artículo mostraremos cómo acceder a una base de datos SQL Server para mostrar información, y de paso como parametrizar la ubicación del servidor (ya sabemos que los servidores a veces nunca se están quietos) y protegernos en caso de un error en tiempo de ejecución mostrando un mensaje personalizado con la excepción.

    Enviado Dec 05 2007, 05:18 PM por lfranco con no comments
    Archivado en: ,
  • Creando nuestro primer WebPart para Sharepoint Services 3.0

    Este pretende ser el primero de varios artículos dedicados a la creación de WebParts para Sharepoint Services 3.0, utilizando Visual Studio 2005 como herramienta y C# como lenguaje de desarrollo. Pero antes de empezar, quiero dar las gracias al colega MVP Carlos Segura (que sabe más que el maestro Yoda y no tiene sus orejas) por su estupendo sitio, que ha sido el culpable de mi adicción a esta estupenda herramienta de colaboración que es Sharepoint.

    Empezaremos con la creación un WebPart muy sencillo (el típico "Hola mundo!"), estableceremos los pasos a seguir para su correcta publicación en un Sharepoint, y poco a poco iremos avanzando, ampliando sus funcionalidades:

    ElPrimero 

    • Mostrando la información del usuario autentificado en un WebPart
    • Persistiendo las propiedades del WebPart en Sharepoint Services y permitiendo su exportación.
    • Extendiendo la funcionalidad para acceder a bases de datos
    • Agregando un control de excepciones para obtener información en el servidor de explotación en caso de error.
    • Comunicando con otros WebParts

    Realmente la creación y distribución de un WebPart es ahora mucho más sencillo que en versiones anteriores, ya que esta versión está construido sobre ASP.NET 2.0, con lo que se pueden aprovechar todas las nuevas características introducidas.

    Así pues para empezar a crear nuestro primer WebPart basta con iniciar un nuevo proyecto "Biblioteca de clases" con Visual Studio 2005, utilizando C# como lenguaje de desarrollo:

    NewProject

    Llamaremos a nuestro proyecto MisPrimerosWebParts, y a continuación agregaremos una referencia al ensamblado System.Web, necesario para poder acceder al espacio de nombres WebParts. Esto es de vital importancia ya que todo WebPart que deseemos crear debe heredar de la clase base WebPart.

    AddReference

    A continuación, agregaremos los espacios de nombres comentados anteriormente:

       1: using System.Web.UI; 
       2: using System.Web.UI.WebControls.WebParts; 
    Y ya podemos empezar a crear nuestra primera clase derivada de WebPart, destinada a convertirse en el primer WebPart de nuestra colección. Observar que el código resultante queda reducido a la mínima expresión:
     
       1: namespace MisPrimerosWebParts 
       2: { 
       3:     public class ElPrimero:WebPart 
       4:     { 
       5:         protected override void RenderContents(HtmlTextWriter writer) 
       6:         { 
       7:             writer.Write("Hola mundo!"); 
       8:             base.RenderContents(writer); 
       9:         } 
      10:     } 
      11: } 
    ¿Y esto es todo? Pues en lo referente a código si, eso es todo lo que vamos a codificar para este WebPart. Pero para poder ver publicado finalmente este WebPart hay que seguir cuidadosamente una serie de pasos:
    1. Firmar el ensamblado: Del mismo modo que en versiones anteriores debemos firmar el ensamblado, sin embargo esto es ahora mucho más sencillo. Basta con ir a a las propiedades del proyecto (pestaña Firma) y seleccionar que vamos a firmar el ensamblado con una clave nueva. Escribiremos el nombre de fichero que almacenará la firma, y (muy recomendado) protegeremos el archivo de clave usando una contraseña segura. De este modo al compilar la aplicación se creará el nuevo fichero generado con extensión *.pfx que podemos abrir desde Visual Studio para ver la clave que contiene. 

      SignAssembly
    2. Generar la solución (Ctrl+Shift+B) para crear el ensamblado MisPrimerosWebParts.dll y el fichero con la firma MisPrimerosWebParts.pfx (que en principio no volveremos a necesitar).
    3. Añadir el ensamblado a la Global Assembly Cache: Para poder utilizar el WebPart desde varios sitios de Sharepoint Services, vamos a instalar este ensamblado en la Global Assembly Cache (en adelante GAC). El primer paso consiste en copiar este ensamblado en una carpeta local del servidor, por ejemplo C:\MisWebParts. A continuación debemos ejecutar la utilidad de línea de comandos Gacutil.exe situada en la ubicación:
      C:\%program files%\Microsoft Visual Studio 8\SDK\v2.0\Bin

      Para ello abriremos una ventana de consola, nos situaremos en esta ubicación y agregaremos el ensamblado a la GAC de este modo: 

      Gacutil -I C:\MisWebParts\MisPrimerosWebParts.dll

      Gacutil
    4. Registrar esta clase en el web.config como un control seguro: Aunque previamente debemos conocer al public token de nuestro ensamblado, y tal vez el modo más sencillo sea visitando la carpeta dónde se encuentra la GAC (%Windows%\Assembly) y comprobando de paso que el assembly se ha instalado correctamente: 

      GAC

      Una vez disponemos del token de nuestro ensamblado, debemos modificar el fichero web.config de nuestro sitio (os recuerdo que habitualmente se encuentra en: C:\Inetpub\wwwroot\wss\VirtualDirectories\%sitio%\web.config), agregando este control en la sección "SafeControls" para posteriormente agregarlo a la colección de WebParts del site. 

      WebConfig
    5. Y por fin, la parte más esperada: vamos a agregar nuestro ensamblado a la lista de elementos web de nuestro sitio. Para ello debemos reiniciar los servicios del IIS (¡muy importante y algo de que solemos olvidarnos a menudo!), abrir la página de configuración del sitio y mostrar la lista de elementos web situada en: Configuración del sitio/Galerías/Elementos Web. Aquí encontraremos todos los WebParts disponibles para añadir a las páginas de Sharepoint Services pero sin embargo nuestro nuevo y flamante WebPart no aparece. Para que aparezca hay que añadirlo manualmente a la lista mediante la opción "Nuevo", que nos mostrará todos los elementos contenidos en los controles de la sección "SafeControls" del web.config, marcar el elemento y también la opción "¿Sobrescribir si el archivo ya existe?" (por si acaso no es la primera vez que lo añadimos), pulsamos el botón "Llenar galería" y ¡voilà!, ¡Hemos terminado!
    6. Ahora ya podemos ir al diseño de la página en la que queramos insertar el WebPart y agregarlo desde la lista de elementos disponibles. El resultado debería ser algo similar a esto: 

      WebPartElPrimero

    Bien, la primera conclusión que sacamos es que da bastante más trabajo la publicación de un WebPart que la creación propiamente dicha, no es así? Sin embargo, el resultado obtenido bien merece la pena.

    En los próximos artículos iremos extendiendo la funcionalidad de este WebPart para hacerlo más complejo, ¡hasta entonces!

    Enviado Dec 05 2007, 05:07 PM por lfranco con 1 comment(s)
    Archivado en: ,
Ofrecido por Community Server (Commercial Edition)