Quiero empezar con SharePoint, ¿dónde voy?

El título de este artículo pretende resumir muy brutamente una consulta bastante habitual en los foros y el contenido de bastantes correos electrónicos que recibo solicitando ayuda o consejo. Mi respuesta normalmente varía según mi estado de ánimo o según el día que haya tenido pero normalmente se resumiría también como:

“Puedes empezar por Google, Bing o cualquier buscador con el que te sientas cómodo.”

No es que quiera resultar borde con esta respuesta ni que quiera frivolizar con el tema que para mí es muy serio. La respuesta es correcta para algunos casos y, de hecho, es ese el punto de partida que hemos tenido muchos de los que nos dedicamos a esto. Lo que pasa es que aquellos que hemos utilizado esa vía de aprendizaje no realizaríamos nunca la pregunta “por dónde empiezo”. Voy a exponer ahora lo que es simplemente mi opinión personal al respecto. Incluiré alguna dirección de interés para responder a la pregunta inicial, pero siempre intentando argumentar el por qué de cada indicación.

Para empezar, SharePoint es un producto (o mejor dicho una plataforma) muy extensa y compleja. Sí, es cierto que cualquier persona con mínimos conocimientos sobre la materia puede instalar un SharePoint en su casa y empezar a jugar con él. Seguramente, sin ninguna indicación podría incluso montar algo que funcionara, pero os garantizo que invertiría mucho tiempo en andar y desandar caminos que seguramente no le lleven a nada que le resulte de interés. Por lo tanto, primer consejo: si queréis instalar un SharePoint para empezar a jugar, no perdáis el tiempo en ello. Descargad una máquina virtual con el producto instalado y con ejemplos de estructuras ya creadas. Os ahorraréis mucho tiempo que, a la postre, es lo más importante siempre. Por poneros un ejemplo a descargar, os dejo éste.

De todas maneras, cuando alguien se plantea empezar en “esto del SharePoint” no se está refiriendo a empezar a jugar con algo. Si yo me planteo empezar a jugar con algo pienso en una consola, no en una plataforma informática o en un producto. Puestos a empezar en algo, ¿por qué SharePoint y no SAP, Ubuntu o Movie Maker? He de entender que te planteas SharePoint porque sabes o has oido que hace algo concreto. Pensad que en función de lo que estés buscando, la dirección a tomar puede ser muy diferente. Si quieres SharePoint para crear un portal de publicación, puedes perder meses aprendiendo como funcionan y como se extienden las características de colaboración de SharePoint. Lo primero a conocer de SharePoint está precisamente fuera de SharePoint. Me refiero a los requerimientos de lo que quieras o tengas que montar. Segundo consejo: si necesitas tener un overview de lo que ofrece el producto, te recomiendo directamente la página oficial de Microsoft. Una vez tenga claro qué partes del producto son de tu interés la búsqueda de información al respecto te resultará mucho más fructífera.

Más preocupante me parece cuando la intención real del que se hace esta pregunta es empezar en el ámbito del desarrollo o de la administración de SharePoint. Principalmente me preocupa por el echo que si ya estás familiarizado con el desarrollo o la administración de otro producto o plataforma no te sueles plantear por dónde empezar. Ya sabes que está internet, y que hay libros especializados o incluso cursos presenciales u online. Tercer consejo: si estás buscando estos elementos siempre encontrarás en los buscadores la información más reciente. Si aún así no encuentras nada (cosa que dudo) yo os dejo un enlace que funciona a día de hoy. Si no estás familiarizado con ningún otro producto, me parece irreal querer empezar por SharePoint. Pongamos dos casos:

  • Un administrador de SharePoint tiene que tener amplios conocimientos de sistemas (SQL Server, IIS, ISA Server, etc.) Quizá no domine todos los sistemas, pero tiene que ser capaz de interpretar cuando un problema es de base de datos, o de seguridad. Si estás al día en estos productos, seguramente conocerás Technet y sabrás que ahí tienes todo lo que necesitas para trabajar con SharePoint.
  • Un desarrollador de SharePoint debería (aunque no siempre es así) tener sólidos conocimientos de .NET. Si es así, conoces Msdn y, al igual que ocurría antes, ahí tienes todo lo que necesitas para trabajar con SharePoint.

Evidentemente, tanto los administradores de sistemas como los desarrolladores se encontrarán con problemas con los que nunca se han encontrado, por mucha experiencia que tengan. Ahí es cuando tienes que pedir ayuda. Cuarto consejo: si te encuentras con un problema para el cual no encuentras solución, acude a los blogs y a los foros. Encontrarás foros de todo tipo y para todos los gustos pero, por ejemplo, os dejo aquí el link al foro oficial de desarrollo en SharePoint.

Para concluir, un último consejo. Si os estáis planteando empezar en “esto del SharePoint” por un asunto oficial o, lo que es lo mismo, porque en vuestra empresa te han propuesto ponerlo en marcha en algún sentido, busca ayuda. SharePoint no es algo que sólo puedan tocar super-expertos, pero te vendrá bien alguien con conocimientos para tener un punto de partida. Quizá sólo necesites una consultoría de unas cuantas horas para enseñarte lo que puedes hacer para satisfacer tus necesidades, o quizá necesites 3 desarrolladores trabajando durante 5 meses, pero una primera consulta le ahorrará a tu empresa mucho tiempo y dinero. En un escenario real, un error en el inicio del planteamiento del proyecto puede concluir en la necesidad de comenzar de cero después de mucho tiempo invertido o, lo que es peor, comenzar de –X, teniendo que obtener de alguna manera toda la información que ya estuviera en una instalación con problemas, hacer el proyecto de cero y, finalmente, volcar toda la información obtenida previamente.

Como dirían en la tele, antes de tomar SharePoint, consulten con un farmacéutico…

Consumir servicios externos desde código SandBoxed

El título de este post puede llevarnos a pensar que voy a hablar de Office365, sobretodo por el concepto SandBox y por el requerimiento de llamar a un servicio externo desde mi SharePoint en la nube. La verdad es que me gustaría que fuera así, pero todavía no es momento de hablar de la nueva versión de BPOS y de lo que ofrecerá cuando la primera beta se haga pública. No obstante, os puedo hablar de CRM 2011, del cual hoy me he enterado que ya tenemos disponible la RC, y se da el caso que también utiliza el concepto SandBox cuando se habla de despliegue de soluciones personalizadas sobre la versión online del producto. Obviamente, la necesidad de consumir servicios externos desde esta plataforma será también un requerimiento más que común. Se nos pueden dar varias opciones, desde tener que consumir un servicio “privado” que interactúe con un sistema interno dentro de nuestra infraestructura o la de un tercero a tener que consumir un servicio “público” proporcionado por cualquier organización. Vayamos por partes…

Si tenemos que consumir un servicio privado las opciones se minimizan y todo apunta a que tenemos que utilizar AppFabric y, más en concreto, el Service Bus. Si tenemos que consumir un servicio público el abanico de posibilidades se abre, almenos en teoría. En este post os voy a explicar un ejemplo concreto de este caso. Imaginemos que tenemos que desarrollar un servicio para publicarlo en Azure y que queremos consumir desde CRM 2011 Online. Evidentemente podemos seguir usando AppFabric para este caso pero, siendo nuestras las dos piezas y estando ambas alojadas en la nube, ¿no puedo hacerlo por mis propios medios? La respuesta no es evidente, y si empezas a hacer tus pruebas te vas encontrando con algunas limitaciones de la tecnología. Entonces, ¿cómo lo hago? la respuesta es REST. A continuación os detallo los pasos que deberíais seguir para montar una solución similar.

Lo primero, añadir una referencia (si no la teníais ya) a los ensamblados System.ServiceModel y System.ServiceModel.Web. A continuación, incluir un servicio WCF dentro de nuestro sitio web que queremos publicar en Azure. Esta acción crea tres ficheros en nuestro proyecto. Primero editamos el archivo Service1.svc y añadimos el atributo Factory="System.ServiceModel.Activation.WebServiceHostFactory" dentro del nodo ServiceHost. El fichero resultante quedará así:

<%@ ServiceHost Language="C#" Debug="true"

    Service="WebApplication1.Service1"

    CodeBehind="Service1.svc.cs"

    Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

Después editamos el fichero IService1.cs que es la interfaz del servicio WCF para añadir la firma del método o de los métodos que queremos publicar. En este caso, expongo un método llamado GetIntegerResult que devolverá un valor entero.

namespace WebApplication1

{

    using System.ServiceModel;

    using System.ServiceModel.Web;

 

    [ServiceContract]

    public interface IService1

    {

        [OperationContract(Name = "GetIntegerResult")]

        [WebInvoke(UriTemplate = "/", Method = "GET")]

        int GetIntegerResult();

    }

}

Una vez hecho esto tenemos que añadir la implementación del método que devuelve dicho valor entero. Para ello, editamos el fichero Service1.svc.cs y escribimos lo siguiente:

namespace WebApplication1

{

    public class Service1 : IService1

    {

        public int GetIntegerResult()

        {

            return 3;

        }

    }

}

Si compilamos este código y accedemos vía web a nuestro servicio usando la url http://localhost:49254/Service1.svc/ (donde localhost:49254 es la url principal de vuestra aplicación web) observaréis un resultado como el de la figura:

image

El ejemplo, como se puede apreciar es muy simple y estoy pasando por alto muchas consideraciones pero el resumen es que si yo hago un GET de esta url obtengo el resultado que observáis en la figura. Ahora, ¿cómo hago ese GET? Está claro que hay múltiples respuestas para esta pregunta pero lo que parece evidente es que no vamos a tener muchas trabas tecnológicas independientemente de la tecnología que utilicemos siempre y cuando el servicio al que quiero llamar sea visible desde el sistema que estoy extendiendo, ya sea CRM 2011 Online, Office 365 o X. Para que sea visible deberemos publicar nuestro servicio en azure. Vamos a suponer que he publicado mi aplicación web en http://myapp.cloudapp.net y que, por lo tanto, si en mi navegador pongo http://myapp.cloudapp.net/Service1.svc veré una figura exactamente igual que la anterior. Para realizar la llamada desde C# una posibilidad es la siguiente:

Añadimos referencias a los ensamblados Microsoft.Http y Microsoft.Http.Extensions. Estos ensamblados los podréis encontrar dentro del WCF REST Starter Kit. A continuación, desde el sitio desde el cual quieras llamar a tu servicio, introduce el siguiente código.

string uri = "http://myapp.cloudapp.net/Service1.svc/";

using (HttpResponseMessage response = new HttpClient().Get(uri))

{

    // TODO: tratar la respuesta aquí    

    // No olvidéis la siguiente línea al principio del fichero:

    //    using Microsoft.Http;

}

Así de simple, independientemente de la tecnología que uses […] Bueno en realidad siempre hay una trampa, o varias. Si recordáis el título del artículo hablaba sobre CRM 2011 Online y yo sólo os he dado el punto de partida, la primera pista. .NET puro y duro que deberéis saber cómo publicar en CRM 2011 Online, en Office 365 o donde buenamente queráis. La segunda pista en la cadena CRM 2011 Online – SandBox – REST es Plugin.

Aún a riesgo de que me odiéis por haber metido sólo la puntita dejaros con la miel en los labios, voy a dejar el artículo aquí por el momento con la promesa de escribir una continuación digna a lo largo de esta semana.

Actualizado a lo largo de esa semana…

Os dejo aquí la segunda parte de este artículo.

CRM 2011 – An unsecured or incorrectly secured fault was received from the other party error

Como veréis, hoy me traslado temporalmente al mundo de CRM 2011, lo cual no es demasiado habitual en mí, una persona acostumbrada a trabajar mayoritariamente en tecnologías SharePoint. El caso es que de vez en cuando me toca jugar con una nueva tecnología y, entre la novedad del producto y mi desconocimiento del medio, me encuentro con errores que se escapan totalmente de mi control y me hacen perder invertir tiempo en la búsqueda de soluciones. El caso de hoy ha resultado ser una tontería pero, por si os sucede lo mismo que a mí, os pongo aquí el problema y su resolución.

El problema
A la hora de utilizar el Plugin Registration Tool para conectarme a mi instancia de CRM 2011 Online me encuentro con una excepción cuando trato de conectar con mi organización. El error dice lo siguiente:

An unsecured or incorrectly secured fault was received from the other party error.

El caso es que trato de utilizar todas las credenciales de que dispongo, pero el resultado es siempre el mismo.

La solución
Para poder conectar de nuevo la herramienta a mi instancia de CRM 2011 Online basta con acceder a la carpeta LiveDeviceID que encontraréis en vuestro perfil de usuario (C:Users{usuario} en Win7, por ejemplo) y eliminar el fichero LiveDevice.xml que encontraréis en ella.

Spenta StreetCare ve la luz

Hoy tengo el placer de anunciaros uno de los motivos por los cuales he estado más desaparecido de la cuenta. Las últimas semanas han sido muy intensas debido a que estábamos ultimando los detalles de Spenta StreetCare, un producto desarrollado por Spenta, que funciona íntegramente en Azure y que está ideado para proporcionar la capacidad a los Ayuntamientos de ofrecer un servicio a sus ciudadanos para que éstos reporten las incidencias que puedan encontrar en las calles.

Si queréis conocer más detalles acerca de esta herramienta os dejo dos enlaces: La noticia publicada en la web de Spenta y la página oficial del producto.

También es un orgullo para mí contar que la aplicación ha sido galardonada con un premio a la mejor aplicación sobre Windows Azure. No tengo información acerca del premio ni de cómo ha llegado a participar StreetCare en el concurso, pero lo que os puedo decir es que, desde que vio la luz la primera beta dentro del ámbito de CSP (Citizen Service Platform) en los diferentes eventos de Microsoft a nivel mundial no ha dejado de generar ruido por allá por donde se ha enseñado.

A nivel técnico, que es lo que interesa en este blog, deciros que ha sido durisimo y a la vez emocionante trabajar en este proyecto por el número de tecnologías nuevas que incorpora y en las cuales me he tenido que poner las pilas. Por citar algunas, mencionaré Azure (Windows Azure, Azure Storage y SQL Azure), AppFabric, Windows Phone 7 y CRM 2011 Online. Falta SharePoint 2010, ¿verdad? pues dadme tiempo para que Office 365 entre en escena y os comience a hablar sobre StreetCare, Office 365 y Pivot.

En fin, felicitar a todo el equipo que ha hecho posible poner esto en marcha, agradecerles su ayuda en los momentos más complicados y animarles a seguir en esta línea.

Nuevos blogs interesantes

Hace demasiado tiempo que no posteo nada, y no por falta de ganas sino por falta de tiempo. Estoy preparando material que empezaré a publicar en breve pero, mientras tanto, os dejo un par de enlaces interesantes de colegas de profesión y de compañía que recientemente han inaugurado su blog personal y que os recomiendo encarecidamente que sigáis.

Aunque no lo parezca, para mí es un notición. Después de haberlos visto entrar en la compañía, haber trabajado con ellos durante varios años y haberlos visto crecer en conocimientos y en canas, ya iba siendo hora de que empezasen a compartir todo lo que llevan dentro.

Mención especial para Enric (seguro que lo entiendes, Ángel) que yo creo que es el “tapado” más grande de la historia de SharePoint. Recuerdo el día que entré en una sala para entrevistarlo y comprobar su nivel hace 4 años y salí temblando de miedo y casi llorando ;). A partir de ese momento, no ha dejado de sorprendernos a todos su capacidad para dominar nuevas tecnologías y para asumir más y más trabajo.

La historia de Ángel en Spenta es mucho más corta (unos 2 años), pero la verdad es que bastante intensa por los proyectos en los que ha estado involucrado. Seguro que la mayoría de Spentanos estamos de acuerdo en que si tenemos que destacar un aspecto de estos dos años es que ha cambiado el ambiente de la oficina con su frescura y desparpajo. Por supuesto, su solvencia tecnológica también es destacable.

Simplemente animaros a seguir escribiendo y enseñandonos cosas siempre que podáis.

Para no desmerecer al resto de Spentanos, os dejo una lista con otros blogs ilustres y de obligada lectura, almenos para mí, pero que no necesitan presentación porque ya llevan tiempo en la comunidad.

No sé si me dejo alguno. Si lo he hecho, avisadme y actualizo la lista.

Bienvenida de mi nuevo blog

Es para mí un orgullo dar por inaugurado este blog. Para aquellos de vosotros que no me conozcáis, deciros que llevo algunos años publicando artículos técnicos en http://david-martos.blogspot.com y que, coincidiendo con mi reciente nombramiento como Microsoft MVP SharePoint Server, he querido dar el salto a Geeks.ms. No hace falta que os cuente los motivos de este salto porque todos conocéis Geeks.ms y lo que representa para los que publicamos información sobre tecnología Microsoft.

Con esto no quiero decir que abandonaré mi antiguo blog, porque soy un romántico y le he dedicado muchas horas. Dedicaré Geeks.ms a hablar únicamente de SharePoint 2010 y dejaré Blogspot para lo demás. De todas maneras haré crossposting para que aquél no muera, ya que el 99% de lo que escribo suena a SharePoint (lo siento por aquellos que me compadecen, pero SharePoint me gusta, y mucho)

Espero que este humilde blog esté a la altura de sus vecinos. Lo que sí os voy a pedir es un poco de tiempo para ir adaptando el espacio a mis gustos y necesidades, y para ir personalizándolo poco a poco. Me llevó un año largo hacerlo con Blogspot pero espero tenerlo todo listo en Geeks.ms antes de final de año.

Sin más por el momento, quedo a vuestra disposición.