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.