Disponible el material de mi sesión del GAPZ2012

El pasado sábado 21 de Abril tuve el placer de asistir como ponente al evento Geek-â-Paloozaaa 2012 en Andorra. Allí pude compartir escenario con cracks como David Nudelman, Marc Salvador, Jose Luís Latorre y Eduard Tomàs, siempre bajo la atenta mirada del gran Lluís Franco, anfitrión de lujo y, como muestra, aquí os dejo un video de una entrevista que le hicieron.

http://vimeo.com/40775785

Podéis ver toda la información del evento aquí y, si no me equivoco, en breve podréis descargar los videos de las sesiones. Estad atentos porque iré informando de más novedades al respecto.

Todos los que pudisteis asistir sabéis que, por motivos de tiempo, pasé por alto muchas de las slides con la promesa de publicarlas lo antes posible. Como lo prometido es deuda, aquí tenéis la presentación de mi sesión.

https://skydrive.live.com/?cid=7127a829d27ab782#!/view.aspx?cid=7127A829D27AB782&resid=7127A829D27AB782%21727

El ‘Activity Feed’ aparece vacío

Hay información para aburrir acerca del servicio de perfiles de usuario de SharePoint y de las características sociales de SharePoint 2010, así que no os voy a aburrir con más sobre lo mismo. Simplemente os expondré algo  que me ha hecho perder la paciencia hasta límites insospechados para que, si os veis en la misma situación, no perdáis tantas horas como he perdido yo aquí.

La situación es la siguiente: instalas SharePoint 2010 utilizando AutoSPInstaller que, todo hay que decirlo, es una herramienta fantástica que permite hacer instalaciones limpias de una manera sencilla. Todo parece funcionar a las mil maravillas pero no hay manera de que el activity feed muestre ningún resultado independientemente de las acciones que efectúes. Pues bien, resulta que hay una propiedad por ahí perdida que sirve justamente para mostrar el activity feed y yo, como buen developer, no voy a la Administración Central de SharePoint a no ser que sea estrictamente necesario.

Para encontrar la dichosa propiedad, pulsar el enlace Manage service applications en la sección Application Management de la Administración Central de SharePoint. Una vez allí entrad en la administración de la aplicación de servicio de perfiles de usuario y, dentro del apartado My Site Settings, pulsad sobre la opción Setup My Sites. Allí encontraréis una propiedad que tenéis que habilitar, tal y como muestro a continuación.

image

Disponible el número 11 de la revista compartimos

Otro número más tengo el placer y el privilegio de formar parte del índice de un número de la revista CompartiMOSS, y esta vez como entrevistado. Es la primera vez que hago esto así que no me lo tengáis en cuenta 😛

Os dejo aquí el índice de la revista que, como veréis, viene plagado de grandes artículos.

•Editorial
•Conexiones BCS en el servicio de perfiles (Miguel Tabera Pacheco)
•Combinando SharePoint y Project Server (Arnau Roca Palà, Marc Bàguena Cuéllar)
•Linq To SharePoint (Juan Pablo Capdevila)
•Sitios de Publicación de SharePoint 2010 (Santiago J. Porras Rodríguez)
•Creando documentos profesionales en Microsoft Word 2010 (Alejandro Garrido)
•Entrevista con David Martos
•Lista personalizada con Excel (Marcus Vinícius Bittencourt)
•¿Cómo tener éxito con la adopción de usuario de soluciones SharePoint? (Edin Kapic)
•UXDesignPoint
•Exposición de un sitio web con autenticación por claims usando ADFS – Parte 1 (Diego Gatti)
•Customización y ampliación de estadísticas de uso (Víctor Cea Espejo)
•Firma Electrónica sobre SharePoint: principales ventajas y aplicaciones (Miguel López)
•Client Object Model en SharePoint 2010 / Modificando la seguridad (Juan Pablo Pussacq Laborde)
•El concepto de Nube Privada (Daniel S. Levi)

Si queréis descargar la revista podéis hacerlo aquí.

[EVENTO] CHARLA CON LOS EXPERTOS: TODO LO QUE SIEMPRE QUISISTE SABER SOBRE SHAREPOINT, PERO NO TE ATREVISTE A PREGUNTAR

El próximo miércoles, 14 de Marzo, a las 16:00 horas (GMT+1), está preparado un webcast donde intentaremos aclarar todas aquellas dudas que tengáis en relación a SharePoint. Os dejo la descripción del evento y el enlace de registro a continuación.

Los grupos de usuarios de SharePoint de habla hispana os proponemos un evento online un tanto diferente: os proponemos durante aproximadamente 90 minutos charlar con los principales expertos de la plataforma en países de habla de hispana. Ven con nosotros, plantéanos tus dudas y cuestiones sobre nuestro servidor favorito y averigua todo aquello que siempre quisiste saber, pero nunca te atreviste a preguntar.
Entre los participantes en la charla contaremos con algunos de los mayores conocedores de la plataforma SharePoint como: Gustavo Vélez, David Martos, Ricardo Muñoz, Juan Andrés Valenzuela, Juan Carlos González, Alberto Díaz, Daniel Seara, Héctor Insua, Manuel Herrera, Haarón González Fabian Imaz, Mario Cortés Flores, Juan Pablo Pussacq Laborde.

https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&eventid=1032506778&flag=1

Características: receivers y scopes

A raíz de una consulta en los foros de SharePoint he pensado que valía la pena dedicar un rato a explicar un concepto que, pese a ser aparentemente simple, suele causar más de un problema a todo aquel que trabaja con SharePoint. La problemática radica en el concepto feature scope o ámbito de la característica. Voy a intentar introducir primeramente el tema.

Sabréis que SharePoint, en su versión 2007, introdujo el tema de característica o feature que podría definirse como elemento mínimo de despliegue de funcionalidad y que, en ocasiones, tienen asociado un receiver que es un código manejado que se ejecuta cuando la característica se instala, se activa, se desactiva y se desinstala. Bien, resulta que las características pueden tener cuatro ámbitos diferentes en función del elemento o elementos a desplegar: granja, aplicación web, colección de sitios y sitio. Cuando no hay receiver el asunto suele ser bastante simple ya que suele haber una única posibilidad a la hora de seleccionar el ámbito. Si, por la razón que sea, existe más de una posibilidad tampoco es problema, porque en cualquiera de esas posibilidades el elemento se desplegará correctamente o saltará un error indicando que la característica no está bien definida.

El problema viene cuando tenemos un receiver el código del cual estamos desarrollando nosotros, y se debe al hecho que la característica se puede definir con cualquier ámbito y somos nosotros los que tenemos que actuar en consecuencia para que nuestro código funcione de manera adecuada. Voy a poner un ejemplo muy extremo para que veáis el tipo de cosas que se pueden hacer porque el sistema lo permite, pero que no deberían hacerse salvo que sepamos exactamente por qué lo estamos haciendo de esa manera.

Digamos que quiero desplegar una característica que, cuando se active, acceda al servicio de perfiles de usuario y haga un tratamiento sobre cada uno de los perfiles. Al estar tratando sobre una aplicación de servicio, lo lógico sería que su ámbito fuera aplicación web o granja (la decisión depende de la aplicación de servicio pero abordar este asunto está fuera del alcance de este artículo). Sin embargo, yo puedo decidir crear mi característica con ámbito de sitio y, en el código de activación hacer lo siguiente:

var web = properties.Feature.Parent as SPWeb;
var webApplication = web.Site.WebApplication;

Ahora tendría acceso al objeto SPWebApplication correspondiente al sitio donde estoy activando la característica. Esto no debería ser un problema pero, a la hora de la verdad, si tienes un código que está haciendo algo relacionado con el objeto SPWebApplication es probable que lo acabes utilizando en el futuro en otro proyecto y, en general, te encontrarás con un problema relacionado porque en ese nuevo proyecto, habrás pensado de otra manera, y esta vez tu característica la habrás definido con alcance aplicación web y el código anterior compilará, funcionará aparentemente, pero dará un error de NullReferenceException porque la primera línea de arriba devolverá un objeto nulo.

Si queréis dejar vuestro receiver totalmente protegido de cara a futuras reutilizaciones deberíais tratar las cuatro posibilidades que se os pueden llegar a dar. La idea sería obtener el tipo del objeto properties.Feature.Parent del ejemplo anterior y, en base al resultado, ejecutar un código u otro, o incluso devolver un error controlado y evitar el NullReferenceException que, si bien da toda la información, no va a ayudar a aquella persona que quiere reutilizar vuestro receiver.

En cualquier caso es importante intentar siempre escoger el ámbito más correcto para vuestra característica y, en ese caso, dependerá del código que vayáis a escribir. Si veis que vuestro código hace algo como lo de arriba, muy probablemente hayáis decidido mal y el ámbito correcto debería ser aplicación web. La idea es plantearse cual va a ser el objeto que va a recibir tratamiento por parte de nuestro código y establecerlo como el Parent de la característica a crear.

MVP Summit 2012

Por segundo año consecutivo he tenido el placer y el privilegio de venir a Seattle para asistir al MVP Summit. Ahora que ha acabado, y recogiendo ya las cosas para volver a casa, puedo deciros que he vuelto a disfrutar como un enano del acontecimiento. Ya no sólo por el hecho de estar en el campus y por poder ver información interesante de primera mano, sino sobretodo por la posibilidad de reencontrarme con mucha gente y conocer a personas realmente interesantes.

Para que os hagáis una idea de la magnitud del evento, aquí os dejo una foto donde aparecemos la mayoría de los asistentes al Summit. La foto se tomó en el estadio de fútbol de Seattle.

Si no lo podéis ver bien en esta página, podéis visitar el siguiente enlace:

http://photosynth.net/view.aspx?cid=37d2fb67-a580-427e-a63d-22d57b32f259

Una vez acabado, prometo ponerme al día con este blog que tan abandonado tengo. De momento ya os habréis dado cuenta de que estoy cambiando el aspecto poco a poco (dadme tiempo que ya sabéis que no me llevo muy bien con el HTML y con el CSS). Sé que tengo pendientes varios artículos sobre ALM y también alguna que otra cosita que introduje en su momento pero que acabó quedándose en el tintero. Si no hay nada que lo impida, durante este mes acabaré alguna de las cosas que tengo a medias y lo publicaré.

Seguimos…

[offtopic] Beezy y Papa Noel

Ya me ha tocado hablar de Beezy en este mismo espacio unas cuantas veces (aunque muchas de las veces no mencione directamente el producto, siempre está detrás de lo que vengo haciendo estos últimos meses). El caso es que estas son sus primeras navidades. Bueno, en realidad podríamos decir que son las segundas porque a estas alturas del año pasado el concepto ya se estaba trabajando y teníamos algunas cosas desarrolladas, pero la verdad es que realidad estas son las primeras navidades en las que Beezy está funcionando al 100%. Tanto es así que el mismísimo Papa Noel se ha decidido a usarlo para optimizar su productividad con el trabajo que se le viene encima en los próximos días.

Aquí os dejo un video para que lo veáis en funcionamiento. Espero que a vosotros también os saque una sonrisa como nos la ha sacado a los miembros del equipo de desarrollo cuando lo hemos visto.

Beezy y Papa Noel

Y de regalo, aquí tenéis algo que espero que os saque aún más sonrisas que el video anterior.

http://sendables.jibjab.com/view/D73s6y9TmMHuH4Yb

Número 10 de la revista compartimos

Hoy ha sido publicado el número 10 de CompartiMOSS, la revista de referencia del mundo SharePoint en habla hispana. Este mes el número viene cargadito con todos estos artículos:

  • Editorial
  • Cómo crear una página de error personalizada en SharePoint 2010 (Luis Máñez)
  • Aplicando buenas prácticas a una solución SandBoxed que despliega noticias gráficas (Juan Manuel Herrera)
  • SharePoint Governance – I (Randy Williams – Roberto Delgado)
  • Como remplazar controles delegados en sitios de SharePoint 2010 (Juan Carlos González Martín)
  • Datos externos desde Office365 (Mario Cortés Flores)
  • Gestión de documentos para ISO 9001 con SharePoint 2010 (Juan Emilio Martinez)
  • Entrevista con Daniel Seara
  • Timer Jobs en SharePoint 2010 (Carlos Ariel Dantiags)
  • NPS ENGINE, herramienta de Diseño de Procesos para SharePoint
  • el caso de los Centros Tecnológicos de Microsoft (MTC) (Roberto Delgado)
  • CUDISS – SharePoint BI para hospitales (Luis Máñez)
  • SSD: El Síndrome de la SharePoint Dependencia (Juan Pablo Pussacq Laborde)
  • Sitios web públicos en Office 365 (Alberto Diaz Martin)
  • Aprovisionamiento de Páginas Wiki en SharePoint 2010 (David Martos)

Como podéis leer, tengo el placer y el privilegio (aunque por las fechas que son tendría que decir me llena de orgullo y satisfacción) de formar parte del índice de este número con un artículo en el que hablo de aprovisionamiento de páginas Wiki en SharePoint 2010 y del que podéis encontrar el código relacionado en http://spwikiprovisioning.codeplex.com

Por si no escribo más este año (algunos ya sabéis que estoy pendiente del teléfono para desaparecer una temporadita) desearos a todos unas felices fiestas y una gran entrada de año. Sed buenos y no hagáis nada que yo haría, ¿o era al revés? #whatever

La característica de dependencia ‘PublishingSite’ no se activa en este ámbito.

Siguiendo con el anterior artículo en relación a la creación de sitios de alto nivel en Office365 y a raíz de la pregunta de un lector que necesitaba crear sitios con las características de publicación habilitadas, os doy un pequeño truco que os puede ser de utilidad. Resulta que si a la hora de crear la plantilla de sitio, éste tenía habilitadas dichas características, a la hora de activar la solución previamente exportada en un nuevo sitio nos encontraremos con un error similar al siguiente:

La característica de dependencia ‘PublishingSite’ (Id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) para la característica ‘xxx_Feature3’ (Id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) no se activa en este ámbito.

La causa de este error radica en que al crear la plantilla de sitio, SharePoint detecta que la característica de publicación de ámbito ‘sitio’ tiene una dependencia en la característica de publicación de ámbito ‘colección de sitios’ y así lo marca en el paquete de despliegue. No obstante, el fichero onet.xml que genera para nuestra plantilla ya incorpora la activación de ambas características, con lo que el error no debería aparecer. Aquí pongo un warning muy importante: lo que voy a hacer a partir de ahora lo podéis hacer siempre que entendáis el motivo de lo que estáis haciendo, ya que en ciertas circunstancias podéis provocar efectos muy negativos.

Para solucionar el error bastará con importar el fichero wsp que habéis exportado anteriormente desde Visual Studio mediante la plantilla de proyecto Import SharePoint Solution Package. Una vez allí será necesario hacer doble click en aquella característica que nos está indicando el sistema (xxx_Feature3 en el ejemplo de arriba) y acceder al final de la pantalla, ahí donde están las Feature Activation Dependencies.

image

Bastará con eliminar la dependencia y generar de nuevo la solución para resolver el problema anterior.

Como crear sitios personalizados de primer nivel en Office365

Desplegar soluciones en Office365 (SharePoint Online) supone normalmente muchos más quebraderos de cabeza que hacerlo sobre SharePoint on-premises. Esto, evidentemente, es debido a las restricciones de seguridad que supone disponer de una solución hospedada en una granja compartida por miles de organizaciones.

Uno de los escenarios típicos de desarrollo o personalización en Office365 es el que se conoce comunmente como “ad-hoc”.  En ese escenario un administrador crea un sitio vacío y, desde el nuevo sitio, los usuarios que tengan los permisos necesarios crean todos aquellos elementos que consideran necesarios. Cuando nuestros requerimientos van un poco más allá y necesitamos aprovisionar diferentes sitios con una estructura común la cosa se complica un poco, como veremos a continuación.

El principal problema radica en la imposibilidad de subir soluciones de tipo granja, y en el hecho que las definiciones de sitio únicamente pueden incluirse en soluciones de este tipo. Una aproximación a las definiciones de sitio son las plantillas de sitio, pero éstas se despliegan normalmente sobre colecciones de sitios existentes. ¿Qué pasa si necesitamos crear sitios de primer nivel? La respuesta es más simple de lo que parece.

Lo primero que deberemos hacer es crear el sitio tal y como lo queremos desplegar y, una vez lo tengamos, guardarlo como plantilla accediendo a la administración del sitio y pulsando sobre Save site as template dentro del apartado Site Actions.

image

El sistema solicitará un título y un nombre de fichero para la plantilla que queremos guardar. Una vez hecho esto podremos pulsar en el enlace Solutions dentro del apartado Galleries de la administración del sitio.

image

En la galería encontraremos la plantilla que acabamos de guardar. Lo que haremos es pulsar sobre la plantilla y guardarla en algún rincón de nuestro disco duro.

image

Si no queremos (o no necesitamos) hacer ningún cambio sobre la plantilla antes de desplegarla simplemente iremos a la administración de Office365 y crearemos una nueva colección de sitios privada.

image

A la hora de seleccionar la plantilla escogeremos seleccionar una plantilla más adelante, dentro de la sección Personalizado .

image

De esta manera, una vez finalizado el proceso de creación de sitio podremos ir a la galería de soluciones, añadir la solución que hemos creado previamente y activarla. Finalmente, cuando intentemos acceder al sitio por primera vez veremos que en la sección Personalizado nos aparece la plantilla de sitio que creamos al inicio.