This Blog

Syndication

Search

Tags

Community

Email Notifications

Archives

Enlaces Recomendados

December 2008 - Artículos

MOSS: Características no soportadas en Excel Services!

Como sabéis, uno de los componentes destacados de MOSS (versión Enterprise) es Excel Services. Se trata de un servicio compartido (Shared Service Provider) que nos permite, entre otras características, visualizar en modo lectura hojas Excel (versión 2007) renderizadas en el navegador. Ahora bien, aunque Excel Services es muy potente, es importante tener claras cuales son sus limitaciones y características no soportadas a la hora de implantar este componente en nuestros clientes:

  • Hojas de cálculo con código (se incluyen hojas de cálculo con macros VBA, controles de formulario, controles de barra de herramientas, diálogos, y hojas XML).
  • Hojas de cálculo protegidas con IRM.
  • SmartTags Embebidas.
  • PivotTables basadas en rangos de consolidación múltiple.
  • Referencias externas (enlaces a otras hojas de cálculo).
  • Hojas de cálculo guardadas en modo vista fórmula.
  • Paquetes XML de expansión.
  • Mapas XML.
  • Validación de datos.
  • Tablas de consulta, listas de SharePoint, consultas web y consultas de texto.
  • Hojas de cálculo que referencias Add-Ins.
  • Hojas de cálculo que usan la función RTD().
  • Hojas de cálculo que usan protección de hoja.
  • Fotografías o clips embebidos.
  • Celdas y hojas con fotografías en background.
  • Autoformas y WordArt.
  • Anotaciones de tinta.
  • Gráficos organizacionales y diagramas.
  • Enlaces DDE.

Publicado 31/12/2008 17:24 por Juan Carlos González Martín | con no comments

Archivado en:

Liberado el Visual Studio Snippet Editor v 2.0!

Ya tenemos disponible en Codeplex una nueva versión del editor de code snippets para Visual Studio. Podéis descargaros la utilidad de este enlace. Entre las características del editor tenemos:

  • Gestión de archivos de snippets.
  • Coloreado de sintaxis básica.
  • Subrayado de reemplazos.
  • Organización de archivos drag & drop.

snippet_editor[3]

 

Finalmente, comentaros que este editor se puede utilizar para todas las versiones de Visual Studio 2005 y 2008 (incluyendo las versiones express).

Publicado 30/12/2008 21:56 por Juan Carlos González Martín | con no comments

Archivado en: ,

Modificar el comportamiento de redirección de los formularios NewForm.aspx y EditForm.aspx (I)

Este artículo forma parte de una serie de tres, donde indicaremos cual es el comportamiento de redirección de NewForm.aspx y EditForm.aspx, como modificar su comportamiento, como empaquetarlo en una feature y en una solución, y por último como registrarlo para que únicamente funcione con una lista en concreto.

En el artículo de hoy vamos a estudiar la lógica de redirección que tienen establecidos los formularios de inserción y modificación de datos por defecto: NewForm.aspx y EditForm.asp.

La situación actual es la siguiente:

  • NewForm.aspx  => Al guardar los datos => Va a la vista por defecto, en la mayoría de los casos, la página de AllItems.aspx
  • EditForm.aspx => Al guardar los datos => Va a la vista por defecto, en la mayoría de los casos, la página de AllItems.aspx

Análisis del comportamiento:

Cuando trabajamos con un formulario, la lógica que sigue para saber a qué página redirigir al usuario cuando se pulsa el botón de guardar (dependiendo del caso) es la siguiente:

  1. SPList.DefaultViewURL: Al pulsar el botón de guardar de un formulario de tipo NewForm.aspx o EditForm.aspx, si no especificamos nada más (ningún parámetro), nos redirige a la vista predeterminada, cuyo valor podríamos encontrar en el modelo de objetos a través de la propiedad SPList.DefaultViewUrl
  2. Parámetro SOURCE: En el caso de que en la URL que llama al formulario NewForm.aspx o EditForm.aspx, le especifiquemos el parámetro SOURCE, al cerrar la página, seremos redirigidos a la dirección indicada en ese parámetro.

Por ejemplo la URL: http://miempresa.es/Lists/Tareas/NewForm.aspx?RootFolder=%2FLists%2FTareas&Source=http%3A%2F%2Fmiempresa%2Ees%2FLists%2FTareas%2FAllItems%2Easpx nos llevará a la página de AllItems.aspx,

mientras qué la siguiente URL: http://miempresa.es/Lists/Tareas/NewForm.aspx?RootFolder=%2FLists%2FTareas&Source=http%3A%2F%2Fmiempresa%2Ees%2FLists%2FTareas%2FDispForm%2Easpx nos llevará a la página indicada en el parámetro Source, en este caso DispForm.aspx.

Una prueba que podéis realizar es llamar al formulario metiendo en la barra de dirección del navegador una URL, con distintos valores para el parámetro Source, y observaréis como os redirige a la dirección proporcionada por el parámetro.

Un ejemplo sería: http://miempresa.es/Lists/Tareas/EditForm.aspx?RootFolder=%2FLists%2FTareas&Source=http%3A%2F%2Fmiempresa%2Ees%2FLists%2FDispForm%2Easpx (que nos mostraría el formulario de DispForm.aspx, pero no nos mostraría ningún ítem en concreto ya que no le hemos proporcionado el parámetro ID)

Planteamiento del problema

En el caso de que nos plantearan el siguiente objetivo, lograr que:

  • NewForm.aspx  => Al guardar los datos queremos que vaya al => DispForm.aspx?ID=xx del elemento que se acaba de crear
  • EditForm.aspx?ID=xx => Al guardar los datos queremos que vaya al =>DispForm.aspx? ID=xx del elemento que se acaba de editar

Alternativas de implementación

Nos podríamos plantear las siguientes aproximaciones para resolver el problema:

Primera aproximación: Utilizando el parámetro Source:

Podríamos intentar obtener este comportamiento, utilizando el parámetro SOURCE. Sin embargo, los problemas que existen con esta aproximación son los siguientes:

  • Habría que modificar la URL llamante, que está definida en el menú desplegable “Nuevo elemento” o “Editar elemento”, para que incorporara el parametro SOURCE deseado, y no es tarea fácil.  

          Nuevo Elemento

         Editar Elemento

 

  • Para pasar de las páginas NewForm.aspx/EditForm.aspx a la página DisplayForm.aspx necesitamos conocer el ID, del elemento que queremos mostrar. En el caso de que la página origen fuera EditForm.aspx?ID=xx, se podría obtener el valor del ID de la propia URL y llegar a ponerlo en el parámetro SOURCE, pero en el caso de que la página origen fuera NewForm.aspx, el ID no se genera, ni se conoce hasta que no se crea el elemento, por lo que no sería posible ponerlo en le parámetro SOURCE de la URL llamante.

Segunda aproximación: Modificando el valor de la propiedad SPList.DefaultViewUrl:

Otra aproximación sería intentar modificar por código el valor de la propiedad SPList.DefaultViewUrl. En este caso sería necesario modificar la página para que incluyera el código necesario para cambiar el valor de esta propiedad.

Un ejemplo del código a utilizar podría ser:

        //Primero obtenemos la lista con la que vamos a trabajar
        SPSite miSiteCol = new SPSite(http://miempresa);
        SPWeb miWeb = miSiteCol.OpenWeb();
        SPList miLista = miWeb.Lists[new Guid("Introducir aqui Guid de la lista")];

        // A continuacion obtenemos la coleccion con las  vistas de esa lista
        SPViewCollection miViews = miLista.Views;

        // Seleccionamos la vista de tipo AllItems.aspx
        SPView AllItemsView = miViews["All Items"];

        // Creamos una nueva vista denominada MiNuevaVista basada en la vista AllItems.aspx 
        // y especificamos que sea la vista por defecto
        // SPView.Clone(string strNewViewName, uint iRowLimit, bool bPaged, bool bMakeViewDefault)
        SPView nuevaView = AllItemsView.Clone("MiNuevaVista",10,true,true);

Este código es válido si queremos cambiar la vista por defecto a la que van los formularios cuando les damos a guardar, pero seguimos teniendo dos problemas.

El primero, consiste en que las vistas que podemos crear y añadir a la coleccion de vistas mediante SPView.Clone() o SPViewCollection.Add(), en principio parece que deben de ser del tipo SPView (definidas mediante CAML y interpretadas por la ListViewWebPart), por lo que parece dificil incluir mediante esos métodos páginas como DispForm.aspx.

Aunque fuera posible solventar el problema anterior, sin embargo el mayor problema estriba al igual que en la primera aproximación (el del parámetro SOURCE), en que para poder redirigir a la página con la información del ítem DispForm.aspx?ID=xx, es necesario conocer su ID y proporcionárselo. En el caso de la transición desde NewForm.aspx a DispForm.aspx, la página NewForm.aspx, desconoce que ID, le va a asignar el sistema al ítem, hasta que éste no es guardado.

Tercera aproximación: Mediante código JavaScript

Otra posible solución sería intentar realizar la redirección mediante código JavaScript, pero seguimos teniendo el mismo problema que en el caso anterior ya que en el caso de la página NewForm.aspx, desconocemos el ID que el sistema va asignar al ítem hasta que este no es guardado.

Cuarta aproximación: Mediante un manejador de eventos

Por último, la solución que encontramos más recomendable para este problema consiste en implementar un manejador de eventos, que capture el evento síncrono de ItemAdding (cuando se quiere añadir un ítem a la lista), realice la adición de este ítem a la lista y por último realice la redirección a una determinada dirección, pero conociendo ya el ID que se le ha asignado a este ítem.

Para ello será necesario:

  1. Crear una clase que herede de la clase SPItemEventReceiver
  2. Sobreescribir los métodos ItemAdding y ItemUpdating de dicha clase.
    • Obtener la referencia a la lista y al SPListItem con el que se va a trabajar
    • Deshabilitar el disparo de nuevos eventos
    • Añadir/actualizar el item en la lista
    • Volver a habilitar el disparo de eventos
    • Realizar la redirección
    • Tratar las excepciones.

En el siguiente artículo de esta serie mostraremos y explicaremos con un ejemplo de código, como implementar esta funcionalidad.

Publicado 30/12/2008 18:57 por Angel Acha Lizama | 4 comment(s)

Archivado en: ,,

Búsquedas en MOSS: Query Reporting Tool!

Una de las características incluida en las funcionalidades de búsqueda de MOSS es el Query Reporting Tool. Se trata de una herramienta que nos permite obtener un vistazo global de los resultados de búsqueda a lo largo de todo el Shared Service Provider (SSP), así como evaluar que ámbitos de búsqueda son utilizados de forma frecuente por los usuarios.

Hay dos tipos de informes en el Query Reporting Tool. El primero es el Search Queries Report, que incluye gráficos de barras básicos y contiene información sobre:

  • Consultas en los últimos 30 días.
  • Consultas en los últimos 12 meses.
  • Consultas top originadas en los diferentes site collections en los últimos 30 días.
  • Consultas por ámbito (Scope) en los últimos 30 días.
  • Consultas top en los últimos 30 días.
image image image

image

Por supuesto, estos informes son exportables (formatos Excel y PDF). El segundo tipo de informes tiene que ver con los resultados de búsqueda en cuanto a:

  • Páginas de destino más relevantes (top) aparecidas en los resultados de las búsquedas.
  • Consultas que no han devuelto resultados.
image image image

Y hasta aquí llega lo que os quería contar sobre la Query Reporting Tool de MOSS.

Publicado 29/12/2008 18:57 por Juan Carlos González Martín | con no comments

Archivado en:

Windows 7 Beta: Una revisión a fondo!

Hace unos días os comenté que uno de los mejores blogs para estar al día de Windows 7, entre otras muchas cosas, es el blog de Paul Thurrott. Pues bien, merece la pena que os deis una vuelta por sus dos últimos posts en torno a la revisión que ha realizado sobre la beta de Windows 7, a la que podremos hincar el diente el mes que viene (casi como regalo de reyes). Paul ha realizado un análisis en detalle en dos posts realmente descriptivos:

Como veréis en el análisis de Paul, por fin en esta beta aparecen todas las grandes novedades que se han comentado en torno a Windows 7…ya tengo ganas de meterle mano a la beta.

 

win7_beta_review_02

Publicado 28/12/2008 13:00 por Juan Carlos González Martín | 1 comment(s)

Archivado en:

Lo nuevo en el BCL en .NET Framework 4.0!

Hacía tiempo que tenía en el tintero escribir este post en torno a algunas de las novedades que aparecen en la BCL (Base Class Library) de la primera CTP de .NET Framework 4.0…por cierto, parece que en breve tendremos una nueva CTP tanto de .NET Framework 4.0 como de Visual Studio 2010. Comencemos con algunas de las novedades de la actual CTP de .NET Framework 4.0:

  • Code Contracts, disponibles a través de System.Diagnostics.Conctracts, proporciona una manera agnóstica al lenguaje de expresar asunciones de código en programas .NET. Los contratos pueden tomar la forma de pre-condiciones, post-condiciones y objetos invariants actuando como documentación verificada de nuestras APIs internas y externas. Estos contratos se usan para mejorar el testeo a través de verificación del runtime, habilitar la verificación de contratos estáticos, y la generación de documentación. Más información sobre esta novedad en este enlace de Microsoft Research.
  • Parallel Extensions, se ha añadido el soporte de PLINQ (Parallel LINQ) a la BCL de .NET Framework 4.o, estructuras de coordinación de datos, y la Task Parallel Library (TPL). Se ha incluido una optimización del algoritmo de planificación de tareas ThreadPool, la clase estática Parallel, estructuras de datos como LazyInit<T>, CountdownEvent, Barrier, SemaphoreSlim, SpinLock, SpinWait, …Más información en Parallel Programming for Managed Developers with the Next Version of Microsoft Visual Studio.
  • BigInteger, disponible a través de System.Numerics.BigInteger, se trata de un nuevo tipo de datos entero con precisión arbitraria y alto rendimiento. Soporta todas las operaciones estándar para tipos enteros, incluyendo manipulación de bits. Se puede usar desde cualquier lenguaje .NET, así como algunos de los nuevos como F# y IronPython para .NET.
  • Memory Mapped Files, disponible a través de System.IO.MemoryFiles, expone la funcionalidad de mapeado de memoria disponible en Windows como una API manejada de primer clase. Los archivos mapeados en memoria se pueden usar para editar de manera eficiente grandes archivos, así como crear memoria compartida para comunicación entre procesos. Además, se ha creado System.IO.UnmanagedMemoryAccesor para habilitar acceso aleatorio a memoria no manejada.
  • ResourceManager Improvements, disponible en System.Resources, se ha mejorado el gestor de recursos para facilitar la búsqueda de archivos de recursos independientemente de la cultura actual de la interfaz de usuario.
  • Compression Improvements, se han mejorado los algoritmos de comprensión disponibles en System.IO.Compression a través de unos mejores ratios de comprensión y posibilitando comprimir streams de más de 4 GB.
  • String Security Changes, las sobrecargas por defecto de algunos métodos  de System.String (StartsWith, EndsWith, IndexOf y LastIndexOf) se han cambiado para que sean agnósticos a la cultura por defecto. Además, se ha modificado ToUpper y ToLower para usar la cultura invariant en lugar de la actual.

Además de todas estas novedades, el equipo del BCL está pensando en otra serie de novedades tal y como podréis leer en este enlace.

Publicado 28/12/2008 12:10 por Juan Carlos González Martín | 4 comment(s)

Archivado en:

WSS 3.0 & MOSS: Planning de soluciones SharePoint (II)!

Continuando con los aspectos a tener en cuenta a la hora de hacer el planning de soluciones de SharePoint, es necesario tener en cuenta que en los proyectos de SharePoint como en los de otro tipo vamos a tener una serie de especificaciones funcionales que tenemos que saber interpretar. Estas especificaciones funcionales se derivan de los requisitos de negocio que a su vez se componen de requisitos funcionales y no funcionales. Los primeros son los que se obtienen a partir de lo que el cliente necesita para su negocio. Los segundos son los que están implícitos en la funcionalidad demandada. Toda estos requisitos se determinan a partir de las planning worksheets para MOSS.

Requisitos funcionales

Como sabéis, una función viene a ser aquel aspecto de una solución con la que el usuario interactuará de manera segura. Esto nos lleva a que los requisitos funcionales para una aplicación MOSS incluyan aspectos como:

  • Funciones de negocio.
  • Interfaces de usuario.
  • Interfaces de programación.
  • Capacidades.
  • Interacción.
  • Apariencia.
  • Interoperabilidad.
  • Navegación.
  • Arquitectura de contenidos.

Muchos de estos requisitos aplican a varios tipos de aplicaciones y no son exclusivos de soluciones MOSS. Sin embargo, hay uno especial que aplica a SharePoint y que no es típica de las aplicaciones web tradicionales: la arquitectura de contenidos. Este requisito implica que los stakeholder claves y el equipo de diseño determinen que tipos de contenidos se podrían almacenara en cada uno de los siguientes niveles propios de SharePoint:

  • Colección de sitios.
  • Sitio.
  • Página.
  • Lista y biblioteca de documentos.
  • carpetas y subcarpetas en listas y bibliotecas de documentos.
  • Documentos.
  • Elementos de lista.

Es importante destacar que es fundamental un buen diseño de la estructura de contenidos ya que esta afecta a la eficiencia de los trabajadores, la gestión de la solución, la escalabilidad, la seguridad, la funcionalidad de contenidos y la funcionalidad de búsquedas.

Requisitos No-Funcionales

Los requisitos no-funcionales aparecen normalmente bajo los requisitos tecnológicos o los requisitos de negocio. Por ejemplo, para una solución de negocio crítica es clave asegurar durante el diseño continuidad en los procesos de negocio. Por otra parte, normalmente los usuarios de negocio van a querer que la aplicación esté siempre disponible. Por lo tanto, nuestra misión como diseñadores de la solución pasa por identificar el nivel de continuidad de negocio que requieren los usuarios. ¿Cómo lo determinamos? Pues preguntando a estos usuarios e identificando a partir de sus respuestas agregadas que infraestructura y plataforma puede soportar los requisitos de disponibilidad de negocio solicitada.

Entre los requisitos no-funcionales que nos encontraremos en el planning de soluciones SharePoint tenemos:

  • Seguridad.
  • Gobernanza.
  • Niveles de servicio.
  • Continuidad de negocio.
  • Capacidad.
  • Rendimiento.
  • Integridad de datos.
  • Help Desk.
  • Mantenimiento.

De esta lista, es destacable el requisito de seguridad puesto que en SharePoint vamos a tener usuarios con acceso remoto, acceso desde dispositivos móviles, ....lo que implicará la aparición de issues relacionados con autenticación y acceso a la solución. Y hasta aquí llega este segundo post sobre planning de soluciones SharePoint.

Publicado 26/12/2008 21:59 por Juan Carlos González Martín | 1 comment(s)

Archivado en: ,

Un control interesante y gratuito para aplicaciones ASP.NET: FreeTextBox!

Seguramente muchas veces os habréis encontrado con la necesidad de poder utilizar un control de tipo Rich Text Box en vuestras aplicaciones ASP.NET. Pues bien. hasta ahora Visual Studio en sus distintas versiones no ha incluido un control de estas características en la toolbox de proyectos web. Sin embargo, existe un control gratuito en la red que nos da esta funcionalidad y que podemos utilizar en nuestras aplicaciones: FreeTextBox.

image

Podéis ver una demo live de este control en este enlace.

Publicado 25/12/2008 19:54 por Juan Carlos González Martín | 2 comment(s)

Archivado en:

SSRS 2008: Algunos WhitePapers (I)!

El equipo de SQL Server Reporting Services (SSRS) ha anunciado recientemente la disponibilidad de una serie de Whitepapers relacionados con algunas de las novedades aparecidas con SSRS 2008:

Finalmente, y también por cortesía del equipo de SSR 2008, aquí os dejo el enlace a todos los whitepapers sobre SQL Server 2008.

logo-header-sql08-dg

Publicado 24/12/2008 20:48 por Juan Carlos González Martín | con no comments

WebDAV y SharePoint!

El explorador de Windows proporciona un mecanismo de conexión con bibliotecas de SharePoint a través del protocolo WebDAV (Web Distributed Authoring and Versioning). Este protocolo también se usa en la vista de explorador que tenemos en cualquier biblioteca de documentos. La plataforma SharePoint 2007 soporta de manera nativa WebDAV, lo que permite visualizar y trabajar con documentos de bibliotecas de documentos como si estuviéramos trabajando con carpetas del sistema de ficheros.

La forma más sencilla de utilizar WebDAV consiste en utilizar la opción Open With Windows Explorer del menú de acciones de una biblioteca de documentos de SharePoint. De este modo, se abrirá el explorador de Windows y tendremos acceso al contenido de la biblioteca de documentos, pero fuera del contexto de Internet Explorer.

image image

Además de poder acceder a los contenidos de una biblioteca de documentos de la forma anterior, podremos comprobar como en el explorador de Windows aparece bajo My Network Places un acceso directo a nuestras bibliotecas de SharePoint:

image

Para añadir un acceso directo de manera manual, tendremos que seguir los siguientes pasos:

  • Abrimos el explorador de Windows, y hacemos click sobre My Network Places.
  • Hacemos doble click sobre Add Network Place.
  • Pulsamos Next.
  • Seleccionamos la opción Choose another network location y pulsamos Next.
image image image
  • Especificamos la url de la biblioteca de documentos que queremos añadir y pulsamos Next.
  • Especificamos el nombre del network palce.
  • A continuación pulsamos Finish.
image image image

De este modo, tendremos accesible el contenido de la biblioteca de documentos:

image

Además de crear accesos directos bajo My Network Places, podemos usar WebDAV para mapear una carpeta de red a una biblioteca de documentos. Para mapear una carpeta de red a una biblioteca de documentos basta con seguir los siguientes pasos:

  • Abrimos el explorador de Windows.
  • Hacemos click sobre Tools y luego Map Network Drive.
  • Seleccionamos una letra para la carpeta de red.
  • Especificamos el path de la biblioteca de documentos: \\nombre_servidor\nombre_sitio\biblioteca
  • Pulsamos Finish.

Y hasta aquí llega lo que os quería contar sobre SharePoint y WebDAV. Espero que el post os haya resultado interesante.

Publicado 24/12/2008 0:39 por Juan Carlos González Martín | 2 comment(s)

Archivado en: ,

Microsoft Search Server 2008 Express: Vídeos demostrativos!

Como sabéis, Microsoft Search Server 2008 Express permite dotar a soluciones de WSS 3.0 de potentes capacidades de búsqueda no presentes out-of-the-box y sin coste añadido, siendo fácilmente instalable, administrable y usable tal y como demuestran una serie de vídeos cortos demostrativos que Microsoft ha creado para ayudarnos en la configuración y uso de Microsoft Search Server 200 Express:

Después de ver estos vídeos, seguro que más de uno se lanzará a probar el producto para conocer más detalles del mismo. Más enlaces sobre Microsoft Search Server Express 2008:

Publicado 23/12/2008 3:41 por Juan Carlos González Martín | con no comments

¿Cómo extender la funcionalidad de las webparts proporcionadas por SharePoint?

Muchas veces cuando estamos desarrollando en SharePoint, nos encontramos que la funcionalidad proporcionada por las webparts disponibles por defecto en SharePoint, no alcanza a cubrir toda la funcionalidad que desearíamos o que nos viene impuesta por los requisitos del proyecto.

En estos casos, una alternativa que se nos plantea es extender la funcionalidad de estas webparts, para dar respuesta a las nuevas necesidades que deseamos cubrir. Para llevar a cabo esta ampliación de la funcionalidad, en principio podemos plantearnos por ejemplo una de las siguientes opciones:

  • Crear una webpart, que herede de la clase de webpart cuya funcionalidad queremos ampliar (en el caso de que la definción de la clase nos lo permita, porque no esta sellada o "sealed") y sobreescribir aquellos métodos y propiedades que deseamos modificar.
  • Crear una webpart, que incluya la webpart cuya funcionalidad queremos utilizar como si fuera un control de servidor más y añadir la lógica que deseamos implementar.

En este post, nos vamos a centrar en el segundo caso, y desarrollaremos dos pruebas de concepto, donde explicaremos como ampliar la funcionalidad de dos webparts proporcionadas por defecto en una instalación de Windows SharePoint Services v3 (WSS) y de MOSS respectivamente.

Extender la PageViewerWebPart

En el primer caso, estudiaremos como ampliar la funcionalidad de la webpart PageViewerWebPart. Esta webpart proporcionada con WSS v3, permite mostrar contenido de una página web enlazada, de una carpeta o de un fichero. Para que la webpart funcione correctamente, es necesario que  bien en tiempo de diseño o en tiempo de ejecución (mediante la configuración de la webpart), indiquemos la localización y tipo de recurso (página web, carpeta o fichero) que deseamos mostrar.

Por ejemplo, un posible requisito que podríamos encontrarnos podría ser el que fuera posible mostrar una carpeta compartida distinta en función del usuario que estuviera conectado en cada momento. Por ejemplo, si en un determinado momento esta conectado Juan, mostrar en esa webpart el contenido de la carpeta \\miservidor\juan y si en otro momento esta conectado Angel, que mostrara el contenido de \\miservidor\angel.

Esta funcionalidad podemos obtenerla, abriendo el panel de configuración de la webpart y cambiando mediante la interfaz de usuario, el valor de la propiedad Link (ContentLink), pero no es posible realizarlo de forma dinámica en función del usuario conectado, con la funcionalidad proporcionada por defecto con esta webpart.

 PageViewerWebPart

Para añadir esta funcionalidad vamos a desarrollar nuestra propia webpart, de forma que extienda la funcionalidad de la PageViewerWebPart, para lo que seguiremos los siguientes pasos:

  • Crear una webpart nueva que herede de la clase System.Web.UI.WebControls.WebParts.WebPart

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

  • Añadir la webpart PageViewerWebPart como un control

        PageViewerWebPart pvWebPart;

  • Modificar el método CreateChildControls de nuestra webpart, para añadir la lógica de configuración del control PageViewerWebPart (en especial la propiedad PageViewerWebPart.ContentLink) y añadirlo a la colección de controles de la misma.

       protected override void CreateChildControls()
        {
            // Crear una instancia de la PageViewerWebPart
            pvWebPart = new PageViewerWebPart();

            // Obtener el usuario actual
            SPUser usuario = SPContext.Current.Web.CurrentUser;
            String UserLoginName = usuario.LoginName;
            String LoginName = UserLoginName.Substring(UserLoginName.LastIndexOf("\\") + 1);

            // Establecer la ruta
            path = @"\\miservidor\";
            String path2 = path + LoginName;

            // Configurar y añadir control a nuestra webpart
            pvWebPart.ContentLink = path2;
            this.Controls.Add(pvWebPart);
        }


Código completo

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Security.Principal;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;

namespace CIIN.WebParts
{
    [Guid("2fdb9fa1-5571-4bff-b2f3-71ca7cfc6265")]
    public class CIINPageViewerWebPart : System.Web.UI.WebControls.WebParts.WebPart
    {
        PageViewerWebPart pvWebPart;
        String path = null;

        protected override void CreateChildControls()
        {
            // Crear una instancia de la PageViewerWebPart
            pvWebPart = new PageViewerWebPart();

            // Obtener el usuario actual
            SPUser usuario = SPContext.Current.Web.CurrentUser;
            String UserLoginName = usuario.LoginName;
            String LoginName = UserLoginName.Substring(UserLoginName.LastIndexOf("\\") + 1);

            // Establecer la ruta
            path = @"\\miservidor\";
            String path2 = path + LoginName;

            // Configurar y añadir control a nuestra webpart
            pvWebPart.ContentLink = path2;
            this.Controls.Add(pvWebPart);
        }
    }
}

De esta forma hemos creado una webpart que haciendo uso de la lógica proporcionada por PageViewerWebPart amplia su funcionalidad hasta lograr cubrir los requisitos que andabamos buscando.

 PageViewerWebPart Modificado

Extender las webparts de OWA

En el segundo caso, estudiaremos como ampliar la funcionalidad de la familia de webparts de OWA (OWAPart, OWACalendarPart, OWAContactsPart, OWAInboxPart, OWATaskPart) que vienen incluidas con MOSS y que permiten accerder a un buzón de correo Exchange utilizando la tecnología de Outlook Web Access (OWA).

Por ejemplo, un posible requisito que podríamos encontrarnos podría ser el que fuera posible mostrar los datos de los diferentes buzones que tengamos creados en el buzón de correo de Exchange, en respuesta a un valor establecido por el usuario en tiempo de ejecución.

Esta funcionalidad se puede lograr utilizando la webpart OWAPart, abriendo su panel de configuración y cambiando el valor de la propiedad Exchange Folder Name (ExchangeFolderName), pero no es posible realizarlo de forma dinámica en función de un valor elegido por el usuario en tiempo de ejecución, con la funcionalidad proporcionada por defecto con esta webpart.

 OWAPart

Para lograr añadir esta funcionalidad, vamos a desarrollar nuestra propia webpart y seguir los siguientes pasos:

  • Crear una webpart nueva que herede de la clase System.Web.UI.WebControls.WebParts.WebPart

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

  • Añadir la webpart OWAWebPart como un control  y añadir una lista desplegable  donde se mostrarán las distintas carpetas de nuestro buzón a las que queremos dar acceso a través de la webpart

          OWAPart owapart;
          DropDownList opcion;

  • Modificar el método CreateChildControls de nuestra webpart, para añadir la lógica de configuración del control OWAPart y de la lista desplegable, y añadirlos a la colección de controles de la misma.

        protected override void CreateChildControls()
        {
            // Crear una instancia de la OWAPart y configurar algunas de sus propiedades
            owaPart = new OWAPart();
            ...........    

            // Crear una lista desplegable y establecer las diferentes carpetas a las que queremos acceder
            opcion = new DropDownList();
            opcion.Items.Add("Bandeja de entrada");
            ...........

            // Configurar el manejador de eventos y comportamiento de Postback de la lista desplegable
            opcion.AutoPostBack = true;
            opcion.SelectedIndexChanged += new EventHandler(opcion_SelectedIndexChanged);

            // Añadir la lista desplegable y el control OWA a nuestra webpart
            this.Controls.Add(opcion);
            this.Controls.Add(owaPart);
        }


  • Añadir el código del manejador de eventos de la lista desplegable para que apunte a la carpeta de exchange que el usuario seleccione en la lista desplegable (Bandeja de entrada, Bandeja de Salida, Calendario, Tareas, Contactos, ....), de forma que modifique  el valor de la propiedad OWAPart.ExchangeFolderName en función del valor seleccionado.

        // Manejador de evento que cambia la carpeta a la que apunta la webpart en funcion de la seleccionada
        void opcion_SelectedIndexChanged(object sender, EventArgs e)
        {
            owaPart.ExchangeFolderName = opcion.SelectedItem.Text;
        }

Código completo

using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Security.Principal;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using Microsoft.SharePoint.Portal.WebControls;

namespace CIIN.WebParts
{
    [Guid("2fdb9fa1-5571-4bff-b2f3-71ca7cfc6266")]
    public class CIINOWAPart : System.Web.UI.WebControls.WebParts.WebPart
    {
        OWAPart owaPart;
        DropDownList opcion;

        protected override void CreateChildControls()
        {
            // Crear una instancia de la OWAPart y configurar algunas de sus propiedades
            owaPart = new OWAPart();
            owaPart.MailboxName = "mibuzon@ejemplo.es";
            owaPart.OWAServerAddressRoot = "http://miservidorexchange.es/exchange";
            owaPart.ExchangeFolderName = "Calendario";            

            // Crear una lista desplegable y establecer las diferentes carpetas a las que queremos acceder
            opcion = new DropDownList();
            opcion.Items.Add("Bandeja de entrada");
            opcion.Items.Add("Bandeja de salida");
            opcion.Items.Add("Elementos enviados");
            opcion.Items.Add("Calendario");
            opcion.Items.Add("Tareas");
            opcion.Items.Add("Contactos");
            opcion.Items.Add("Borradores");

            // Configurar el manejador de eventos y comportamiento de Postback de la lista desplegable
            opcion.AutoPostBack = true;
            opcion.SelectedIndexChanged += new EventHandler(opcion_SelectedIndexChanged);

            // Añadir la lista desplegable y el control OWA a nuestra webpart
            this.Controls.Add(opcion);
            this.Controls.Add(owaPart);
        }

        // Manejador de evento que cambia la carpeta a la que apunta la webpart en funcion de la seleccionada
        void opcion_SelectedIndexChanged(object sender, EventArgs e)
        {
            owaPart.ExchangeFolderName = opcion.SelectedItem.Text;
        }
    }
}

De esta forma hemos creado una webpart que haciendo uso de la lógica proporcionada por la OWAPart amplia su funcionalidad hasta lograr cubrir los requisitos que andabamos buscando.

 OWAPart Modificado

Bueno, espero que este post os sea de utilidad y desearos a todos una ¡Feliz Navidad!

Publicado 22/12/2008 19:02 por Angel Acha Lizama | 1 comment(s)

Archivado en: ,

WSS 3.0 & MOSS: List Web Part for Microsoft Dynamics CRM 4.0!

El equipo de Microsoft Dynamics CRM ha anunciado la liberación de la List Web Part for Microsoft Dynamics CRM 4.0 para WSS 3.0 SP1 y MOSS 2007 SP1. Esta web part, de uso grautito, permite mostrar datos del CRM en páginas de SharePoint, y todas las mejoras introducidas con respecto a la versión previa las podéis encontrar en el blog del equipo de Microsoft Dynamics CRM.

webpart_CRM

Publicado 21/12/2008 23:52 por Juan Carlos González Martín | con no comments

Ja.NET: Java Development Tools for .NET

Está claro que la web está llena de sorpresas, y seguro que esta a más de uno le sorprende…yo desde luego me he quedado sorprendido por esta iniciativa, aunque también la veo bastante lógica…y de que sorpresa estamos hablando? Pues de Ja.NET o lo que es lo mismo, un nuevo sitio de la comunidad dedicado a habilitar Java sobre .NET como entorno de primera clase para el desarrollo y ejecución de aplicaciones. Como se comenta en la página de Ja.NET,  la visión de esta iniciativa es la de Establecer una comunidad de interés, junto con una conjunto de proyectos enfocados en generar las herramientas y middleware requeridos para aprovechar las enormes inversiones que existen hoy en día en software Java sobre plataforma .NET.

image

El primer proyecto en el que se han embarcado en Ja.NET es el desarrollo del Java 5 JDK para .NET, denominado Ja.NET SE. El proyecto ya se encuentra en sus primeras fases de desarrollo, y ya se pueden descargar y probar las primeras builds.

Publicado 20/12/2008 11:18 por Juan Carlos González Martín | 1 comment(s)

Archivado en: ,

ADO.NET Entity Framework: Actualizaciones en la documentación!

Microsoft acaba de realizar una serie de actualizaciones de la documentación de ADO.NET Entity Framework (ADO.NET EF) enfocadas a resolver preguntas frecuentes en el trabajo con entity keys, edición manual de edmx y otros aspectos:

Publicado 19/12/2008 23:38 por Juan Carlos González Martín | 2 comment(s)

WSS 3.0 & Windows Small Business Server 2003!

En uno de los últimos posts que he escrito sobre SharePoint, me preguntaban si es posible instalar Windows SharePoint Services 3.0 (WSS 3.0) en un máquina en la que tengamos Windows Small Business Server 2003 (SBS 2003). Lógicamente, aunque intuía que si se puede, decidí indagar un poco en la red sobre el tema y rápidamente encontré varios recursos en los que se aborda este tema y en los que se explica los pasos para instalar WSS 3.0 sobre SBS 2003:

Para completar el post, os dejo un par de vídeos que he localizado en YouTube sobre WSS 3.0 y SBS 2003:

   

Por lo tanto, para correr WSS 3.0 sobre SBS 3.0, basta con qué sigamos los pasos comentados en los enlaces anteriores. De forma resumida, los pasos serían:

Publicado 18/12/2008 21:49 por Juan Carlos González Martín | 2 comment(s)

Archivado en: ,

WSS 3.0 & MOSS: December Cumulative Update!

El equipo de SharePoint acaba de anunciar en su blog la disponibilidad del December Cumulative Update para WSS 3.0 & MOSS. Además, se especifican cuales son los pasos lógicos para la instalación de este update:

  1. Windows SharePoint Services 3.0 Service Pack 1.
  2. The 2007 Microsoft Office Servers Service Pack 1.
  3. December Cumulative Update for Windows SharePoint Services 3.0.
  4. December Cumulative Update for Microsoft Office Servers.

Después de aplicar estas updates es necesario ejecutar el SharePoint Products and Technologies Configuration Wizar en cada servidor de la granja. La nueva versión de las BD’s de contenidos tras aplicar estas actualizaciones es la 12.0.0.6335.

Enlaces de interés:

Publicado 17/12/2008 23:28 por Juan Carlos González Martín | con no comments

Archivado en: ,

WSS 3.0 & MOSS: Asignación de Worker Processes adicionales a un Application Pool!

Una forma muy sencilla que nos da SharePoint para añadir resilence y mejorar el rendimiento de un Application Pool consiste en crear worker processes adicionales asociados a dicho application pool. Todas las Web Application y los sitios asociados se beneficiarán de esta disponibilidad adicional de recursos. En IIS 6.0, una configuración de Application Pool soportado por múltiples worker processes se conoce como jardín web (Web Garden). Crear worker processes adicionales supone en la práctica la creación de procesos w3wp.exe adicionales ejecutándose en el sistema operativo.

image

Para crear un jardín web y comprobar el efecto sobre los procesos w3wp.exe seguiremos los siguientes pasos:

  • Abrimos el Internet Information Services Manager desde las herramientas administrativas de la máquina de SharePoint donde queremos crear worker processes adionales.
  • Expandimos la sección Application Pools. Hacemos clic con el botón derecho del ratón y pulsamos la opción Properties de una de las aplicaciones web.
  • Seleccionamos la pestaña Performance, y en la sección Web Garden especificamos un valor 4 para Maximum Number of Worker Processes.
image image
  • Pulsamos Apply y luego OK.
  • Hacemos un IISRESET desde la interfaz de comandos.

Si ahora abrimos el Task Manager, podremos comprobar que si hay múltiples conexiones para la web application que hemos configurado, se lanzarán un máximo de 4 worker processes para atender las peticiones.

 image

Y hasta aquí llega este post sobre como añadir worker processes adicionales a una web application de SharePoint. Espero que el pos os haya resultado interesante.

Publicado 17/12/2008 23:01 por Juan Carlos González Martín | 4 comment(s)

Archivado en: ,

Microsoft P&P: Versión definitiva del libro Application Architecture Guide 2.0!

Desde ayer tenemos disponible para descarga en codeplex la versión definitiva del libro Application Architecture Guide 2.0. Como sabéis, esta es la guía de arquitectura es el resultado del trabajo de varios equipos de producto de Microsoft, de expertos en la materia, de MVPs y por supuesto de clientes. Su meta es ayudar a los arquitectos de soluciones y desarrolladores a aprovechar al máximo todo lo que la plataforma Microsoft puede dar para el desarrollo de software.

AppARch2_0_small

 

Podéis descargaros la guía de este enlace. En cuanto a los principales cambios con respecto a la beta2 del libro, simplemente son los siguientes:

  • Scott Guthrie ha añadido un prólogo al libro.
  • Se ha incorporado el feedback de los revisores internos y externos.
  • Se han revisado y completado las diferentes recomendaciones que se hace en la guía.

Finalmente, son destacables los siguientes aspectos de la guía:

  • Architecture Meta Frame (AMF), que integra escenarios, tipos de aplicaciones, estilos de arquitecturas y un arco arquitectónico en el que encuadrar las aplicaciones a crear.

ArchitectureMetaFrame_2[3]

  • Los escenarios clave de uso de la guía son:
    • Elegir la arquitectura correcta para las aplicaciones.
    • Elegir la tecnología correcta.
    • Elegir las alternativas más adecuadas en decisiones claves de ingeniería.
    • Mapear las estrategias y patrones adecuados.
    • ...

Publicado 16/12/2008 20:42 por Juan Carlos González Martín | 1 comment(s)

Suges & CIIN: Material Webcast Indexación y búsquedas en SharePoint

Como os prometimos el día de la celebración del primer Webcast que organiza Suges sobre indexación y Búsquedas en SharePoint, aquí os pasamos el material utilizados en el mismo.

Webcast:

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=es-ES&EventID=1032397920&CountryCode=ES

Presentación:

http://www.suges.es/Presentaciones/Indexacion%20y%20busquedas%20en%20SharePoint.pptx

También os dejo el link donde os podéis descargar el producto gratuito "Microsoft Search Server Express 2008", que como vimos en el Webcast nos proporciona mucha mas potencia a las búsquedas estándar de WSS:

http://www.microsoft.com/enterprisesearch/serverproducts/searchserverexpress/download.aspx

Muchas gracias a todos los que pudieron asistir y esperemos en breve encontrarnos en los siguientes eventos de Suges... :)

image

Pablo

Publicado 16/12/2008 11:31 por Pablo Sousa Lastra | con no comments

Archivado en: ,,

Más artículos Página siguiente >