Imprimir con LightSwitch y ActiveReports6 (y III)

En esta tercera y última parte llegamos al final del artículo y Joan Miquel Fernandez termina mostrandonos como crear el formato de impresión y su uso en el Visor (Viewer) SilverLight de ActiveReports6 dentro de aplicaciones LightSwitch.
Comenzamos cambiando el modelo de vista del proyecto. De Logical View a File View.
En el proyecto Cliente añadimos un nuevo Item.
De tipo Active Reports 6 (Xml File) y lo llamamos report.rpx
Abrimos el fichero con Visual Studio, ya está listo para trabajar con él.
Clicamos en el Elemento Detail (clicar en el icono)
Seleccionamos la pestaña SQL y construimos la ConnectionString
Dejo un ejemplo de la ConnectionString que he utilizado, si teneis alguna duda de como se construye podeis consultar en http://www.connectionstrings.com/

 data source=.\SQLExpress;initial catalog=series;persist security info=False;user id=test;password=1234;
De todas maneras con la opción Build, la podeis construir.
Detalle de la conexión
Introducimos la query: Select * from ventas
Mediante el modo Preview podemos ir cambiando a la previsualización y con el modo Design a diseño.

Desde View/Toolbars de Visual Studio mostramos el Report Explorer 6 y arrastramos los campos al report.

Mediante el modo Preview podemos ir cambiando a la previsualización y con el modo Design a diseño.
Accedemos al proyecto ServerGenerated
Modificamos el webconfig y añadirmos los httphandlers para los rpx
 < add verb="*" path="*.rpx" type="DataDynamics.ActiveReports.Web.Handlers.RpxHandler, ActiveReports.Web, Version=6.2.3164.0,Culture=neutral, PublicKeyToken=cc4967777c49a3ff" />
Para utilizar el rpx tenemos que copiarlo en la carpeta donde se ejecute el programa
..\TestLightSwitchAR6\TestLightSwitchAR6\Client
Accedemos al proyecto cliente y copiamos el report.rpx
Lo copiamos en la carpeta debug, ojo que en Client también hay otra carpeta bin\debug ;O
TestLightSwitchAR6\TestLightSwitchAR6\Bin\Debug
Cuando ejecutemos el visor ya podemos acceder al informe report.rpx que hemos creado.
¿Qué viene ahora? – En este tutorial hemos visto el trabajo básico con el rpx. Como habeis visto no es un ejemplo funcional sino que explica que cosas hay que hacer para poder abrir un rpx desde LS. También deja sin explicar como seleccionar un grupo de registros en concreto, eso será parte del próximo tutorial, ha quedado fuera de este para no generar excesiva complejidad.
Los archivos para descarga están disponibles aquí.

http://cid-7968f234f468d7a5.office.live.com/embedicon.aspx/.Public/TestLightSwitchAR6

Imprimir con LightSwitch y ActiveReports6 (II)

En esta segunda parte Joan Miquel Fernandez continua mostrandonos la manera para añadir el Visor (Viewer) SilverLight de ActiveReports6 dentro de aplicaciones LightSwitch.

En este momento el objetivo es añadir un nuevo proyecto que aloja en su interior el user control que vamos a utilizar.

 
Con un poco de imaginación lo llamamos SilverlightARViewer 🙂

Es un proyecto tipo Silverlight 4, cuanto más se aprenda de Silverlight 4 y WPF más partido se obtiene de LS.

 

Eliminamos la clase que crea el asistente ya que en nuestro caso no nos sirve.

 
Es el momento de añadir el user Control

Sigamos en modo creativo y lo llamaremos SilverlightControlViewer

 
Añadimos la referencia a AR6 Viewer.

 
Esta es la referencia a añadir…

 

Ya podemos arrastrar y soltar el visor en nuestro control.


 

Creamos el Evento Loaded y añadimos un poco de código tal y como está en la imágen.

 private void viewer1_Loaded(object sender, RoutedEventArgs e)
        {
            var relPath = new Uri("../report.rpx?OutputFormat=Rdf3", UriKind.RelativeOrAbsolute);
            viewer1.ViewModel.LoadDocument.Execute(relPath);
        }

 

Build…

 

Todo ok.

 

Añadimos una nueva Screen…

 

La llamamos Visor Informe

 

Añadimos un Custom Control

 

Buscamos la referencia al proyecto que hemos creado

 

Y lo asociamos a nuestro Control

 

Aquí lo tenemos, de momento no tiene ningún informe asociado…

 

¿Qué viene ahora? – En el siguiente tutorial veremos de como crear un formato de impresión y asociarlo con la base de datos.

Los archivos para descarga estarán en la última parte del tutorial…

Filtros en LightSwitch (filters in LighSwitch)

En esta entrada vamos a ver cómo se utilizan y para que sirven los filtros en LightSwitch. Como ejemplo voy a tomar una pregunta que me ha sido realizada en el blog, voy a dar aquí mi visión y una posible solución, por supuesto seguro que no es la única pero se agradecen los comentarios y las aportaciones.

El ejemplo trata de unos productos que tienen relacionados unos numeros de serie, más adelante introduciremos una tabla de ventas en las que asociamos que producto vendemos y que número de serie asignamos. fácil. ¿no? 😉

Comenzamos definiendo las tablas de la base de datos, (al final del artículo están los ficheros para descargar :D). La base de datos se podía haber creado desde LS pero yo estoy más cómodo desde SQL SERVER.

Ahora creamos la aplicación LS y le adjuntamos la base de datos que hemos creado:

Elegimos las tablas:

Vemos la relación de productos con los números de serie

Creamos una Screen para introducir un par de productos en nuestra tabla

Creamos otra para las Series, observamos que son independientes

Vemos como va quedando el arbol

Introducción de productos

Introducción de números de series

Ahora vemos el maestro-detalle de productos a numeros de serie

Es el momento de incorporar la tabla de ventas que tiene una relación con productos y otra con números de serie

Refrescamos el data source para que LS recoja los cambios.

Añadimos la tabla de ventas.

Vemos la relación dentro de LS

Creamos una nueva pantalla de Venta

Debemos crear una nueva Screen CreateNewVenta

Para trabajar más cómodos ponemos la Screen de ventas como predeterminada.

En la Screen de ventas hacemos un override del botón new y lo redirigimos a CreateNewVenta

Application.ShowCreateNewVenta();

Ahora podemos ver que se activa la Screen que hemos definido y vemos como no funciona adecuadamente, cuando elegimos los números de serie aparecen todos y no sólo los asociados a ese producto.

En la Screen CreateNewVenta añadimos un nuevo DataItem NumerosSerieCollection

Editamos su query y añadiremos un Filtro (Filter)

Aquí vemos el Where de Productos.ProductoId y el parámetro, éste parametro lo definiremos a continuación

Importantisimo este paso, en las propiedades del ModalWindowPicker (podría ser también un ComboBox) hay que cambiar el choices al nuevo query que hemos creado:

Ahora hay que relacionar el productoId del Query parameters con el Producto de VentaProperty

Ahora en las properties del productoId del Query Parameters establecer el parameters Value

Ahora aparece perfectamente la relación del filtro:

Cuando lo probamos, funciona perfectamente y podemos ver los números de serie asociados a cada producto.

Podemos almacenar las ventas pulsando el boton add en el grid editable

Bueno, con esto queda explicado cómo utilizar los filtros en LighSwitch, la explicación es escueta pero se apoya en bastantes imágenes que he ido guardando mientras lo realizaba.

Desde aquí se puede descargar la base de datos y el proyecto LS.
BBDD filtros lightswitch

PROYECTO filtros LS

Ejemplo de EventAgregator en SilverLight 4 (I)

El uso de un EventAggregator es muy útil en el diseño de aplicaciones que tienen diversos objetos que producen eventos, esto lo podemos entender facilmente si pensamos en una aplicación en el que haya varios formularios o páginas que necesitan intercambiar información entre los eventos que se producen. En el ejemplo que voy a comentar me baso en una aplicación Silverlight 4 que tiene un MainPage.xaml y dos páginas: Page1.xaml y Page2.xaml, cada una de estas páginas tiene un boton que debe actualizar un label en la MainPage.xaml.

En esta primera parte realizaremos simplemente las interficies sin aplicar la lógica del EventAgreggator que la añadiremos más adelante.

  1. Creamos una aplicación SilverLight en Visual Studio
  2. Creamos los label tal y como están en la imágen y añadimos dos border que contendrán las páginas page1 y page2 que crearemos más adelante.
  3. Creamos la Page1.xaml
     

    Le añadimos un botón

  4. Creamos la Page2.xaml
    Le añadimos un botón
  5. Por último añadimos el siguiente código c#

public MainPage()
 {
InitializeComponent();

border1.Child = new Page1();
border2.Child = new Page2();

 }

Aquí tienes el link de ddscarga: EventAggregatorTest_PartI.rar

Login de inicio al comienzo de la aplicación en business application

Un pequeño cambio en la aplicación por defecto de bussiness application para que nos pida el login al iniciar la aplicación.

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
LoginRegistrationWindow loginWindow = new LoginRegistrationWindow();
loginWindow.Show();
}

[/sourcecode]