[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…

SharePoint 2010 BCS en Visual Studio

En el anterior artículo, SharePoint 2010 BCS en el Designer, veíamos las posibilidades de BCS con SharePoint Designer, en este artículo hablaremos sobre el potencial enorme que encontramos en el BCS pero desarrollándolo con Visual Studio 2010.

Veamos un ejemplo para entender mejor el desarrollo de un tipo de contenido externo desde la visión del desarrollador. Para esto vamos a crear una entidad BCS que obtenga los datos de los clientes de un ERP y el estado de los contactos en LinkedIn, utilizando la API REST de este servicio. Todo esto será presentado en SharePoint sin que el usuario tenga que intervenir en las consultas.

Utilizaremos la nueva plantilla de proyecto Business Data Connectivity Model de la sección SharePoint 2010 de Visual Studio. Esta plantilla nos crea, por defecto, una clase con la Entidad, una clase con el servicio de la entidad y una definición del modelo BCS.

El archivo de Entity1.cs describe el esquema de la entidad y se modela como una clase típica con propiedades públicas. 

   1: namespace CustomerBDC.CustomerBdcModel

   2: {

   3:     /// <summary>

   4:     /// This class contains the properties for Entity1. The properties keep the data for Entity1.

   5:     /// If you want to rename the class, don't forget to rename the entity in the model xml as well.

   6:     /// </summary>

   7:     public partial class Customer

   8:     {

   9:         //TODO: Implement additional properties here. The property Message is just a sample how a property could look like.

  10:         public int CustomerId { get; set; }

  11:         public string Name { get; set; }

  12:         public string LinkedInName { get; set; }

  13:         public string LinkedInStatus { get; set; }

  14:     }

  15: }

El archivo de Entity1Service.cs proporciona la implementación para los métodos CRUD (Create, Read, Update, Delete). El servicio necesita la implementación, como mínimo de dos métodos. El primer método, ReadItem (en el ejemplo GetCustomer), permite recuperar un registro específico desde el almacén externo basado en un identificador. Esto se asigna a los metadatos XML como un método de instancia del tipo SpecificFinder. El segundo método, ReadList (en el ejemplo GetList), recupera todos los registros desde el almacén externo. Esto está asignado en los metadatos XML como una instancia de método de Finder.

 

 

   1: namespace CustomerBDC.CustomerBdcModel

   2: {

   3:     /// <summary>

   4:     /// All the methods for retrieving, updating and deleting data are implemented in this class file.

   5:     /// The samples below show the finder and specific finder method for Entity1.

   6:     /// </summary>

   7:     public class CustomerService

   8:     {

   9:         public static Customer GetCustomer(int customerId)

  10:         

  11:         public static IEnumerable<Customer> GetList()

  12:  

  13:         public static void Update(Customer customer)

  14:     }

  15: }

Ahora toca implementar la lógica necesaria para la ejecución de los métodos que queremos proporcionar en nuestra entidad BCS. Desde la clase del servicio tenemos un abanico enorme de posibilidades de conexión: LINQ TO SQL, Entity Framework, SOAP, WCF, etc.

Para la entidad del ejemplo, vamos a generar un DBML de LINQ TO SQL para obtener la información de nuestra base de datos de clientes, e implementaremos los métodos de nuestro servicio, inclúida la llamada al API REST de LinkedIn para obtener el estado de un usuario concreto de este servicio.

   1: public static Customer GetCustomer(int customerId)

   2: {

   3:     using (var context = new AdventureWorksDataClassesDataContext(connString))

   4:     {

   5:         Customer customer = (from c in context.Contacts

   6:                              where c.ContactID == customerId

   7:                              select new Customer 

   8:                              {

   9:                                  CustomerId = c.ContactID,

  10:                                  Name = c.FirstName + " " + c.LastName,

  11:                                  LinkedInName = c.EmailAddress

  12:                              }).FirstOrDefault();

  13:  

  14:         //TODO: Obtener los datos de LinkedIn utilizando la API REST

  15:  

  16:         return customer;

  17:     }

  18: }

Una vez creada nuestra entidad y el servicio, nos toca modelar la entidad externa, asociarla con la entidad y crear y asociar los métodos que estarán disponibles.

BCSvs_1

Para crear los métodos SpecificFinde y Finder utilizaremos la ventana BDC Method Details y le asociaremos la entidad y el método correspondiente del servicio.

Ya sólo nos quedaría hacer el deploy del BCS y crearnos una External List en SharePoint para hacer uso de él.

BCS nos presenta un gran potencial que nos permite desarrollar múltiples aplicaciones en SharePoint, integradas con nuestras aplicaciones actuales de negocio y mejorar el trabajo diario de nuestros usuarios. Tendremos que empezar a pensar en ellas y en todas las posibilidades que nos ofrece para extraerle todo el jugo y ofrecer mejores soluciones sobre SharePoint.

 

Saludos a todos…

SharePoint 2010 BCS en el Designer

En una implantación común de un portal de colaboración, como SharePoint, siempre llegamos al punto de necesitar conectar con algunos datos externos. Los usuarios progresan y se van adaptando a la nueva filosofía de trabajo, cargan documentos, utilizan los flujos de trabajo para mejorar la gestión de la información, emplean formularios para obtener información y al final necesitan poder conectarse a otros sistemas para tener toda la información accesible desde el portal.

SharePoint 2007 facilitaba esta situación mediante el uso de los Business Data Catalog (BDC). Estos catálogos eran ficheros XML que definían la relación entre SharePoint 2007 y  los datos externos, y se podían representar con Web Parts, en columnas dentro de una lista o mediante la búsqueda.

BDC nos creaba grandes dolores de cabeza. es muy difícil crear soluciones sin un buen diseñador. Otro problema era hacer que esos datos se pudieran actualizar, ya que la facilidad de BDC permite hacer conexiones de sólo lectura y parece que no se pensó para conexiones de actualización de los datos.

Business Connectivity Services (BCS), nuevo en SharePoint 2010, se centra en todas las conexiones posibles a nuestros datos. Mejora las capacidades de la plataforma de SharePoint con características out-of-box, servicios y herramientas que optimizan el desarrollo de soluciones con profunda integración de datos externos y servicios. Por ejemplo, en SharePoint 2010 es fácil crear un tipo de contenido externo con SharePoint Designer, crear una lista de externa en la interfaz de usuario y tener la lista sin conexión en Outlook como un conjunto de contactos y poder realizar actualizaciones en Outlook y que esos cambios se hagan efectivos en el sistema externo.

Para crear los BCS disponemos de dos herramientas de diseño, SharePoint Designer 2010 y Visual Studio 2010. SharePoint Designer permite a los usuarios avanzados crear soluciones BCS, incluyendo la capacidad para definir tipos de contenido externos y listas externas para crear soluciones simples. Visual Studio proporciona al desarrollador profesional la capacidad de crear soluciones avanzadas aprovechando este marco.

Tipos de Contenido Externo

Lo primero que tenemos que crear para enlazar a datos externos es un Tipo de Contenido Externo. Este lo podemos crear desde nuestro sitio de SharePoint o directamente desde SharePoint Designer.

BCSDesigner_1

Por ejemplo, vamos a crear un BCS para conectar con los datos de los empleados de una aplicación de Recursos Humanos. Para ello creamos el External Content Type, le ponemos un nombre y seleccionamos el tipo de elemento que va a representar (en nuestro caso va a ser Contact, pero podría ser Generic List, Appoinment, Task o Post).

Ahora tenemos que enlazar este tipo de contenido externo con nuestro sistema externo, la aplicación de Recursos Humanos. Para conectarnos a estos sistemas tenemos tres opciones, .NET Type, SQL Server o WCF Service. Y creamos las operaciones que van a estar accesibles desde SharePoint.

BCSDesigner_2

Para crear las operaciones tenemos un asistente que nos permitirá elegir que campos van a devolverse en las consultas, que campos se van a actualizar e incluso nos permite mapear los campos de la entidad externa a los campos del tipo de contenido que hemos elegido, en este caso es Contact.

Una vez creado el Tipo de Contenido Externo podemos crear una nueva lista externa y utilizarla para visualizar el contenido o actualizarlo desde nuestro SharePoint o incluso desde nuestro Outlook.

BCSDesigner_3

Aunque BCS es una muy buena funcionalidad de SharePoint 2010, tendremos que ser cautos y probar bien la carga de trabajo con las conexiones externas para no encontrarnos con alguna sorpresa en nuestros servicios.

 

Saludos a todos…

Curso de Evolución del Acceso a Datos en Tenerife

La semana del 24 de Mayo se ha organizado un curso en Tenerife sobre la Evolución de la plataforma de Acceso a Datos en .NET y tendré el placer de impartirlo.

Este curso pretende dar a conocer los modelos actuales de acceso a datos en .NET Framework y como aplicarlos para acceder a bases de datos desde los distintos tipos de aplicaciones que permite la plataforma. Nos centraremos en la versión .NET Framework 4.0 y en Visual Studio 2010.

La duración es de 20 horas y el contenido será:

  1. Introducción a ADO.NET
  2. LINQ
  3. LINQ to SQL
  4. Entity Framework
  5. WCF Data Services

Esperamos que sea el primero de una larga serie de cursos en Tenerife orientados a .NET y Visual Studio 2010.

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.

 

Saludos a todos…