SQL Server 2008: Como lanzar Report Builder 2.0 desde el Report Manager!

En el último post sobre SQL Server 2008, os hablaba sobre la instalación del SP1 tanto de SQL Server 2008 como de Report Builder 2.0. Sin embargo, hay algo que la instalación de este SP1 no soluciona: lanzar el Report Builder 2.0 desde el Report Manager (como sabéis, esta es la aplicación web desde la que podemos gestionar los elementos de SQL Server Reporting Services que tenemos en el servidor: informes, modelos de datos, fuentes de datos, etc). Pero veamos que efectivamente esto es así:

  • Lanzamos el navegador y especificamos la url del Report Manager (normalmente algo así como /ReportServer">/ReportServer">/ReportServer">http://<ServerName>/ReportServer.
  • Desde la página principal del Report Manager podemos crear informe con Report Builder a través del botón Generador de informes.
  • Si lo pulsamos, veremos para nuestra sorpresa que a pesar de que estamos en una máquina con el SP1 de SQL Server 2008 recién instalado, se lanza Report Builder 1.0 en lugar del esperado 2.0.
  • ¿Hay solución para esto? Pues sí, y es la misma que ya teníamos antes del SP1 de SQL Server 2008. Si abrimos una ventana del navegador y especificamos la siguiente url:

http://<servername>/ReportServer/ReportBuilder/ReportBuilder_2_0_0_0.application

image image image

  • Veremos que se lanza vía ClickOnce la aplicación de Report Builder.
  • Pulsamos Run una vez que termina el proceso de verificación de requisitos y esperamos a que se descargue la aplicación (como sabéis, esto sólo ocurre la primera vez que se lanza la aplicación).
image image image

  • Una vez que acaba el proceso de descarga, veremos que se abre el deseado Report Builder 2.0.
  • Por lo tanto, si pudiéramos especificar el parámetro anterior en algún sitio de la configuración de Report Server, solucionamos el pequeño inconveniente de que se lance Report Builder 1.0 en lugar de Report Builder 2.0…y la papeleta la solucionamos a través de las opciones de configuración del propio sitio de Report Manager…como podéis comprobar, en la pantalla de configuración tenemos un espacio en el que podemos especificar la url del Report Builder 2.0. Especificamos la url anterior y listo, ahora si se lanzará Report Builder 2.0 desde el report manager.
image image

Espero que este tip os sirva de utilidad.

Windows 7: En unas semanas tendremos la RC!

Aunque ya se sabía que para mayo tendríamos lista la release candidate (RC) de Windows 7, todavía no se sabía una fecha aproximada para su disponibilidad. Pues bien, ya se empiezan a ver los primeros posts en la red comentado que la fecha oficial para la RC será el 5 de mayo…vamos, que en dos semanas ya dispondremos de una versión de Windows 7 que ya veremos si se parece mucho o no a la RTM que saque Microsoft para el último cuatrimestre del año.

Aquí os dejo un par de enlaces a posts sobre el tema en la red:

SQL Server 2008: Instalación del SP1 (también de Report Builder 2.0)!

Cómo sabéis, hace unos días se liberó el primer service pack (SP1) de SQL Server 2008, asique aprovechando los ratos ociosos del evento de movilidad que tuvimos en el CIIN con el amigo Eduardo, me puse a instalar tanto SQL Server 2008 SP1 como Report Builder 2.0 SP1 en una máquina sin SharePoint y en otra con SharePoint (WSS 3.0). Asique, aquí me tenéis contando la experiencia…ya veréis que es un Next –> Next.

Instalando SQL Server 2008 SP1

Tras descargar el SP1 de SQL Server 2008, los pasos de instalación son realmente sencillos:

  • En la primera pantalla, tras comprobar  que todas las actualizaciones se realizarán de forma correcta, pulsamos Next.
  • Aceptamos la correspondiente licencia y pulsamos Next.
  • Como la máquina tiene SQL Server 2008, elegimos los componentes a actualizar en nuestra instalación y pulsamos Next.
image image image
  • En la siguiente pantalla, simplemente se realiza un chequeo de aquellas aplicaciones y servicios a las que puede afectar la actualización y que necesariamente tienen que estar parados. Una vez acabado el chequeo, pulsamos Next.
  • En la siguiente pantalla simplemente se recoge un resumen de los componentes a actualizar. Pulsamos Next.
  • A continuación, esperamos unos minutos a que la actualización se realice (es bastante rápido) y una vez que acabe el proceso pulsamos Next.

image image image

  • Una vez que comprobamos que la actualización se ha realizado con éxito, simplemente pulsamos Next.
  • Finalmente, concluimos el proceso pulsando Finish.
image image

Instalando Report Builder 2.0 SP1

Si instalar el SP1 de SQL Server 2008 es sencillo, más lo es el de Report Builder 2.0. Tras descargarlo del correspondiente enlace, los pasos de instalación son:

  • Confirmar que vamos a actualizar la versión existente de Report Builder 2.0 que tenemos instalada.
  • En la siguiente pantalla, simplemente pulsamos Next y lo mismo en la pantalla de aceptación de acuerdo de licencia.
image image image

image image image
  • Pulsamos Installa para que se inicie la instalación y listo.

image image

Y hasta aquí llega este primer post en torno a la instalación de SQL Server 2008 SP1 y Report Builder 2.0 SP1. En breve, las próximas entregas.

Windows Vista: Error en el servicio Servicio de perfil de usuario al iniciar sesión. No se puede cargar el perfil de usuario!

Pues ese es el error o mensaje descriptivo que esta mañana me daba el sobremesa de la oficina cada vez que intentaba iniciar una sesión con mi usuario…tras varios reinicios (que otras veces funcionan), no había forma de solucionar el problema…por suerte gracias a Google y a que este problema es bastante común, encontré la solución que os reproduzco:

  • Al encender el ordenador, hay que forzar pulsando F8 que aparezcan los distintos tipos de inicio de Windows. Elegimos el modo seguro.
  • Una vez que hemos entrado en modo seguro, a través de la búsqueda o el ejecutar de Windows tecleamos regedit.
  • En el directorio del registro, buscamos HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList.
  • Tienen que aparecer dos registros idénticos salvo en qué uno de ellos termina en .bak y el otro no. Intercambiamos los papeles renombrando a .bak el registro que no tiene esta extensión.
  • Exportamos este registro para tener una copia de seguridad por si volvemos a tener el mismo problema.
  • Reiniciamos el equipo y ya podemos volver a entrar con nuestro perfil de usuario y respirar tranquilos.

Seguro que a más de uno este tip le vendrá bien…a mí desde luego me salvó de un buen apuro.

De SharePoint o Office 14 nada: la próxima versión se llamará SharePoint 2010!

Al fin empezamos a ver movimiento, tras tanto secretismo, dentro del equipo de producto de SharePoint. Y es que se acaba de hacer público (veremos si se mantiene) a través del blog del equipo de producto de SharePoint que la nueva versión de SharePoint (del actual MOSS) se va a llamar SharePoint 2010. ¿Y WSS? Pues puede ser que se llame WSS 4.0, pero mi bola de cristal no lo vislumbra todavía ;-).

Microsoft Office 2007 SP2: ¿Para el 28 de abril?

Parece que se confirma que para este finales de este mes tendremos el esperado service pack 2 (SP2) de Microsoft Office 2007 que afecta tanto a los clientes Office como a los servidores (WSS 3.0 & MOSS fundamentalmente, aunque también afectará a Project Server 2007. Sólo por repetir algunos de los cambios, en la parte de cliente tendremos cambios en los formatos de documento soportados. Tendremos soporte para ODF (Open Document Format), especificaciones propias de XPS y PDF de Microsoft. Veremos también mejoras en el rendimiento de Outlook (a ver si es verdad, que últimamente está dando un montón de problemas), la posibilidad de exportar modelos UML creados con Visio a XML, etc.

En la parte de servidor, tendremos mejoras en el ECM (Enterprise Conten Management) de MOSS, mejoras en el proceso de aprobación en Microsoft Office Project Server o mejoras en BD’s read only y archivos de indexación entre otros.

Por otro lado, también está cerca la versión RTM para descargar del SP2 de Windows Vista (yo ya tengo una versión RTW, que ya he visto que tiene algún fallito en mi Vista Ultimate 64 Bits). Lo dicho, estad alerta!

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.