domingo, 19 de mayo de 2013

[Reporting Service] [Dynamic CRM] - Integrar con google maps (1/2)

 

Introducción


La utilización de mapas para aportar valor en las aplicaciones es un aspecto cada vez mas requerido, las aplicaciones CRM están especializadas en trabar con cliente por lo que conocer su distribución aporta valor al usuario.

En este caso uniremos tres tecnologías Dynamic CRM el cual nos aportara los datos de las cuentas, Reporting Service para el listado de información, y Google Maps para obtener la imagen del mapas que será incrustado en el reporte

Por lo extenso del articulo se realizaran dos partes, esta primera donde se verán los pasos necesarios para la creación del reporte y su edición en el Visual Studio

Una segunda parte se encargara de presentar como integrar la librería dll con el reporte y su posterior publicación en CRM.

 

Creación del reporte desde Dynamic CRM


El primer paso será definir la estructura básica del reporte, para esta tarea nos ayudaremos con el el wizard que provee CRM.

1- Creamos el nuevo reporte

image

 

2- Se define como entidad primaria al cliente

image

 

3- Se definen los filtros si hace falta, en este caso solo listaremos los clientes de Buenos Aires

image

 

4- Se definen las columnas del reporte

image

 

5- Se aceptan los cambios validando que la entidad asociada sea la cuenta

image

 

Estos pasos nos permitirán contar con una estructura básica del reporte que mas tarde usaremos para vincular con la librería encargada de generar la imagen del mapa.

Ejecutamos el reporte para validar que este correcto

SNAGHTML20981b19

image

 

Edición Reporte desde Visual Studio 2008


El siguiente paso requiere de Visual Studio 2008 con las tools de Business Intelligence las cuales se instalan al agregar el Sql Server 2008 Express Advanced Services, este incluye el servicio de Reporting Service.

En el Visual Studio deberíamos poder crear un proyecto como el siguiente:

SNAGHTML2abc8dae

 

En CRM ubicamos el reporte y lo editamos

image

Usamos la opción para descargar el reporte como archivo rdl

image

El archivo descargado lo deberíamos ubicar en la carpeta del proyecto que creamos con el Visual Studio

image

Para luego agregarlo al proyecto

SNAGHTML2acbd8d2

 

Si editamos el reporte veremos que se conserva el diseño, así como la información de conexión y campos disponibles

SNAGHTML2acf227e

 

Es aquí donde vamos a definir la invocación a la librería que devolverá la imagen con el mapa de google representando la ubicación de los cuentas.

En el siguiente articulo veremos como crear el componente y vincularlo al reporte.

3 comentarios:

  1. Buenas noches Leandro.
    Disculpa.

    Tengo una duda que quiero consultarte.

    Tengo un reportviewer que carga un rdlc con información agrupada , los datos provienen de una vista y el tabladapter desde un procedimiento almacenado, el filtrado es entre el campo semestre(2014) y hora 1 minuto 1, hora 2 . minuto 2,(6-0 23-0).

    como puedo visualizar los registros no coincidentes en la consulta? es decir ,por ejemplo tengo 300 registros totales en la vista, al filtrar en una franja horaria me muestra 250, pero necesito ver en otro group los 50 registros restantes, como lo haría Amigo leandro?

    este es el procedimiento:


    procedure [dbo].[spbuscarReporteAulas]

    @Año varchar(20)=null,
    @Consecutivo varchar(20)=null,
    @Dia nvarchar(10)=null,
    @H1 varchar(20)=null,
    @M1 varchar(20)=null,
    @H2 varchar(20)=null,
    @M2 varchar(20)=null,
    @BloqueAula varchar(20)=null,
    @Jornada nvarchar(50)=null,
    @Sede nvarchar(50)=null,
    @TipoAula nvarchar(150)=null

    as
    SELECT Ano,Consecutivo,[Id Grupo],[Codigo Asignatura],Grupo,Asignatura,TipoAula,BloqueAula,[TotalHoras],Dia,H1,M1,H2,M2,Desde,Hasta,Aulas,Aula,Jornada,Sede,Capacidad FROM [dbo].[VISTA ] WHERE H1 >=@H1 AND M1>=@M1 AND H2<=@H2 AND M2>=@M2 AND Dia = (Case when @Dia is null then Dia else



    @Dia end)and BloqueAula = (Case when @BloqueAula is null then BloqueAula else
    @BloqueAula end)
    and Jornada = (Case when @Jornada is null then Jornada else
    @Jornada end)

    and Sede = (Case when @Sede is null then Sede else
    @Sede end)

    and TipoAula = (Case when @TipoAula is null then TipoAula else
    @TipoAula end)

    and jornada = (Case when @jornada is null then jornada else
    @jornada end)

    and Ano = (Case when @Año is null then Ano else
    @Año end)

    and Consecutivo = (Case when @Consecutivo is null then Consecutivo else
    @Consecutivo end)

    Mil gracias Leandro.

    ResponderEliminar
  2. hola Orlando

    se me ocurre que el reporte podria tener dos origenes de datos, uno que liste los 250 registros y otra vista que retorne el resto

    entonces al reporte le defines dos reportsource y dos tablas para que muestre ambos grupos de datos

    saludos

    ResponderEliminar
  3. Hola muy buenas tardes Leandro, le escribo para preguntarle respecto una duda, espero pueda apoyarme y tener una respuesta que ya me eh quebrado la cabeza, le explico la problemática que tengo actualmente con reporting services o más bien con el visor del report viewer que uso en .net.
    Tengo un proyecto en MVC 4 en .NET, ademas estoy utilizando el nuget package de reportViewer for MVC versión 1.1.1.1, esto para poder incluir el report viewer en un proyecto de MVC. Este proyecto que eh desarrollado sirve para ser llamado por otros sistemas. El sistema se comunica con reporting services, le creo toda la configuración del report viewer a partir de la petición de otro sistema para que después lo muestre en el visor. La problemática está en que cuando se realiza dos peticiones para diferente reporte a este sistema en el mismo segundo, el visor muestra el mismo reporte para las dos peticiones; lo que eh notado que si pasa del segundo las peticiones muestra los reportes en el visor que debe mostrar para cada solicitud. Lo que eh visto es que este sistema, recibe las distintas solicitudes, las procesa en backend, crea la configuración que se enviara en el reportviewer y llama al visor para que muestre el reporte liberando el backend para que empiece a procesar la siguiente solicitud, pero antes de que reporting services le envié respuesta de la solicitud y muestre el reporte, le llega la siguiente solicitud entonces ahí es cuando reporting services muestra el mismo reporte en el visor y por ende los sistemas que solicitaron reporte a ese sistema central que tengo de reportes verán en ocasiones un reporte que no solicito. Espero haberme explicado y espero pueda apoyarme, si usted sabe que es lo que puede estar pasando.

    ResponderEliminar