viernes, 18 de febrero de 2011

Terminan los SharePoint Camps en Barcelona

Esta semana se han llevado a cabo los SharePoint Camps en Barcelona. Unas jornadas en las que hubo dos días de formación en SharePoint 2010, a cargo de Juan Carlos González, y dos jornadas de trabajo intensivo en unas pruebas de concepto de desarrollos sobre dicha plataforma y en las que Spenta ha estado presente puliendo algunos detalles de un nuevo producto llamado FacePoint.

camps_bcn

Sobre FacePoint os podría decir muchas cosas, pero prefiero remitiros a la web del producto donde podréis ver un video explicativo y en la que os podéis apuntar para recibir información más detallada acerca de sus funcionalidades. Si quieres más información, puedes seguirnos en estos canales:

imagesCA1D8DM1 imagesCAGZ6SA6 imagesCASQ362S

jueves, 17 de febrero de 2011

Webcast MSDN: SUGES- SharePoint 2010 no es solo intranets, monta tu sitio público

El próximo jueves día 10 de marzo de 2011, de 7 a 9 de la tarde, El amigo Mario Cortés de Renacimiento y un servidor tendrán el placer de presentar un webcast en el que hablaremos de SharePoint 2010 y de portales de publicación. En el webcast veremos las distintas problemáticas que plantea crear un sitio público, mediante las características de publicación veremos el ciclo de vida de los contenidos, las distintas formas de personalización, las capacidades de integración de identidades. Trataremos de  romper el tópico y la idea de que SharePoint 2010 no es un producto tan idóneo para la creación de sitios Internet, sino al contrario es una plataforma excelente para crear sitios de publicación adaptados a las necesidades de cualquier organización.

La agenda del evento es la siguiente:

  • SharePoint for Internet Site.
  • Arquitectura y topología de un sitio público
  • Características de publicación.
  • Personalización de masterpages, layouts y css.
  • Autenticación FBA en SharePoint 2010
  • Autenticación con sistemas externos (Facebook, OpenID, etc.)
  • Recomendaciones de seguridad
  • Monitorización de uso del portal
  • Multilenguaje, variaciones de sitio
  • Automatización, despliegue y multitenancy

Aquí os dejo la dirección de registro al evento:

https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032478934&EventCategory=4&culture=es-ES&CountryCode=ES

miércoles, 16 de febrero de 2011

Control de presencia en SharePoint 2010 con Lync 2010

Si utilizáis Lync (o Office Communicator) habréis visto en ocasiones la típica bolita que aparece al lado del nombre de los usuarios y que indica el estado del usuario y que te permite interactuar con dicha persona ya sea por mensaje instantáneo, por email, por llamada telefónica o por cualquier otra via haciendo click en ella.

image

Por defecto, SharePoint mostrará esta información en cualquier sitio donde muestre el nombre de cualquier usuario pero, ¿cómo hacemos para incluir esta información en nuestros elementos web personalizados? La respuesta es simple, incluyendo este código HTML allá donde lo necesitemos.

<img border="0" height="12" style="padding-right: 3px;" id="[IDENTIFICADOR_UNICO]" 
    src="/_layouts/images/imnhdr.gif" onload="IMNRC('[SIP_DEL_USUARIO]')" ShowOfflinePawn="1" />            

Hay, de todas maneras, alguna cosa importante a tener en cuenta:

  • El parámetro id: aseguráos de que es un identificador único en toda la página (regla general a la hora de escribir HTML, por otro lado)
  • El parámetro onload: allá donde pone [SIP_DEL_USUARIO] deberéis poner, como su nombre indica, el código SIP del usuario de SharePoint. La manera de obtener este dato dependerá de si estáis atacando al modelo de objetos de cliente o de servidor, pero lo encontraréis siempre en la lista SiteUserInfoList, si buscáis el campo SipAddress.
  • El parámetro ShowOfflinePawn: si lo ponéis a 1 os aparecerá la bolita gris cuando el usuario no esté conectado. Si lo ponéis a 0 simplemente no mostrará la bolita.

A partir de aquí, lo dejo a vuestra imaginación…

martes, 15 de febrero de 2011

SharePoint 2010 y ECMAScript

Una de las novedades que incoporó la versión 2010 de SharePoint a nivel de desarrollo es el modelo de objetos de cliente. Hasta ahora, si queríamos interactuar con elementos de nuestro servidor de manera remota la única opción que teníamos era acceder a los servicios web que éste proporcionaba. Ahora, además de esta opción tenemos otras cuatro alternativas:

  • Modelo de objetos de cliente .NET
  • Modelo de objetos de cliente Silverlight
  • Modelo de objetos de cliente ECMAScript
  • Servicios REST

Cada una de estas alternativas nos proporciona unas ventajas concretas en función de lo que necesitemos desarrollar. En este artículo os quiero hablar, con un ejemplo concreto, de una de estas cuatro alternativas: ECMAScript. Antes de entrar en materia, algunas consideraciones. Lo que vais a ver a continuación es, mayormente, código javascript y, en algunas ocasiones, puede provocar reacciones contrarias a la hora de utilizarlo. Como todo, tiene sus ventajas y sus inconvenientes, pero el hecho que Microsoft haya incluído esta posibilidad en esta versión de SharePoint hace que, cuando menos, tenga que ser considerada como una de las opciones que tenemos a la hora de desarrollar. Si os planteáis utilizar este método para un desarrollo, pensad primero en las características de vuestro escenario y valorad si os conviene utilizarlo. Para mí, el uso de ECMAScript ofrece una serie de ventajas respecto al desarrollo convencional. La principal de esas ventajas es el despliegue de las funcionalidades. Lo único que necesitamos es escribir código HTML que podría incluso incluirse en un elemento web editor de contenidos. Si pensamos, sobretodo, en escenarios donde el despligue de elementos en el servidor es complejo esta posibilidad se hace especialmente interesante.

Vayamos con el ejemplo: imaginad que queremos mostrar los elementos de una lista en una página de SharePoint y, a su vez, permitir que los usuarios añadan nuevos elementos a dicha lista y que no se produzcan refrescos innecesarios de la página. Para realizar este ejemplo necesitaremos crear un sitio con una lista que llamaremos Actividades. Además, en alguna página del sitio como, por ejemplo, la página de inicio, incluiremos un elemento web consulta de contenido, editaremos su contenido y escribiremos, por ejemplo, el siguiente código HTML.

   1: <input type="text" class="new-activity-textbox" />
   2: <input type="button" class="new-activity-button" value="enviar" />
   3:  
   4: <ul class="activities">
   5:  
   6: </ul>

Ahora tenemos que incluir la interactividad necesaria para que, cuando el usuario pulse el botón del ejemplo, se cree un nuevo elemento en la lista Actividades con el texto introducido por el usuario. Para hacer esto se os pueden ocurrir muchas maneras y, en este caso, yo he optado por utilizar JQuery (tened en cuenta que deberéis incluir la referencia al js de JQuery en vuestra página maestra o en vuestra página de aplicación). Editamos el código anterior e incluimos esto al inicio.

   1: <script language="ecmascript" type="text/ecmascript">
   1:  
   2:     $(document).ready(function {
   3:         $('input.new-activity-textbox').click(function {
   4:             var text = $(this).prev().value;
   5:             CreateElement(text);
   6:         });
   7:     });
   8:  
   9:     function CreateElement(text) {
  10:     }
</script>

Hasta aquí sólo hemos visto HTML y JQuery, nada de SharePoint. Evidentemente nos falta una parte del código que es aquella que tiene que permitir crear un elemento en una lista. Editamos el código anterior y, cambiamos la función CreateElement por lo siguiente:

   1: function CreateElement(text) {
   2:     context = new SP.ClientContext.get_current();
   3:     web = context.get_web();
   4:     var list = web.get_lists().getByTitle("Activity");
   5:     var itemCreateInfo = new SP.ListItemCreationInformation(); 
   6:     listItem = list.addItem(itemCreateInfo); 
   7:     listItem.set_item('Title', text); 
   8:     listItem.update(); 
   9:  
  10:     context.load(listItem); 
  11:     context.load(list); 
  12:  
  13:     context.executeQueryAsync(CreateElementSuccess, QueryFailure); 
  14: }

Si estáis familiarizados con el desarrollo sobre SharePoint, veréis que hay bastantes similitudes entre el modelo de objetos de cliente y el modelo de objetos de servidor. Básicamente se obtiene el contexto, de ahí se extrae la referencia al sitio, se consulta una lista y, finalmente, se añade un nuevo elemento a dicha lista. Las diferencias vienen al final, ya que usando el modelo de objetos de cliente la llamada se hace de manera asíncrona. Para nuestra fortuna, podemos indicar qué método delegado será invocado en el momento en que la llamada devuelva algún resultado. En nuestro caso, llegado el momento tendríamos que volver a consultar los elementos de la lista y modificar el código HTML de la página sin hacer ningún refresco. Eso lo conseguimos con el siguiente código:

   1: function CreateElementSuccess(sender, args) {
   2:     var list = web.get_lists().getByTitle('Activity');
   3:  
   4:     var query = '<View>'+
   5:                     '<Query>'+
   6:                         '<OrderBy>'+
   7:                             '<FieldRef Name="Created" Ascending="False"/>'+
   8:                         '</OrderBy>'+
   9:                     '</Query>'+
  10:                  '</View>';
  11:              
  12:     var camlQuery = new SP.CamlQuery();
  13:     camlQuery.set_viewXml(query);
  14:  
  15:     activitiesCollection = list.getItems(camlQuery);
  16:     context.load(activitiesCollection , 'Include(Title)');
  17:     context.executeQueryAsync(GetActivitiesSuccess, QueryFailure);
  18: }
  19:  
  20: function GetActivitiesSuccess(sender, args) {
  21:     var listItemEnumerator = activitiesCollection.getEnumerator();
  22:  
  23:     $('ul.activities').children().remove();
  24:  
  25:     while (listItemEnumerator.moveNext()) {
  26:         var oListItem = listItemEnumerator.get_current();
  27:         $('ul.group-activity-container').append("<li>" + oListItem.get_item('Title') + "</li>");
  28:     }
  29: }
  30:  
  31: function FailureCallback(sender, args) {
  32:     alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());  
  33: }

En resumen, esto ha sido sólo un ejemplo de qué tipo de cosas podemos hacer con ECMAScript. Si tenéis interés en que amplie algún punto concreto no dudéis en añadir un comentario a este artículo.

domingo, 13 de febrero de 2011

SharePoint 2010 de principio a fin

Este fin de semana he tenido, por fin, el placer de disfrutar de un libro que tenía en mi lista de lecturas desde hacía ya algún tiempo. Se trata del libro de Gustavo Vélez, Juan Carlos González y Mario Cortés: SharePoint 2010 de principio a fin. Mis espectativas con respecto a este libro eran más bien altas, debido a la calidad de sus autores, y os tengo que decir que no me ha defraudado en absoluto.

En mi trabajo en ocasiones tengo que dar cursos de SharePoint o resolver dudas puntuales y sé lo difícil que es dar información clara y concisa sobre esta tecnología sin quedarte demasiado en la superficie. En este libro, los autores son capaces de hacer un análisis exhaustivo de la mayoría de aspectos de la plataforma, con un lenguaje apto para todos los públicos, pero a la vez ofreciendo información de interés con suficiente nivel de detalle como para dejar satisfechos a los más exigentes.

Los primeros capítulos del libro hablan sobre instalación y administración del sistema, así como sobre la jerarquía de elementos que necesitamos conocer para entender SharePoint. Los siguientes capítulos entran en detalle en el mundo del desarrollo, y de todas las opciones que nos ofrece la plataforma. Finalmente, los últimos capítulos analizan conceptos avanzados como inteligencia de negocios o aplicaciones compuestas.

Si queréis iniciaros con SharePoint, o si queréis ampliar la información sobre cualquiera de sus partes, os recomiendo la lectura de este libro. Si trabajáis habitualmente con esta tecnología, en vuestra biblioteca no puede faltar un libro escrito por los que para mí, son algunos de sus mayores referentes en nuestra lengua.

Podéis ver este libro y muchos otros aquí.