martes, 1 de noviembre de 2011

Webcast MSDN: Casi “Zero Code” con LightSwitch en Azure

En este evento se puede ver todas las opciones de despliegue y personalización que nos permite LightSwitch. Asimismo, agrega bastante código en las aplicaciones generadas, y se puede ver cómo funciona el “corazón” de LightSwitch y como se sirve de un DSL para la generación de código de las aplicaciones.
Este vídeo  fue realizado el pasado junio cuando todavía no había aparecido la versión final del LightSwitch, sin embargo su contenido es totalmente aplicable a la versión actual. Ha sido realizado por Juan Luis Guerrero y Bruno Capuano, dos excelentes profesionales de Avanade y colaboradores de la comunidad de desarrolladores.
El enlace al vídeo para ver y/o descargar Casi “Zero Code” con LightSwitch en Azure.

lunes, 31 de octubre de 2011

Acceso total al DataGrid desde código

El grid que se utiliza en LightSwitch no es más que el control DataGrid estandard de Silverlight limitado. Cambiando las propiedades en diseño normalmente es suficiente para un uso cotidiano, pero a veces puede ser necesario cambiar propiedades del grid que no son accesibles directamente de LightSwitch como por ejemplo habilitar unas columnas específicas o poner todo el grid en modo solo lectura.

Para ello tenemos que hacer una serie de pasos y obtener acceso al objeto DataGrid de Silverlight del cual hereda nuestro grid. Los pasos serían los siguientes:

  • Antes de empezar tenemos que agregar las referencias a "System.Windows.Controls.Data" y "System.Windows.Data" al proyecto "Client". Para ello nos vamos a la vista de ficheros (File View): 


  • Ponemos el siguiente código en el evento Created de la pantalla (debe funcionar también en InitializeDataWorkspace) para que capturemos cuando el control este disponible: 
partial void doc_salidaMto_Created()
{ 
    this.FindControl("linea_doc_salgrid").ControlAvailable += new EventHandler<ControlAvailableEventArgs>(linea_doc_salgrid_ControlAvailable); 
}


  • Ahora podemos acceder al object e.Control que nos dará el acceso que buscamos:
private void linea_doc_salgrid_ControlAvailable(object sender, ControlAvailableEventArgs e)
{
    DataGrid dataGrid = (DataGrid)e.Control;
    // Hacemos lo que queremos con el grid
    dataGrid.IsReadOnly = true;
}

Ya está todo, espero que os sea útil.

miércoles, 26 de octubre de 2011

Cuadro de mensaje para preguntar al usuario

    En ciertos casos es necesario mostrar una mensaje de pregunta al usuario para realizar un determinado proceso o calculo. Para hacer esto dentro de LightSwitch se puede utilizar el siguiente código:

this.Details.Dispatcher.BeginInvoke(() =>
{
    if (Microsoft.LightSwitch.Presentation.Extensions.ScreenExtensions.ShowMessageBox(this,
      "Debe guardar los cambios antes de generar el documento. ¿Desea guardarlos ahora?", 
      "Pregunta", MessageBoxOption.YesNo) == System.Windows.MessageBoxResult.Yes)
    {
        // Tarea a realizar
    }
});

El resultado es el siguiente:

viernes, 21 de octubre de 2011

Presentación en Sydney

    Recientemente fue la presentación en Sydney de Microsoft Visual Studio LightSwitch. Para ello realizaron un espectáculo con las luces de edificios fantástico. Aquí os dejo el vídeo para que lo veáis:


viernes, 2 de septiembre de 2011

Actualización de LightSwitch 2011

    El equipo LightSwitch ha lanzado una General Distribution Release (GDR) para resolver un problema encontrado al publicar en SQL Azure.

En algunos casos, los usuarios han informado del error "SQLServer version not supported" al publicar una base de datos en SQL Azure. Esto se debe a una actualización del servidor SQL Azure reciente que causó la incompatibilidad con versiones anteriores. La GDR permite a LightSwitch corregir este problema y está pensada para actualizaciones futuras de los servidores.

La GDR y las instrucciones para su instalación se pueden encontrar en el Centro de descarga

sábado, 27 de agosto de 2011

Error al compilar falta referencia a 'System.Xml'

    Me he entretenido en probar varias extensiones disponibles gratuitamente con nuevos temas para LightSwitch y al desinstalarlas para dejar el proyecto tal como estaba y compilarlo me a aparecido un error de compilación. Viendo el detalle pone lo siguiente: 

El tipo o el nombre del espacio de nombres 'Linq' no existe en el espacio de nombre 'System.Xml' (¿falta una referencia de ensamblado?)

    Para solucionar este problema primero hay que seleccionar el proyecto en el explorador de soluciones, después pulsamos en el icono 'Ver archivo' que es el que está en un cuadro rojo en la siguiente imagen:


y nos aparece un menú con dos opciones, elegimos la que pone "Ver archivo". De esta forma podemos ver todos los archivos que componen realmente el proyecto. Seleccionamos entonces dentro de la solución el proyecto con el nombre ClientGenerated 


y sobre la carpeta que pone referencias pulsamos el botón derecho del ratón para ver el menú contextual. En este menú elegimos la primera opción "Agregar referencia..." y nos aparece una pantalla donde debemos seleccionar la librería "System.Xml.Linq"


Volvemos a compilar y ya no veremos más el error. Desconozco la causa por el cual se elimina esta referencia pero con estos pasos se puede solucionar fácilmente. Para ver los archivos del proyecto como siempre debemos elegir en el menú 'Ver archivo' la opción  'Vista lógica'.

miércoles, 24 de agosto de 2011

Refrescar un grid de busqueda al modicar en otra pantalla

    Normalmente utilizo la misma estructura es mis aplicaciones, primero pongo una pantalla de tipo búsqueda para que el usuario pueda localizar los datos y después desde allí se llama a otra para editar o para agregar un nuevo registro. Cuando el usuario ha grabado los datos en la pantalla de edición lo lógico es refrescar el grid que aparece en la pantalla de busqueda para que los datos que muestre sean correctos.
Para poder hacer esto hay que poner unas lineas de código en el evento "Saved" de la pantalla de edición que se ejecutará justo despues de guardar los datos. Suponiendo que la pantalla de busqueda se llama vendedorGrid y la tabla era vendedor, sería así (C#):

partial void vendedorMto_Saved()
{
     // Refrescarmos el grid de la pantalla padre si existe
     foreach (var parentScreen in Application.ActiveScreens.Where(a => a.Screen is vendedorGrid))
     {
         parentScreen.Screen.Details.Dispatcher.BeginInvoke(() =>((vendedorGrid)parentScreen.Screen).vendedor.Refresh());
     }
}

Básicamente lo que hace es buscar en las pantallas abiertas si existe alguna del tipo vendedorGrid y llama al evento Refresh de dicha pantalla. Imagino que en futuras versiones de LightSwitch se podrá hacer esto de una manera más sencilla sin código pero ahora mismo esta es la mejor solución.

Crear una pantalla para agregar y editar datos

    En el momento de crear una nueva pantalla en LightSwitch nos aparece un asistente que nos muestra varias plantillas disponibles según el tipo de pantalla que necesitemos. Existe una plantilla para crear una pantalla que nos permite agregar nuevos datos y existe otra plantilla que nos permite editar datos ya existentes en la tabla. Pero lo primero que eche en falta desde un principio fue una plantilla para crear una pantalla que nos permitiera hacer ambas cosas, agregar nuevos datos o editar una registro existente. De esta forma cuando queramos hacer una modificación en la pantalla no es necesario realizar los cambios en dos sitios distintos.

Por el momento no existe una plantilla que nos permita crear este tipo de pantalla pero se puede hacer siguiendo una serie de pasos que se explican perfectamente en el vídeo #9 – How Do I: Create a Screen that can Both Edit and Add Records in a LightSwitch Application?. Por desgracia este vídeo todavía no ha sido traducido al español pero viendo las imágenes se puede entender mas o menos.

Os resumo los pasos a seguir para crear este tipo de pantalla:
  • Agregamos una pantalla del tipo "Pantalla de nuevos datos" y le indicamos la tabla (Ejemplo: divisa) y el nombre (Ejemplo: divisaMto).
  • Agregamos un elemento de datos a la pantalla para el campo clave de la tabla (Ej: Tipo String, nombre codigo_divisa) y le indicamos en las propiedades que es un parámetro y que no es obligatorio.
  • Agregamos un elemento de datos tipo consulta de la entidad que devuelve un valor simple (Ej: divisa_SingleorDefault) y la renombramos por ejemplo como divisaQuery.
  • Enlazamos la consulta con el elemento de datos agregado en la opción anterior.
  • Agregamos el siguiente código en el método "InitializeDataWorkspace" (C#):
  • partial void divisaMto_InitializeDataWorkspace(List<IDataService> saveChangesTo)
    { 
        if (this.codigo_divisa == null) 
            this.divisaItemProperty = new divisaItem(); 
        else 
            this.divisaItemProperty = this.divisaQuery; 
    }
  • Vamos al Origen de datos y buscamos la entidad ("divisa") y le indicamos que la pantalla predeterminada  es la que acabamos de crear.


Con estos pasos ya tenemos creada nuestra pantalla para editar y agregar, ahora nos falta que sea llamada correctamente desde otra pantalla por ejemplo de tipo búsqueda, para ello realizamos los siguientes cambios en dicha pantalla:
  • Agregamos el botón de "Añadir" al grid de la pantalla de búsqueda poniendo el siguiente código dentro del botón (para ello elegimos la opción "Invalida código" (C#):
partial void gridAddNew_Execute()
{
    this.Application.ShowdivisaMto(null);
}

Y eso es todo, espero que os haya servido de ayuda.

domingo, 21 de agosto de 2011

¿Que es LightSwitch?

    Microsoft Visual Studio LightSwitch es una potente herramienta de diseño rápido de aplicaciones (RAD) que acaba de salir su primera versión el 28 de Julio de este año con el nombre de LightSwitch 2011.
Con LightSwitch es posible generar aplicaciones cliente servidor de una manera bastante fácil y sin escribir nada de código, aunque para sacarle más partido hay es escribir algo en algunas ocasiones. Esto permite que esta herramienta se útil tanto  a usuarios sin apenas conocimientos de programación como ha programadores experimentados (como es mi caso) que desean una ayuda al generar aplicaciones con las tecnología más actual.

    Desde el día de su lanzamiento, Microsoft ha puesto ha disposición de los usuarios el producto completamente traducido en varios idiomas (incluido el español), vídeos y foros donde encontrar muchas respuestas a las dudas de cualquier persona interesada en aprender a utilizarlo aunque estos se encuentran en ingles. Es por ese motivo por el que he decidido iniciar este blog y poner todas aquellas cosas que vea interesantes sobre LightSwitch en español.

    Para empezar, si todavía no tienes instalado LightSwitch 2011, descargarte de la página oficial la versión de prueba de 30 días ampliable a 60 más con las que puedes utilizar el producto completo.