Azure y Windows Phone 7 en la Tenerife Lan Party – Innova 2k10

La semana del 20 al 25 de Julio se celebra en Tenerife la quinta versión de la Lan Party.

tlpInnova

TLP+innova (TLP+i) representa el lado profesional de TenerifeLanParty surgiendo como una consecuencia natural del desarrollo del evento a través de sus cuatro anteriores ediciones.

TLP+i apuesta por un modelo de formación, comunicación e intercambio de información como objetivo. Con este fin, la organización elabora un catálogo de cursos, talleres, mesas redondas y conferencias que contribuyan a la formación tanto de cualquier profesional del sector tecnológico como de aquellos que deseen iniciarse en él, produciendo en ambos la sensación de haber obtenido un grato rendimiento de su visita a TLP.

Y allí estaremos, el amigo José Fortes y un servidor, hablando de Cloud Computing con Microsoft Windows Azure y de desarrollo con Windows Phone 7. Estamos preparando una charlas y hands-on lab para que los asistentes puedan probar y ver, in situ, estas nuevas tecnologías.

wp7windows-azure-logo

Esperamos verlos a todos por allí…

2ª Edición del Curso de Evolución del Acceso a Datos en Tenerife

La semana del 5 de Julio repetiremos el curso en Tenerife sobre la Evolución de la plataforma de Acceso a Datos en .NET.

curso_evolucion

Algunos se quedaron sin ir a la primera edición y esperamos que esta segunda edición cumpla con las mismas espectativas que el anterior y que sigamos ofreciendo formación en .NET en Tenerife.

Si estáis interesados y necesitáis más información la tenemos en el Centro de Formación de General de Software de Canarias y en el documento del curso.

SharePoint 2010 BCS en Outlook

El Business Connectivity Services (BCS)  de SharePoint 2010, aparte de permitirnos conectar datos externos (SQL Server, .NET, WCF) con nuestras listas (lo pudimos ver en los dos artículos sobre Designer y Visual Studio 2010), tiene la posibilidad de Conectarse con Outlook. Si!!, podemos conectar con nuestro Outlook un External Content Type y poder realizar modificaciones sobre los datos utilizando la infraestructura que SharePoint expone con BCS.

Por ejemplo, si nos hemos creado un External Content Type y en el diseñador le especificamos el Office Item Type a Contact, esto nos va a permitir mapear los campos a los definidos para un contacto en Outlook y además, nos permite visualizar y modificar aquellos campos que sean nuevos y no tenemos mapeados.

BCS_outlook_1

Cuando seleccionamos Conectar a Outlook en este tipo de lista, se genera una solicitud en SharePoint que crea un paquete VSTO para esta lista que se instala en nuestro Windows como un complemento de Outlook.

BCS_outlook_2

Una vez instalado el AddIn de Outlook, podemos abrir un elemento de contacto así como cualquier otro elemento de contacto en Outlook y las propiedades que se han mapeado aparecen en el sitio correspondiente dentro del formulario de contactos de Outlook. Y la información adicional aparece en el mismo formulario de contacto pero en una sección especial para esos campos, dándonos la opción de poder modificar esos datos al cache local de Outlook y así poder sincronizar los cambios con SharePoint, que se encarga de realiza la sincronización con el origen externo.

BCS_outlook_3

Esta opción nos permite conectar un origen externo, a través de SharePoint, con nuestro cliente de Outlook, e incluso, poder ver aquellos campos personalizados que no existen en el formulario estándar de Outlook. Esta característica nos facilita crear implementaciones y poder utilizar las herramientas que un usuario conoce y domina para poder hacer uso de la información disponible.

Pensemos en la posibilidad de conectar la información de Exchange o Active Directory con la aplicación de RRHH de la empresa y que los usuarios pueda visualizar a los empleados de la corporación desde los contactos de Outlook junto con la información pública de la aplicación de RRHH, como por ejemplo, Centro de Trabajo, Vacaciones, etc.

 

Saludos a todos…

SharePoint 2010. No sólo es cuestión de RAM

Hace unos días empezamos un proyecto de BI (Business Intelligence) y para la capa de presentación de los datos vamos a utilizar SharePoint 2010 y el nuevo servicio de PerformancePoint.

Pasadas unas horas de la instalación de SharePoint 2010, en los servidores del cliente, nos encontramos con un error en la nueva sección Revisar problemas y soluciones.

sharepoint2010_errormemoria_1

¿Sin espacio? ¿Cómo que se está quedando sin espacio? Pero si el servidor tiene 80Gb de disco y sólo hemos instalado SharePoint 2010 Enterprise, con lo que nos tiene que quedar unos 40Gb. Vamos a ver el detalle de este mensaje:

sharepoint2010_errormemoria_2 

¿El espacio disponible es dos veces menor que el valor de la memoria física? Cierto, tenemos 20Gb de Memoria RAM (buen servidor) y el espacio disponible en disco, según este umbral de error, debería de ser como mínimo del doble de la memoria RAM.

La página de especificaciones de Microsoft, para un servidor en producción necesitamos dos veces de memoria RAM de espacio libre en disco. Recordemos que SharePoint no deja de ser una aplicación web ASP.NET (con algún que otro añadido) y que se ejecuta en la memoria del IIS, haciendo un intensivo uso de la memoria RAM.

Un ejemplo claro de que tenemos que alinear los recursos físicos de la máquina con las necesidades reales del software, no porque le metamos 20Gb de RAM vamos a tener un servidor plenamente funcional sin tener en cuenta el espacio libre que pueda necesitar en disco duro para manejar esa cantidad de memoria.

 

Saludos a todos…

SharePoint 2010. Save Conflict

Una de las dudas que surgieron en el Webcast de Client Object Model fue sí era posible controlar la concurrencia en las actualizaciones desde el API. La pregunta fue: ¿Al trabajar de manera asíncrona, cómo podemos controlar actualizaciones concurrentes de varios usuarios?

La respuesta fue fácil: Pues me alegra que me hayas hecho esa pregunta, no había reparado en esa posibilidad y no tengo respuesta.

Pues bien, después de algunas indagaciones y de algun que otro ejemplo con SharePoint, he encontrado una respuesta.

Recordemos que estamos trabajando sobre SharePoint y que los conflictos de versiones los resuelve con el siguiente mensaje:

sharepoint2010_saveconflict_1

Esto obliga al usuario a volver a la lista, actualizar el navegador y reescribir los cambios que había realizado en el elemento para actualizarlo. La solución no es mala, pero es un problema que se le deja al usuario para resolver.

Bien, ahora que sabemos como se resuelven los conflictos en SharePoint, nos podemos imaginar como se van a resolver desde el Client Object Model. Si provocamos este tipo de conflicto desde Silverlight, utilizando el Client Object Model, la llamada al ExecuteQueryAsync no se ejecuta satisfactoriamente y se lanza una exception, que capturamos con el ClientRequestFailedEventHandler, que nos cuenta lo siguiente:

sharepoint2010_saveconflict_2

 

Al final tenemos algo parecido a lo que se obtiene si provocamos el conflicto desde la aplicación web de SharePoint, un tipo de error Microsoft.SharePoint.Client.VersionConflictException, que nos obliga a ayudar al usuario a recargar los datos y que vuelva a escribir los cambios para que se produzca la actualización.

Simplemente SharePoint utiliza un control de versiones para identificar que, tanto el Cliente Object Model como el API de servidor, realizan los cambios y las actualizaciones sobre la última versión que se encuentre almacenada en el servidor.

 

Saludos a todos…

[SUGES] Presentación Webcast SharePoint desde cliente

(Actualizado)

Después del Webcast de ayer en Suges sobre el nuevo Client Object Model de SharePoint 2010, y con algunos problemillas con la conexión a internet y el audio, os dejo la presentación y el código que he usado para las demos.

Hay que tener en cuenta que para las demos se ha usado un SharePoint Foundation 2010 y algunas listas con datos, si alguno las quiere que me las pida y se las hago llegar.

Tenemos el contenido en la web de Suges o en mi skydrive:

Saludos a todos…

SharePoint 2010. No se puede cargar el tipo IDataServiceUpdateProvider

Cuando empezamos con el servicio Data Services de SharePoint 2010, navegamos al servicio ListData.svc y obtenemos el siguiente error:

sharepoint2010_error_idataserviceupdateprovider

Lo primero que tenemos que revisar es si existe el ensamblado System.Data.Services en la GAC (Global Assembly Cache). Exista o no el ensamblado en la GAC, posiblemente no sea la última versión de ADO.NET Services 1.5.

Esta versión, que es la que utiliza SharePoint para su servicio REST de listas, se instala con el Update de ADO.NET Data Services para .NET 3.5 SP1.

La actualización la tenemos en dos versiones:

Windows 7 y Windows Server 2008 R2

Windows 2000, Windows XP, Windows Vista, Windows Server 2003 y Windows Server 2008

Una vez instalada la actualización, podremos navegar y hacer uso del servicio REST de listas de SharePoint 2010 (ListData.svc).

sharepoint2010_error_idataserviceupdateprovider_2

 

Saludos a todos…

[SUGES] Webcast SharePoint 2010 desde cliente. No tengas miedo.

El miércoles 9 de junio me lanzó con un Webcast en SUGES sobre las nuevas API de cliente que han desarrollado en SharePoint 2010.

suges 

En este evento se hablará sobre cómo se puede comenzar con el uso del modelo de objetos de cliente en SharePoint 2010. El modelo de objetos de cliente es un nuevo modelo de objeto que se introdujo en el SharePoint 2010, cuyo objetivo es facilitar las cosas para el desarrollador al crear aplicaciones de cliente para SharePoint.

Espero verlos a todos!!

Enlace de registro del evento: https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032451336&EventCategory=4&culture=es-ES&CountryCode=ES

No olvidéis tener instalado Microsoft Office Live Meeting (lo podemos descargar en el siguiente enlace)

Entity Framework Self-Tracking, paso a paso

Cuando trabajando con Self-Tracking es recomendable separar las entidades del modelo para poder incluir estas en el cliente del servicio WCF.

Uno de los métodos para conseguirlo, es el de separar las entidades y mover la plantilla T4 que las genera en una librería de clases separada. Si movemos la plantilla, tenemos que modificarla para que la variable inputFile contenga la ruta relativa al fichero edmx.

SelfTracking_0

Otra de las opciones para separar las entidades es la de mantener la plantilla T4 en el proyecto original, deshabilitar la generación de código y crear un enlace en el otro proyecto para que se genere el código de la plantilla en este proyecto por separado del modelo. Veamos este método con un ejemplo.

Partamos de un proyecto como el siguiente:

SelfTracking_1

Lo que queremos es generar las entidades Self-Tracking y separarlas en un nuevo proyecto llamado Entities. Primero generamos las plantillas Self-Tracking, para esto con el botón derecho en el modelo y seleccionamos Add Code Generation Item, y elegimos la plantilla ADO.NET Self-Tracking Entity Generator.

SelfTracking_2

Este proceso nos genera dos plantillas, una con el Context y la otra con las Entidades.

SelfTracking_3

Deshabilitamos la generación de código para cada una de las plantillas que tenemos. Para esto, nos vamos a las propiedades del fichero tt, eliminamos el Custom Tool que tiene TextTemplatingFileGenerator y eliminamos los ficheros que se hayan generado.

SelfTracking_4

Con esto le especificamos al proyecto que no genere el código de las plantillas.

Ahora tenemos que enlazar la plantilla de las entidades con el proyecto Entities. Lo hacemos añadiendo un elemento existente al proyecto, seleccionamos la plantilla Model.tt del proyecto Model y seleccionamos añadir con enlace. No nos olvidemos de añadir una referencia a System.Runtime.Serialization en el proyecto Entities, porque las entidades utilizan los atributos DataContract y DataMember que son usados para serializar con WCF.

SelfTracking_5

Ahora enlazaremos el Context al servicio WCF. Seguimos el mismo paso que con las entidades, pero añadiendo como enlace la plantilla Model.Context.

Una vez añadido, le tenemos que especificar que genera las clases con el mismo espacio de nombres que las entidades, para esto vamos a las propiedades de la plantilla Context y en Custom Tool Namespace le ponemos Entities (que es el namespace del proyecto de las entidades).

La opción correcta pasa por modificar la plantilla del Context y añadirle en el WriteHeader el using del proyecto de Entities.

SelfTracking_8

No nos olvidemos de añadir las referencias al proyecto de Entities y la del sistema System.Data.Entity

Con estos pasos nuestra solución quedaría como la siguiente imagen:

SelfTracking_7

Un proyecto con las entidades Self-Tracking, un proyecto con el modelo y un proyecto con el servicio WCF y el contexto de Entity Framework.

Con esta separación en proyectos, nos permitiría crearnos un cliente, por ejemplo WPF, de nuestro servicio WCF y utilizar las clases que del proyecto Entities en este cliente para hacer uso del seguimiento de los cambios que se han implementado con Self-Tracking.

 

Saludos a todos…

Máquina Virtual de SharePoint 2010 RTM

Se ha publicado la máquina virtual con la demo de SharePoint 2010 para la versión RTM.

http://www.microsoft.com/downloads/details.aspx?FamilyID=751fa0d1-356c-4002-9c60-d539896c66ce&displaylang=en

Son dos máquinas virtuales, una con Exchange Server 2010 y la otra con lo siguiente:

  • Windows Server 2008 R2 Standard Evaluation Edition x64, como controlador de dominio para “CONTOSO.COM” 
  • Microsoft SQL Server 2008 R2 Enterprise Edition con Analysis, Notification, y Reporting Services
  • Microsoft Office Communication Server 2007 R2
  • Microsoft Visual Studio 2010
  • Microsoft SharePoint Server 2010 Enterprise Edition
  • Microsoft Office Web Applications
  • Microsoft FAST Search for SharePoint 2010
  • Microsoft Project Server 2010
  • Microsoft Office Professional Plus 2010
  • Microsoft Visio 2010
  • Microsoft Project 2010
  • Microsoft Office Communicator 2007 R2

Una buena opción para conocer a fondo las posibilidades de SharePoint 2010 y de los productos que viven alrededor de él.

 

Saludos a todos…