SharePoint 2013: Hotfix necesario para que la vista de explorador esté operativa!

Si estáis teniendo problemas a la hora de utilizar la vista de explorador de una biblioteca de documentos en Internet Explorer 10, muy probablemente te encuentres en la situación descrita en el siguiente artículo de la KB de Microsoft:

http://support.microsoft.com/kb/2846960

En mi caso, tengo una máquina con un despliegue de SharePoint 2013 sobre Windows Server 2012 y el error que obtengo al hacer uso de la vista de explorador es el relativo a que es necesario añadir como sitio de confianza el sitio actual…pero ni por esas:

image

Por lo que siguiendo el artículo de la KB, procedemos a descargar e instalar la actualización (KB 2903938) para Windows 8 y Windows Server 2012 descrita en el siguiente KB: http://support.microsoft.com/kb/2903938

image

Una vez instalada la actualización, toca reiniciar la máquina y probar que ya tenemos disponible la vista de explorador:

image

Si con el KB anterior no conseguís abrir la vista de explorador, os recomiendo revisar los siguientes puntos:

image

ADO.NET Data Services: Disponible la actualización para .NET Framework 3.5 SP1!

El equipo de ADO.NET Data Services acaba de liberar la actualización de esta tecnología para .NET Framework 3.5 SP1. Esta actualización permite que podamos utilizar las características de ADO.NET Data Services disponibles en .NET Framework 4.0 y Visual Studio 2010 en Visual Studio 2008 y .NET Framework 3.5 SP1. Los enlaces de descarga de la actualización son los siguientes:

  • Para Windows 7 y Windows Server 2008 R2, puedes utilizar este enlace.
  • Para el resto de versiones de Windows, puedes utilizar este enlace.

Respecto a lo que contiene esta actualización, comentaros que se trata de todas las capacidades que teníamos en ADO.NET Data Services 3.5 incluyendo la posibilidad de realizar consultas contra listas de SharePoint 2010.

ADO.NET Data Services 1.5: Como visualizar las respuestas de los servicios en formato ATOM en Internet Explorer!

Un tip muy rápido que podéis encontrar en este post del equipo de ADO.NET Data Services sobre como configurar Internet Explorer para visualizar las respuestas obtenidas en formato ATOM al realizar llamadas a servicios REST definidos con ADO.NET Data Services. Los paso son:

  • En Internet Explorer, ir a Herramientas –> Opciones de Internet.
  • En la pestaña Contenido pinchar en el botón Configuración dentro de la sección fuentes y Web Slices.
  • En la ventana que se abre, simplemente desmarcamos la opción Activar la vista de lectura de fuentes.
  • Y con esto ya podemos visualizar la respuesta de los servicios de ADO.NET Data Services en formato ATOM.

Data_Services_1

Data_Services_2

Data_Services_4

Data_Services_3

 

ADO.NET Data Services 1.5: Disponible para descarga la CTP2!

El equipo de ADO.NET Data Services acaba de anunciar la disponibilidad de la CTP 2 de ADO.NET Data Services v1.5. Como novedad de la segunda CTP de ADO.NET Data Services 1.5, descargable a través de este enlace, comentaros que se asienta sobre .NET Framework 3.5 SP1 y Silverlight 3, si bien las características incluidas formarán parte de la versión final de .NET Framework 4.0. En cuanto a las novedades en sí, os hago un resumen rápido de lo que se comenta en el post que anuncia la disponibilidad de la CTP2:

  • Soporte para proyecciones, de manera que el formato URI de ADO.NET Data Services permite trabajar en cliente y servidor con un subconjunto de las propiedades de una entidad. Además, se añade soporte a LINQ y otras capacidades de los lenguajes .NET como tipos anónimos.
  • El Data Binding se ha extendido para que soporte Two-Way Data Binding.
  • Mejoras a la hora de conocer el número total de registros para una cierta entidad.
  • Feeds amigables, a través de extender el número de elementos ATOM que se pueden mapear con propiedades de una entidad.
  • Soporte para BLOB en el lado del cliente (incluido Silverlight 3).
  • Se ha introducido una nueva interfaz Data Service Provider para habilitar los Custom Providers que terceros puedan escribir e ir de esta forma más allá de Entity Framework, LINQ To SQL o clases .NET arbitrarias.

Os recomiendo también leer las FAQ que vienen con el post.

Interoperabilidad: PHP Toolkit para ADO.NET Data Services!

El equipo de interoperabilidad de Microsoft acaba de anunciar una excelente noticia: la disponibilidad del PHP Toolkit para ADO.NET Data Services. Se trata de un nuevo “puente” entre el mundo PHP y el mundo .NET que en este caso posibilita que los desarrolladores de PHP puedan utilizar la tecnología de acceso a datos en modo REST de Microsoft, o lo que es lo mismo, ADO.NET Data Services. El kit, del que ya os podéis descargar una versión en codeplex se asienta sobre la siguiente arquitectura:

Por hacer un resumen de lo que permite este Toolkit:

  • En tiempo de diseño, se trata de generar clases proxy basados en la metadata expuesta por los servicios de ADO.NET Data Services que se han implementado con Visual Studio. La clave de la generación de estas clases Proxy es la utilidad PHPDataSvcUtil (cuya filosofía es similar a su equivalente para ADO.NET Data Services)
  • En tiempo de ejecución, lo que hará el desarrollador PHP es llamar estas clases proxy de forma sencilla desde código PHP.

Os recomiendo leeros el post del equipo de interoperabilidad ya que incluye un paso a paso sobre como utilizar el Toolkit.

Jugando con ADO.NET Data Services CTP 1.5 (I)!

Desde hace unos días estoy trasteando (por no decir sufriendo) con la reciente CTP ADO.NET Data Services 1.5 (por suerte, a veces se ve la luz al final del túnel) y aunque el tema está un poco verde, ya se pueden enseñar algunas cosas. En este primer post (espero escribir alguno más) os voy a mostrar algunas novedades de ADO.NET Data Services que aparecerán tanto en la versión 1.5 como en la versión que venga con Visual Studio 2010 (se supone que aquí será la versión 2.0). En concreto, veremos el tema de la paginación en el servidor y como consumir el servicio desde una aplicación.

Definiendo el servicio y paginando en el servidor

Como sin duda sabéis, ADO.NET Data Services nos permite definir servicios de datos de tipo RESTFull sobre un cierto modelo de datos (ya sea de Entity Framework, de LINQ To SQL, de un archivo XML, objetos CLR en memoria, NHibernate, …). Realmente, se trata de una abstracción construida sobre WCF pensada para gestionar de manera centralizada los datos procedentes de este modelo a partir de proporcionar capacidades como:

  • Consultas, filtrado, ordenación, etc de datos del modelo.
  • Utilización en todo momento de protocolos estándar para exponer y acceder al modelo: HTTP + Atom. Esta es precisamente la idea de los servicios RESTFull. De hecho, ADO.NET Data Services usa HTTP como capa de mensajería lo que habilita usar comandos estándar HTTP para consumir los datos: GET, DELETE…y Atom para representar los datos devueltos.
  • Consultamos datos sin escribir código.

Estas capacidades las tenemos desde la versión 1.0 de ADO.NET Data Services. Sin embargo, en la primera versión hay una serie de problemas que se resolverán en las versiones 1.5 y 2.0. Por ejemplo:

  • Paginación de los datos, tanto en cliente como en el servidor, para evitar que el cliente consulte todas las entidades del modelo cada vez que realiza una consulta. Esto se resuelve en la versión 1.5, como veremos, con SetEntitySetAccessRule.
  • No tenemos conciencia del número de registros que tenemos en el servidor. En la versión 2.0, y seguramente en la 1.5, esto se solucionará con un nuevo operador Count que nos devuelve las filas del modelo, pero sin traerse todas las entidades en la consulta.

Pero pasemos a la acción…lo primero que vamos a hacer es definir un servicio de datos de ADO.NET Data Services v1.5 CTP1. Para ello:

  • Creamos, en Visual Studio 2008 (en Visual Studio 2010 es imposible, y lo digo por experiencia) un proyecto de tipo web.
  • A nuestro proyecto web le añadimos un Entity Data Model (EDM) de ADO.NET Entity Framework que creamos a partir de la BD AdventureWorks.
  • Una vez creado el EDM, añadimos al proyecto web un elemento de tipo ADO.NET Data Services v1.5 CTP1.
image image

Lo siguiente que haremos, es empezar a configurar el servicio de datos que acabamos de añadir. Para ello:

  • Editamos el archivo .cs asociado al servicio (que tenemos en la carpeta App_Code de nuestro proyecto web).
  • En la definición de la clase correspondiente, realizamos las modificaciones necesarias para que por un lado nuestro servicio permita consultar las entidades del EDM, y por otro se especifiquen las reglas para acceder a dichas entidades:

using System;

using System.Data.Services;

using System.Collections.Generic;

using System.Linq;

using System.ServiceModel.Web;

 

public class WebDataService : DataService<AdventureWorksModel.AdventureWorksEntities>

{

    // This method is called only once to initialize service-wide policies.

    public static void InitializeService(IDataServiceConfiguration2 config)

    {

        // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.

        // Examples:

        config.SetEntitySetAccessRule("*", EntitySetRights.All);

        // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);

    }

}

  • Como se puede apreciar, AD.NET Data Services v1.5 añade una nueva implementación para IDataServiceConfiguration (se le añade el 2 al nombre) que permite estas nuevas capacidades de paginación en el servidor para mejorar la experiencia de usuario. A continuación, a través de SetEntitySetAccessRule, hemos especificado que exponemos todas las entidades (*) y con permisos CRUD para las mismas.
  • Si ejecutamos el proyecto, veremos como efectivamente se exponen todas las entidades de nuestro modelo.
  • También podremos consultar cualquier entidad del modelo sin más que poner /<NombreEntidad> a continuación de la url del servicio de datos:
image image
  • Ahora bien, consultar entidades de la forma anterior adolece de problemas de rendimiento si el número de registros en el servidor es muy elevado…la solución está en poder añadir el mecanismo de paginado en el servidor comentado…y es tan sencillo como añadir la siguiente línea en la configuración del servicio:

        config.SetResourceSetPageSize("Product", 4);

  • De esta forma, al consultar la entidad Product el servicio nos devolverá cuatro productos y un enlace a los siguientes cuatro productos:

image

Consumiendo el servicio

Para consumir el servicio de ADO.NET Data Services creado en una aplicación (por ejemplo de consola), necesitaremos en primer lugar representar las entidades definidas en el servicio de datos. Para ello, deberíamos crearlas en nuestro proyecto, siendo dos las posibilidades que tenemos:

  • Crear estas entidades a mano desde cero en el correspondiente archivo .cs.
  • Utilizar la utilidad de comandos DataSvcUtil que tenemos en la carpeta bin del directorio de instalación de ADO.NET Data Services y que nos permite generar la representación de las entidades en el servicio en el correspondiente archivo .cs. DataSvcUtil nos da varias opciones para generar el archivo .cs (lo podéis comprobar tecleando DataSvcUtil /help), entre ellas especificar la uri de nuestro servicio de datos (es la que he utilizado en mi caso):

DataSvcUtil /out:"WebDataService.cs" /uri:"http://localhost:1382/ADO_NET_DATA_SERVICES_v1_5/WebDataService.svc/&quot;

  • Tecleando la sentencia anterior, en unos pocos segundos tendremos creado el archivo .cs que contiene las entidades definidas en el servicio de datos, y que añadiremos a nuestro proyecto.
image image image

Generado el archivo .cs que contiene la representación de las entidades de nuestro servicio de datos, ya estamos listos para consultarlo. Los pasos previos son:

  • Añadir la referencia en nuestro proyecto a los ensamblados Microsoft.Data.Services y Microsoft.Data.Services.Client.
  • Añadir las correspondientes sentencias using en nuestro archivo de código para poder utilizar estos ensamblados:

using System.Data.Services;

using System.Data.Services.Client;

Para consultar el servicio de datos, tenemos dos posibilidades:

  • En el propio contexto del servicio de datos a partir de las clases WebDataContext y WebDataQuery que forman parte de Microsoft.Data.Services.Client. Simplemente, lo que tendremos que hacer es crear una instancia de un objeto WebDataContext que nos permite consultar las entidades del servicio de datos a partir de la Uri del mismo y a continuación crear una instancia de WebDataQuery en el que especificaremos (por ejemplo) la entidad a consultar en un estilo similar a las consultas que hacemos a través del navegador:

            Uri uService =

                new Uri("http://localhost:1382/ADO_NET_DATA_SERVICES_v1_5/WebDataService.svc&quot;);

            DataServiceContext ctx =

                new DataServiceContext(uService);

 

            DataServiceQuery<Product> Products = ctx.CreateQuery<Product>("/Product");

 

            foreach (var product in Products)

            {

                Console.WriteLine(product.Name);

            }

 

            Console.ReadLine();

  • Utilizando el contexto del servicio de datos disponible con la clase DataServiceContext, lo que nos permite definir consultas LINQ facilitando la realización de estas consultas al servicio de datos. En este caso, el código para consultar el servicio es todavía más intuitivo:

            AdventureWorksEntities ctx2 =

                new AdventureWorksEntities(uService);

 

            var q = from p in ctx2.Product

                    select p;

 

            foreach (var product in Products)

            {

                Console.WriteLine(product.Name);

            }

La salida por pantalla generada por estas dos alternativas de consulta del servicio de datos es la siguiente:

image

Como podéis apreciar, se siguen devolviendo cuatro productos tal y como definimos en la configuración del servicio. Y nada, hasta aquí llega este primer post sobre ADO.NET Data Services. Espero que os resulte interesante.

ADO.NET Data Services CTP 1.5 y primera Alfa del proyecto Astoria Offline!

Como de esto me va a tocar probar alguna cosa, os cuento que ya tenemos disponible la primera versión medianamente (alfa en este caso) trasteable del proyecto Astoria Offline cuyos primeros fundamentos fueron presentados en el pasado PDC 2008 en Los Ángeles (más en concreto por Pablo Castro, sesión en la que estuve presente y que dejó a la audiencia con la boca abierta). Esta primera Alfa de Astoria Offline, que os podéis descargar desde este enlace, se ha liberado para que la comunidad la pueda probar y dar su opinión en torno a la misma…para los no iniciados y muy brevemente, Astoria Offline es la versión de ADO.NET Data Services (conocido inicialmente como Astoria) que estará preparada (si ve la luz) para permitir escenarios de trabajos con datos en modo desconectados.

Por otro lado, aprovecho este post para comentaros que desde la semana pasada tenemos disponible la CTP 1.5 de ADO.NET Data Services y que el equipo está trabajando a tope para liberar lo antes posible la RTM de ADO.NET Data Services.