Posts categorizados 'Blog'
Desarrollo para SharePoint con Visual Studio 2008 – Diapositivas y Video
El día jueves pasado, mis amigos de la comunidad de SharePoint de México D.F. y mi persona realizamos un webcast acerca del desarrollo para SharePoint con Visual Studio 2008. Tuvimos alrededor de 20 personas asistiendo al webcast y varias preguntas interesantes, que demuestran el entusiasmo que existe actualmente por SharePoint y las bondades que éste ofrece.
Como lo prometido es deuda, aquí les dejo las diapositivas y el video correspondientes al webcast:
¡Hasta pronto!
Julio
Webcast de Desarrollo para SharePoint con Visual Studio 2008
El día de mañana mis amigos de la comunidad de SharePoint de México, D.F. y mi persona estaremos brindando un webcast en el que trataremos el tema del desarrollo para SharePoint usando Visual Studio 2008, viendo cómo se puede usar efectivamente a WSS 3.0 como una plataforma de desarrollo.
Aquí el anuncio oficial:
Por acá el link para entrar al webcast:
https://www.livemeeting.com/cc/microsoft/join?id=H55WG7&role=attend&pw=z//%2BF%2BW6w
La sesión empieza mañana 28 de Agosto, a las 5PM. Sin embargo, les recomiendo dirigirse al link unos minutos antes para que instalen el cliente de Live Meeting que necesitarán para visualizar el webcast.
¡Los esperamos!
Julio
Guía para el Desarrollo de Aplicaciones para SharePoint de P&P
Patterns & Practices (P&P) es un equipo de Microsoft dedicado a proveer las mejores guías, patrones y herramientas que nos ayuden a diseñar, desarrollar y probar las aplicaciones que creamos basadas en tecnologías Microsoft. A la fecha tienen publicadas una gran cantidad de guías y herramientas para la construcción de aplicaciones de escritorio, aplicaciones Web, aplicaciones para dispositivos móviles, servicios Web, entre otras.
Me acabo de enterar que ahora le han puesto el ojo a SharePoint y para nuestra gran fortuna están trabajando en una serie de guías sobre cómo desarrollar aplicaciones o soluciones de Intranet basadas en SharePoint.
En particular, tienen ya un pequeño avance publicado por acá que incluye:
- Una implementación de referencia basada en un escenario llamado Training Management. Esta es una solución de Visual Studio 2008 que contiene un site definition, lists definitions, content types, webparts, workflows y muchos de los otros típicos artefactos que deben usarse al crear soluciones SharePoint. Algo fantástico aquí es que incluyen una serie de pruebas unitarias que no solo aseguran la calidad del código sino que nos dan una guía sobre cómo implementar estas pruebas en nuestros proyectos SharePoint.
- Una guía en formato chm que explica la arquitectura y los escenarios que cubre esta implementación de referencia, así como el cómo resolver típicos problemas que enfrentamos los desarrolladores al crear soluciones para SharePoint.
También está disponible el documento de Visión/Alcance para poder conocer qué es lo que tienen planeado cubrir en esta guía.
El proyecto de Codeplex con toda la información acerca de esta nueva guía está por acá: http://www.codeplex.com/spg
Cabe recalcar que el proyecto aún está verde, aún no llegan ni a fase alfa, pero es muy grato saber que hay este tipo de esfuerzo de parte de Microsoft para ayudarnos a todos quienes hemos tomado a SharePoint como nuestra nueva plataforma de desarrollo.
Julio
Usando el DateTimeControl de SharePoint en tus páginas y controles ASP.NET
Hace unos días estaba trabajando en un control de usuario de ASP.NET que debía incluir como parte de una solución SharePoint para un cliente. En este control debía incluir el clásico mecanismo de selección de rango de fechas que determinarían los registros a mostrar como resultado de una consulta. Esto pues implica colocar algún control para la selección de fecha de inicio y fecha de finalización.
ASP.NET no incluye un control para selección de fechas del tipo DateTimePicker que sí incluye Windows Forms (aunque sí hay un control Calendar) y por ello me lanzé a la búsqueda de un control sencillo (y si es posible gratutito) que pudiera incorporar en mi solución y, aunque encontré varios, cada uno implicaba una o más configuraciones para que pudiera funcionar apropiadamente en el ambiente de SharePoint, sin hablar de que luego hay que hacer el correspondiente deployment del mismo.
Luego se me ocurrió que tal vez SharePoint incluyera ya un control de este tipo, pues después de todo está basado en ASP.NET y en más de una página de SharePoint aparece un control para selección de fechas como el que quería usar. Sin mucho buscar encontré este post de Ishai Sagi (SharePoint MVP), donde hace exactamente lo que yo quería, que es usar un control llamado DateTimeControl que ya viene incluido en uno de los assemblies de SharePoint.
Entonces, para agregar el DateTimeControl a tu página o control ASP.NET (estoy asumiendo que estás haciendo esto en un proyecto de tipo SharePoint que creas con las Extensiones de Visual Studio para SharePoint):
1. En tu proyecto, agrega una referencia al assembly Microsoft.SharePoint.dll (aunque la referencia viene de manera predeterminada en este tipo de proyectos)
2. En la parte superior de tu página o control ASP.NET, declara la siguiente directiva:
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
3. En el lugar donde necesites el control decláralo como lo harías con cualquier control ASP.NET, pero con el prefijo SharePoint. Por ejemplo:
<SharePoint:DateTimeControl ID="dateTimeFechaInicio" runat="server" DateOnly="true"
AutoPostBack="true" LocaleId="3082" />
En este ejemplo en particular, estoy declarando el control y especificando que solo muestre fechas (DateOnly=”true”) y que use la configuración regional de Español (LocaleId=”3082”) en lugar de la predeterminada en Inglés.
El resultado, en mi ejemplo, es algo como esto:
…donde he colocado dos instancias del control para la selección del rango. Y, al dar click en el selector de fecha aparece así:
Realmente me agrada mucho este “poder” adicional que me brinda SharePoint como desarrollador, puesto que al reutilizar sus controles me evito cualquier trabajo de configuración y deployment adicionales que hubiera tenido que realizar si los controles no estuvieran disponibles. Allí es cuando realmente se aplica aquello de que SharePoint es una verdadera plataforma de desarrollo.
Espero sea de utilidad,
Julio
Cómo acceder a servicios web de SharePoint en sitios que usan forms based authentication
Como muchos saben, hay una serie de servicios web que exponen tanto WSS 3.0 como MOSS 2007, los cuales pueden ser consumidos para realizar una diversa serie de acciones sobre los sitios SharePoint programáticamente. Sin embargo, algo que no es tan obvio, es el hecho de que cuando aquellos sitios no utilizan la autenticación basada en Windows, que es la predeterminada, sino que están configurados para usar autenticación basada en formas, o forms based authentication (FBA), se requieren pasos adicionales para hacer la invocación apropiadamente.
Si intentas la invocación y no utilizas las líneas adicionales que comento más abajo obtendrás una WebException con este mensaje:
The request failed with HTTP status 403: Forbidden.
Entonces, si por ejemplo deseas invocar al servicio web de listas (Lists.asmx) que expone SharePoint desde tu código C#, en un sitio que usa FBA, esto es lo que debes hacer:
// Autenticar AuthenticationService.Authentication auth = new AuthenticationService.Authentication(); auth.CookieContainer = new CookieContainer(); AuthenticationService.LoginResult result = auth.Login("usuario", "contraseña"); if (result.ErrorCode == AuthenticationService.LoginErrorCode.NoError) { // Crear el servicio de listas y asociarle la cookie // retornada por el servicio de autenticación ListsService.Lists lists = new ListsService.Lists(); CookieCollection cookies = auth.CookieContainer.GetCookies(new Uri(auth.Url)); Cookie authCookie = cookies[result.CookieName]; lists.CookieContainer = new CookieContainer(); lists.CookieContainer.Add(authCookie); // Invocar al servicio de listas XmlNode responseNode = lists.GetListCollection(); // Utilizar los datos retornados... }
En este ejemplo, AuthenticationService y ListsService son referencias web a lo servicios de SharePoint que encontrarás en http://midominio.com/_vti_bin/authentication.asmx y http://midominio.com/_vti_bin/lists.asmx respectivamente.
El código lo que hace es invocar el servicio de autenticación utilizando un usuario y contraseña válidos en el contexto de este sitio que usa FBA. El resultado de esa autenticación contiene una cookie que es como el token que identificará a las sucesivas invocaciones a otros servicios web. Luego de verificar que no hubo errores al autenticar, se crea la instancia del servicio de listas, se le agrega la cookie obtenida a su contenedor de cookies y finalmente se invoca al servicio. Y listo, la llamada debe ejecutarse sin problemas.
Notas Importantes
- El usuario que utilices para invocar al método Login de Authentication.asmx debe ser un usuario que forme parte del sitio que utiliza FBA, mas no puede ser uno de tus usuarios de Active Directory, es decir, no pueden ser usuarios de un sitio que use Windows Authentication. Authentication.asmx funciona únicamente para sitios que usen FBA.
- El dominio de los servicios web que utilizarás no puede contener un puerto específico, pues en ese caso la cookie no funcionará. Es decir, si haces tus referencias web a http://midominio:12000, obtendrás un error al invocar al servicio de listas, más si usas http://midominio.com (que corre en el puerto 80) todo funcionará sin problemas.
Espero sea de utilidad,
Julio
¡SPSite no es un site!
Una pequeña nota acerca del modelo de objetos de SharePoint. Aunque ya lo he estado usando durante unos cuantos meses, recién ahora leyendo un excelente libro llamado Inside Microsoft Windows SharePoint Services 3.0, me he enterado de ciertas diferencias entre el nombramiento de objetos en el modelo de objetos de SharePoint y los elementos correspondientes que se utilizan en su UI.
Y es que SPSite pues no se refiere a un site de SharePoint, sino a un site collection, mientras que SPWeb tampoco se refiere a una Web Application como lo hubiera esperado, sino a un site!
Entonces, en el siguiente código:
using Microsoft.SharePoint; class Program { static void Main() { string ruta = "http://misitio.com"; SPSite siteCollection = new SPSite(ruta); SPWeb site = siteCollection.RootWeb; foreach (SPList lista in site.Lists) { Console.WriteLine(lista.Title); } site.Dispose(); siteCollection.Dispose(); } }
… pues estoy obteniendo primeramente una referencia al site collection del sitio (un SPSite), luego una referencia al sitio de nivel superior dentro de esa site collection (un SPWeb) y luego pues recorro las listas del sitio, despliego sus nombres en la consola y finalmente hago dispose de los objetos que lo requieren.
Aparentemente esto es un legado de el nombramiento de estos objetos en versiones pasadas de la plataforma. Seguramente es obvio para los masters en desarrollo con SharePoint, pero a mi me acaba de aclarar algunas dudas :)
Julio
Cambiando la vista inicial en tu Forma InfoPath programáticamente
Sí, en muchos casos podrás hacer ese cambio de vistas usando reglas de InfoPath, pero, tarde o temprano, te pasará como a mi y las reglas no serán suficiente para el tipo de personalización que tus usuarios demandan. Cómo le haces entonces para definir la vista inicial que debe mostrarse en la forma InfoPath programáticamente dependiendo de tus reglas de negocio?
Supongamos que tienes una forma InfoPath con 2 vistas: VistaCreacion y VistaAprobacion y que el mostrar una u otra vista depende del usuario que inició sesión en SharePoint.
Para agregar el código que cambie la vista inicial de la forma:
1. En InfoPath, selecciona el menú Tools –> Programming –> Loading Event…, lo cual abre el código C# de la forma y te sitúa en el manejador del evento Loading.
2. En el método FormEvents_Loading agrega las siguientes líneas:
public void FormEvents_Loading(object sender, LoadingEventArgs e) { if (Application.User.LoginName.Equals(@"MiDominio\UnAprobador")) e.SetDefaultView("VistaAprobacion"); else e.SetDefaultView("VistaCreacion"); }
Y listo. Una vez que hagas el deployment de tu forma ésta mostrará la vista apropiada dependiendo de quien inició sesión en el portal SharePoint.
Una nota personal: cada vez más prefiero usar código C# en vez de las reglas de InfoPath, principalmente porque las reglas suelen ser limitadas y complicadas cuando quieres resolver escenarios no tan simples. Más aún, cuando tienes muchas reglas y luego necesitas agregar también código C#, eso puede convertirse en una verdadera ensalada muy difícil de entender aún para ti mismo, menos aún para el pobre que deberá darle mantenimiento a tu forma más adelante.
Espero sea de utilidad,
Julio.
Conoce SharePoint Magazine
Aquí nada más para pasarles la noticia de este nuevo sitio, llamado sharepointmagazine.net, en el que se están presentando interesantes artículos relacionados con SharePoint.
En este momento hay un artículo interesante sobre cómo se ve SharePoint en un dispositivo móvil como el iPhone, una entrevista con el muy conocido Joel Oleson y algunas otras cosas. Seguramente vendrá mucho más contenido en adelante.
Julio.
Nace la International SharePoint Professionals Association
Desde hace varios meses nos hemos venido juntando algunos entusiastas de las tecnologías SharePoint alrededor de todo el mundo y el día de hoy, gracias a los esfuerzos que ha liderado Bob Fox, MVP de SharePoint, ha nacido la International SharePoint Professionals Association (ISPA), una gran comunidad de profesionales voluntarios independientes que queremos difundir la voz acerca de SharePoint y guiar su adopción por todo el mundo.
Estamos muy contentos por poder dar inicio a esta nueva gran comunidad y quién mejor que Bob para introducirnos a esta iniciativa (el anuncio oficial en inglés está por acá):
“La Asociación Internacional de Profesionales de SharePoint, también conocida como ‘ISPA’ (por sus siglas en inglés), es una organización independiente, sin fines de lucro e impulsada por la comunidad dedicada a brindar soporte a profesionales y grupos de SharePoint alrededor del mundo. La misión primaria de ISPA es el promover la adopción global de las Tecnologías SharePoint proveyendo soporte y guías para la comunidad SharePoint como un todo – estableciendo conexiones entre los profesionales, grupos, recursos, educación e información de SharePoint. ISPA es liderado y soportado por voluntarios a través del mundo y se enfocará en llevar a toda la comunidad a estar mucho más unidos.
La primera oferta de la ISPA para la comunidad es brindar soporte a los grupos de usuarios alrededor del mundo a través de sitios web WSS v3 gratuitos para cada grupo que se afilie a la ISPA. Adicionalmente, uno de los objetivos de la ISPA es el facilitar un intercambio de ideas entre líderes de grupos de usuarios que ayuden a incrementar las posibilidades de éxito de sus grupos. Siendo así, ISPA está proveyendo a los líderes de los grupos de usuario del acceso a espacios colaborativos donde pueden interactuar con otros líderes de grupo, compartiendo ideas, recursos, mejores prácticas, guías y, más importante, brindarse soporte entre ellos.
ISPA también ha establecido Evangelistas Regionales – líderes de comunidad existentes que han exhibido previamente un compromiso fuerte hacia la promoción de la comunidad SharePoint y que se han comprometido a llevar el mensaje de ISPA a través de su región particular. Estos evangelistas son contactos locales clave que están disponibles para trabajar con profesionales locales de SharePoint y grupos de usuarios a través de su región para ayudar a promover la comunidad y SharePoint. Si estás interesado en iniciar un grupo de usuarios, tienes uno existente o necesitas guía – los Evangelistas Regionales de la ISPA son excelentes recursos que están disponibles para asistirte inmediatamente.
Finalmente, como todos saben, ninguna comunidad está completa sin un sitio web, y la ISPA se enorgullece en anunciar el lanzamiento de su sitio oficial, http://www.sharepointpros.org. Aún cuando el sitio está todavía en sus fases iniciales de desarrollo, los planes para el soporte multilenguaje y la funcionalidad existente que asistirá a todos los involucrados con SharePoint están en el horizonte.
Si tienes ideas para ISPA, te gustaría iniciar un grupo de usuarios o necesitas asistencia, visita el nuevo sitio de la ISPA o contacta a ISPA en contactus@sharepointpros.org. Juntos, la comunidad puede lograr lo que era imposible de forma individual – conviértete en parte de la ISPA hoy!”
Quisiera extender la invitación de Bob a todos quienes estén trabajando o estén interesados en las tecnologías SharePoint aquí en México, en particular a quienes participan ya de la Comunidad SharePoint de México y a los fabulosos Bloggers locales, para que se unan a esta iniciativa y me den a conocer las ideas sobre aquello en lo que les gustaría se convierta esta gran comunidad. Qué les gustaría ver en el sitio? Qué áreas de este gran producto SharePoint les interesa más? Qué clase de actividades de aprendizaje o intercambio de conocimientos les resulta más útiles?
Me encantaría recibir su feedback que me pueden enviar ya sea dejándome un comentario en este post, escribiéndome a mi link de contacto ó directamente a mi email.
Visiten por favor el sitio, donde podrán enterarse de quienes están formando parte ya de la ISPA, y estén atentos a las novedades que tendremos más adelante. Así mismo, aún hay algunos países de habla hispana que carecen de representación en la ISPA, no necesariamente por que no existan, sino porque simplemente no los conocemos. Si perteneces a alguno de ellos o conoces a sus líderes, por favor contáctate con nosotros y únanse!
Julio.
Tutoriales para aprender Excel Services
En estos días he estado evaluando la factibilidad de utilizar Excel Services, y en particular Excel Web Access, en mi proyecto actual. En mi búsqueda de información encontré una serie de tutoriales que me dieron todo el contexto general para implementar distintos escenarios posibles con Excel Services y, pues, me gustaría compartirlos.
Aquí los tutoriales con sus links de descarga:
Setting up the Server - Step 1: Creating a Trusted Location with Excel Services
Setting up the Server - Step 2: Configuring Single Sign-On for Excel Services
Setting up the Server - Step 3: Creating a Trusted Data Connection Library with Excel Services
Building a Report Based on Cube Functions for Excel Web Access
Protecting Workbook Intellectual Property (IP) with View Item Rights
Using OLAP Formulas, Conditional Formatting, and Charts
Building an OLAP PivotTable Report with Excel Services
Building a Relational PivotTable Report with Excel Services
Building a Report with a Chart for Excel Web Access Based on Cube Functions
Creating a Multi-Report Summary Page of Reseller Sales Data
Por acá algunas imágenes para que se den una idea de lo que se puede implementar con los tutoriales:
Tal vez ya conocían sobre esto, porque Excel Services lleva rato en el mercado, pero yo soy nuevo en esto, así que a mis amigos novatos pues de seguro les será de utilidad. Por cierto, este otro link está también muy bueno para empezar.
Julio
