Instalación de Lync Server 2010

Estas últimas horas las he dedicado a instalar Lync Server 2010 en un entorno virtual. Era mi primera experiencia en ese sentido, así que tomé la precaución de ir anotando todo lo que hacía de cara a tener material para publicar un artículo en mi blog. Lo que no tuve en cuenta es que, contando capturas de pantalla, el documento iba a ocupar ¡¡¡¡más de 50 páginas!!!! y, evidentemente, no puedo publicar esto porque dudo mucho que nadie siguiera un artículo de tamaña magnitud. Lo que sí voy a hacer es dejaros algún que otro consejo que os puede resultar de interés:

Lo primero es la supuesta incompatibilidad entre Lync Server 2010 y SQL Server 2008 R2. No sé si es un problema sorteable o no, pero reconozco que a mí me estaba dando problemas al instalarlo en una máquina que disponía de SQL Server 2008 R2, por lo que opté por empezar con una máquina limpia, sin SQL, para que Lync instalase la versión de SQL Server Express que necesitaba. Aquí hay que tener en cuenta, que para el tipo de instalación que yo requería no necesitaba unas capacidades demasiado elevadas, con lo que no era necesario disponer de más de un servidor para Lync Server con su correspondiente servidor de SQL.

Otro asunto importante a tener en cuenta son los requerimientos. Con una instalación limpia de Windows Server 2008 R2, lo único que necesité instalar fue: (lo siento por los nombres pero mi instalación es en inglés)

  • Característica .NET Framework 3.5.1
  • Dentro del rol IIS, los siguientes servicios de rol: Static Content, Default Document, HTTP Errors, ASP.NET, .NET Extensibility, Internet Server API (ISAPI) Extensions, ISAPI Filters, HTTP Logging, Logging Tools, Tracing, Client Certificate Mapping Authentication, Windows Authentication, Request Filtering, Static Content Compression, IIS Management Console, IIS Management Scripts and Tools.
  • Característica Message Queuing con Directory Service integration

Además, como la máquina donde estoy instalando Lync Server 2010 no es controladora de dominio, fue necesario instalar la característica Remote Server administration Tools for AD.

A partir de aquí, páginas y páginas de asistente. También es necesario tener en cuenta aquí que yo estoy haciendo una instalación bastante básica, con lo que intenté utilizar todos los parámetros por defecto. Por favor, no utilicéis esta guía para un despliegue en producción de Lync Server 2010 (para eso ya está Technet).

La siguiente parada fue a la hora de asignar los certificados digitales. Llegados a ese punto sería necesario solicitar un certificado válido para nuestro dominio pero, para un entorno de pruebas, bastará con crearnos uno. Para ello podemos utilizar la utilidad MakeCert que podréis encontrar en muchos sitios como, por ejemplo, la carpeta c:Program FilesMicrosoft Office Servers14.0 de cualquier servidor de SharePoint 2010 que tengáis a mano. Podéis utilizar el siguiente comando.

MakeCert.exe -r -pe -n "CN=tu_dominio" -sky exchange -ss my

Este certificado necesitáreis exportarlo desde Current user / Personal  incluyendo la clave privada para poderlo importar desde el asistente de instalación de Lync Server 2010, y deberéis copiarlo además en Current user / Trusted Root Certification Authorities  y en Local computer / Trusted Root Certification Authorities (recuerdo otra vez que esto es únicamente en un entorno de pruebas)

A partir de aquí, todo coser y cantar, porque no creo que hayáis utilizado el usuario administrador de dominio para instalar el producto. Repetid conmigo: no usaré el usuario administrador de dominio para nada que no sea administrar el dominio. Bueno, en cualquier caso, si lo habéis hecho, algún consejito más:

  • Añadir, si no lo está ya, el usuario administrador al grupo CSAdministrator de directorio activo.
  • Acceder al Active Directory Administrative Center y buscar al usuario administrator

image

  • En las propiedades del usuario, y dentro del grupo Extensions pulsar el botón Advanced y marcar la opción Include inheritable permissions from this object’’s parent.

image

  • Cerrar todos los diálogos pulsando aceptar. A partir de ese momento seréis capaces de acceder al panel de control de Lync Server 2010 para habilitar a los usuarios.

 

Espero que esto os sirva de ayuda si os veis en la necesidad de instalar Lync Server 2010 pero, repito de nuevo para que quede claro, no lo toméis como una guía para desplegar el producto en producción. Buscar guías oficiales de Microsoft en Technet que os darán detalles de cada uno de los puntos y os indicarán como adaptar el despliegue a vuestras necesidades reales.

Disponible el nº 7 de la revista CompartiMOSS

Acaba de publicarse el número de Marzo de la revista CompartiMOSS, gestionada por los grandes Fabián Imaz y Gustavo Vélez, y en la que he tenido el privilegio de participar con un pequeño artículo junto con otros miembros destacados de la comunidad SharePoint hispano-hablante. Os dejo aquí el índice general de la revista junto con información sobre dónde descargarla.

  • Editorial
  • El lado social de SharePoint (Alberto Díaz Martín)
  • Autenticación en SharePoint 2010 (I) (David Martos)
  • Entrevista con Fabian Imaz
  • Business Intelligence en SharePoint 2010: Integración de Reporting Services (II)
    (Juan Carlos González Martín)
  • Los elementos web de Project Server 2010 (Juan Pablo Pussacq Laborde)
  • Custom Actions en los menús de SharePoint 2010 (Victor Cea Espejo)
  • Office 365 y SharePoint Online (Mario Cortés Flores)
  • Personalización de UI con OPENXML y VS 2010 en Microsoft Office 2010 (Alejandro Garrido)
  • Microsoft Dynamics CRM 2011 y SharePoint 2010. Mejor juntos… (Pablo Peralta)

Podréis encontrar más información aquí.

SharePoint 2010: The file ‘xxx’ is locked for shared use by ‘yyy’

No sé si os habrá pasado en alguna ocasión que vais a editar un documento y SharePoint os dice que está desprotegido por otro usuario que, curiosamente, eres tú mismo. Si os ocurre esto al pulsar el botón de guardar al editar una página wiki, es posible que se deba a que tenéis activadas las características de publicación a nivel de colección de sitios pero que no tengáis activada dicha característica a nivel del sitio que hospeda la página wiki que estáis creando. Si estáis en esta situación, activad dicha característica y el problema desaparecerá.

Al entrar en este tema destapamos un asunto sobre el que podríamos estar hablando horas referente a la mezcla de publicación y colaboración en SharePoint. Está claro que el producto nos ofrece buenas opciones en cada uno de los mundos, y más claro aún que en muchas ocasiones el mejor aprovechamiento del producto se obtendrá al usar características de los dos mundos. Estos proyectos se podrían dividir en dos grupos:

  • Una intranet colaborativa con un aspecto de portal público
  • Un portal público que permita a mis usuarios autenticados colaborar entre ellos

Cada vez que me enfrento a un proyecto y llego a este punto me saltan todas las alarmas referentes a asuntos bastante críticos que no se suelen tener en cuenta a no ser que sea un requerimiento explícito.

En el primero de los casos, una solución consiste en crear sitios básicos de SharePoint y activar las características de publicación. En ese caso el problema puede venir por comportamientos extraños del producto como el que os comentaba al inicio de este artículo. Además, si haces esto es habitual crear nuevas páginas maestras y plantillas de página para dotar al sistema de una apariencia “pública”. Cuando llega ese caso hay que tener en cuenta el aumento de costes que ello conlleva, ya que al tiempo que se dedica a diseñar una nueva apariencia para SharePoint hay que sumar todo el tiempo que se dedicará a depurar las páginas internas del sistema.

En el segundo caso, lo habitual es crear un sitio de publicación y activar las características de colaboración. En ese caso comienzan a aparecer puntos críticos que pueden verse afectados, como SEO o accesibilidad. También hay que tener en cuenta el coste que tendrá conseguir que la gestión de los contenidos de colaboración se adapte al aspecto de nuestro sitio web.

En conclusión, ambas aproximaciones son factibles, pero se debe tener en cuenta que se está haciendo algo con el producto para lo que éste no ha sido diseñado y, por lo tanto, tendrá un coste de personalización asociado mucho más elevado que el que tendría una intranet básica o un portal de publicación de contenidos.

Disponible el material del I evento presencial de SUG.CAT

Ayer tuvo lugar, en las oficinas de Microsoft de Barcelona, el primer evento presencial del Grupo de Usuarios de SharePoint de Catalunya. En el siguiente enlace podéis descargar el material que utilizamos en las dos sesiones:

http://cid-7127a829d27ab782.office.live.com/browse.aspx/SUG.CAT/Client%20OM%20and%20BCS

En mi humilde opinión, el evento resultó un éxito. Tuvimos la sala llena con alrededor de 30 personas (que de un total de 35 inscritos no está nada mal) y salvo por algunos problemas de conectividad al final de la primera sesión –la mía- todo fue más o menos sobre ruedas.

Simplemente dar las gracias a Microsoft por cedernos una sala y todo el material necesario para las presentaciones, a Edin por su presentación y a vosotros por venir y aguantarnos. Espero que sea la primera de muchas sesiones presenciales e invitaros a proponer temas a tratar, ya sea por vosotros mismos o por cualquier otro miembro del grupo.

Lamentablemente no puede ser todo bueno y olvidé darle al botón de grabar, con lo que no podréis tener acceso el webcast . Asumo toda la responsabilidad porque no tengo excusa. Para la próxima, espero acordarme…

I Evento presencial del Grupo de Usuarios de SharePoint de Catalunya

Hola a todos. Tras casi un año de existencia, y contando ya con casi 100 miembros, ha llegado el momento de celebrar nuestra primera reunión persencial. Para ello, hemos pensado que lo mejor sería organizar dos sesiones de aproximadamente una hora de duración y en las cuales hablaremos de dos de los temas que más nos han preguntado directamente: BCS y Modelo de objetos de cliente. Para ello, además de con un servidor, contaremos con la inestimable presencia de Edin Kapic.

De todas formas, espero que ésta sea la primera reunión de muchas, así que cualquier tema que os interese tratar, no dudéis en comentarlo en el grupo de Linkedin, o directamente a nosotros, bien sea para hablar vosotros mismos en otra reunión, o para pedir a alguien que prepare algo de vuestro interés.

El evento tendrá lugar el próximo Jueves, día 17 de Marzo, de 18:00 a 20:00 en las oficinas de Microsoft de Barcelona

https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032478890&Culture=es-ES

¡¡Os esperamos allí!!

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

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

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…

SharePoint 2010 y ECMAScript

Actualización 21/03/2011: aplicados comentarios en el código de hollyshit del 16/03/2011.

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.

<input id="txtActividad" type="text" class="new-activity-textbox" />

<input id="btEnviar" type="button" class="new-activity-button" value="enviar" />

 

<ul class="activities">

 

</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.

<script language="ecmascript" type="text/ecmascript">   1: 

    $(document).ready(function() {

        $(function() {

            $('#btEnviar').click(function() {

                var text = $('input#txtActividad').val();

                CreateElement(text);

            });

        });

    });

 

    function CreateElement(text) {

    }

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:

function CreateElement(text) {

    context = new SP.ClientContext.get_current();

    web = context.get_web();

    var list = web.get_lists().getByTitle("Actividades");

    var itemCreateInfo = new SP.ListItemCreationInformation(); 

    listItem = list.addItem(itemCreateInfo); 

    listItem.set_item('Title', text); 

    listItem.update(); 

 

    context.load(listItem); 

    context.load(list); 

 

    context.executeQueryAsync(CreateElementSuccess, FailureCallback); 

}

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:

function CreateElementSuccess(sender, args) {

    var list = web.get_lists().getByTitle('Activity');

 

    var query = '<View>'+

                    '<Query>'+

                        '<OrderBy>'+

                            '<FieldRef Name="Created" Ascending="False"/>'+

                        '</OrderBy>'+

                    '</Query>'+

                 '</View>';

             

    var camlQuery = new SP.CamlQuery();

    camlQuery.set_viewXml(query);

 

    activitiesCollection = list.getItems(camlQuery);

    context.load(activitiesCollection , 'Include(Title)');

    context.executeQueryAsync(GetActivitiesSuccess, QueryFailure);

}

 

function GetActivitiesSuccess(sender, args) {

    var listItemEnumerator = activitiesCollection.getEnumerator();

 

    $('ul.activities').children().remove();

 

    while (listItemEnumerator.moveNext()) {

        var oListItem = listItemEnumerator.get_current();

        $('ul.activities').append("<li>" + oListItem.get_item('Title') + "</li>");

    }

}

 

function FailureCallback(sender, args) {

    alert('request failed ' + args.get_message() + 'n' + args.get_stackTrace());  

}

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.

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í.