domingo, 5 de mayo de 2013

Como realizar una acción al cambiar el valor de un control con el cliente HTML

Con el nuevo cliente tipo HTML hay algunas cosas que podíamos hacer fácilmente con el cliente Silverlight que ahora no es posible a simple vista. Por ejemplo en el siguiente ejemplo quiero que al cambiar un valor en una caja de texto se realice una acción. Si vemos los eventos que se puede codificar vemos que solo tenemos el _posRender para poner algo de código.
 
Por suerte al ser HTML y disponer de jquery podemos usar todos los eventos que nos permite javascript con ayuda de jquery para detectar el cambio de un valor, para ello podríamos poner algo así:

myapp.DeejayMto.Facebook_postRender = function (element, contentItem) {
    // Write code here.    
    $(element).change(function () {
        alert(contentItem.value.toString());
    });
};

Y de esa forma mostrará un mensaje al cambiar el valor del control.

miércoles, 13 de marzo de 2013

Nueva vista previa del cliente HTML disponible


Hace unos días se lanzó una actualización del cliente de HTML como parte de Visual Studio 2012 Update 2 CTP4 que mejora el soporte añadido para varios navegadores, clientes móviles y aplicaciones web de SharePoint 2013 con Visual Studio LightSwitch.

El nuevo cliente basado en HTML5 y JavaScript, es un complemento importante para nuestro cliente de escritorio basado en Silverlight que se enfoca en la creciente necesidad de construir aplicaciones orientadas al negocio que funcionen bien en los modernos dispositivos móviles. Visual Studio LightSwitch es la forma más fácil de crear una línea moderna de las aplicaciones de negocio para la empresa, y con soporte para HTML5 y el nuevo modelo de aplicaciones de SharePoint, ahora también construir aplicaciones de SharePoint 2013.

Si ya tenia instalada la versión anterior del cliente HTML debe desinstalarla primero siguiendo los pasos que encontrará aquí.

Hay que tener en cuenta que estas versiones HTML son todavía de prueba (preview) y debe utilizarse con prudencia hasta que salga la versión final.

martes, 1 de enero de 2013

3 Formas sencillas de crear una Caja Autocompletar

A continuación voy a enumerar unas formas sencillas (sin código  de como crear control del tipo Cuadro Autocompletar (Auto Complete Box). Existen tres formas:

1.- Mediante una clave externa.
Creamos una tabla donde indicamos un campo que es clave externa de otra tabla:



Al agregar el campo Pais de la tabla Cliente en una pantalla, LightSwitch automáticamente nos creará un control Autocompletar:


2.- Con una variable local o un campo de lista de opciones.
La otra manera de utilizar una cuadro de Autocompletar es definir una variable local o un campo con una lista de opciones.
  • Creamos una variable local llamada Mes

  • En la propiedad de la variable local hacemos clic en la lista de opciones

  • Llenamos la lista con los datos, en mi ejemplo, los meses del año

  • Automáticamente Microsoft LightSwitch hace que mi variable Mes sea de tipo Cuadro Autocompletar


También puede hacer esto en el diseño de la entidad o tabla proporcionando una lista de opciones para cualquier campo.

3.- La siguiente manera es muy útil y muchas veces no se utiliza porque hay que recordar que al crear una variable en la pantalla, ademas de los tipo comunes (Integer, String, etc.. ) también podemos crear variables que usan tablas.
  • Agregamos un elemento de datos y seleccionamos "Propiedad local" y desde la lista desplegable, seleccionamos una tabla (Entity). En mi ejemplo, elegir una clasificación para el cliente.

  • El nombre de la variable local es miPropiedad y su tipo es la tabla Clasificacion

  • Automáticamente Microsoft LighSwitch crea una Caja Autocompletar para mi variable local al agregarla en la pantalla

Espero os haya sido útil estas aclaraciones para crear este tipo de control.

miércoles, 14 de noviembre de 2012

Instalación del cliente HTML Preview 2 para LightSwitch

Ya se encuentra disponible una versión de previa (Preview) del cliente HTML para Microsoft Visual Studio LightSwitch. Gracias a este cliente es posible generar además de aplicaciones en Silverlight aplicaciones enteramente HTML + Javascript que se pueden ejecutar en cualquier dispositivo con un simple navegador.


La idea del equipo de LightSwitch es hacer un modulo que se complemente con las opciones ya disponibles, por tanto el aspecto de la aplicación generada con este cliente HTML esta pensado para dispositivos móviles táctiles con tamaño muy variable. Para el uso en equipos de sobremesa lo mejor es seguir utilizando el cliente actual en Silverlight que permite aprovechar la potencia y tamaño  de estos dispositivos.

Como todavía es una versión Preview, es necesario seguir unos pasos para poder instalarla. Para empezar es necesario disponer de Visual Studio 2012 versión RTM (final). El método de instalación es a través de Microsoft Web Platform Installer, y está incluido dentro del paquete de herramientas de desarrollo para Microsoft Office que se puede descargar a través del siguiente enlace:

Una vez instalado, si tenemos nuestro Visual Studio 2012 en otro idioma que no sea el Ingles, nos aparecerá un error si intentamos crear un proyecto HTML de LightSwitch. Para solucionarlo debemos instalar el paquete de idioma en ingles del siguiente enlace:



Una vez instalado, cambiamos el idioma del interfaz al idioma Ingles entrando en Herramientas -> Opciones -> Configuración internacional -> Idioma


Ahora ya podemos crear un proyecto HTML creando un nuevo proyecto y eligiendo el tipo "LightSwitch HTML Application" dentro de la plantillas de LightSwitch:


Una cosa que hay que tener en cuenta es que aunque una aplicación HTML de LightSwith usa entidades y pantallas igual que las aplicaciones de LightSwitch utilizadas hasta el momento, la estructura de la aplicación internamente es totalmente distinta por lo que ahora hay que habituarse a desarrollar aplicaciones con este nuevo tipo de entorno.

jueves, 4 de octubre de 2012

Como borrar los valores de configuración de los usuarios

Una interesante característica de las aplicaciones realizadas con Microsoft LightSwitch es la posibilidad de guardar la configuración de cada usuario en determinados elementos visuales tales como por ejemplo el ancho de las columnas o el tipo de ordenación en las rejillas. Esto se realiza automáticamente por el entorno de LightSwitch sin necesidad de indicarlo a la hora de diseñar nuestra aplicación.

Pero también puede ser necesario eliminar esta configuración del usuario para restaurarlo a los valores por defecto de la aplicación. Para hacer esto hay dos formas posibles dependiendo del tipo de aplicación que tengamos:

Si es una aplicación LightSwitch de tipo escritorio, estas preferencias se encuentra en nuestra carpeta Documentos (Documents) dentro de Microsoft\LightSwitch\Settings\<ApplicationName>.<ApplicationVersion>.<LightSwitchProjectGUID>. Simplemente debemos borrar esta ultima carpeta que se generará de nuevo la siguiente vez que ejecutemos nuestra aplicación con los valores por defecto.

Si la aplicación LightSwitch es de tipo web, las preferencias las guarda Silverlight en su caché que se puede acceder desde el menú de Programas, Microsoft Silverlight. Una vez dentro elegimos la pestaña Almacenamiento para la aplicación y veremos la configuración de todas nuestra aplicaciones de tipo Silverlight incluidas por supuesto las de LightSwitch:


En esta opción debemos pulsar el botón Eliminar... para borrarlo. Si no queremos que se vuelvan a guardar las configuraciones de nuestras aplicaciones, podemos desmarcar la casilla Habilitar almacenamiento para la aplicación que viene en la parte de abajo.


jueves, 16 de agosto de 2012

Disponible Visual Studio 2012



Desde hoy se encuentra disponible para la descarga de subscriptores a MSDN la nueva versión de Visual Studio 2012 que como ya hemos comentado antes en anteriores entradas tiene incluido LightSwitch.

Esta nueva versión incluye una gran variedad de mejoras como un nuevo tema por defecto, más moderno y en linea con el estilo Metro de Microsoft, acceso y publicación de datos en formato OData, integración con Active Directory, nuevos tipos de datos de negocio y muchas cosas más. También están trabajando en un cliente HTML que estará disponible como un complemento para Visual Studio 2012 muy pronto.

Podéis encontrar más detalles sobre este lanzamiento y los recursos disponibles en el blog del equipo de LightSwitch.

jueves, 9 de agosto de 2012

Creación dinámica de nombres de columnas en una rejilla editable

LightSwitch nos da la capacidad de importar datos de numerosas fuentes. Estos datos se pueden mostrar al usuario final en una rejilla editable (grid) por la simple creación de pantallas de tipo rejilla editable.

Los nombres de las columnas de la rejilla se corresponden con los nombres de los campos de la tabla que importamos. Esto funciona para la mayoría de los casos, pero en ciertas situaciones se necesita que estos nombres sean dinámicos. Por ejemplo, considera una aplicación para el Top 5 de coches del año con la base de datos diseñada de la siguiente manera:

CarRating
AttributeName
Car1
Car2
Car3
Car4
Car5
Frenado
Bueno
Muy bueno
Bueno
Bueno
Bueno
Aceleración
Excelente
Malo
Muy bueno
Muy bueno
Bueno
Velocidad
Excelente
Excelente
Muy bueno
Bueno
Malo
Manipulación
Muy bueno
Excelente
Malo
Malo
Bueno
Car
Name
Ranking
BMW
5
Mercedes
4
Porsche
3
Aston Martin
2
Ferrari
1

Ahora queremos mostrar la tabla de clasificación de coches pero en lugar de "Car1", Car2 ", etc..., en nuestros nombres de las columnas queremos leer de la tabla "Car", obtener los 5 mejores coches y sustituir los nombres de las columnas con los nombres que se obtienen de la tabla.

Con el fin de hacer eso, empezaremos con la creación de las 2 tablas anteriores: CarRating y Car. CarRating tendrá campos de tipo cadena llamados AttributeName, Car1, Car2, Car3, Car4 y Car5. La tabla Car tendrá un campo de tipo cadena llamado Name y un campo tipo entero denominado Ranking.

Aquí está la imagen de las tablas tal como se ve en LightSwitch:



A continuación, creamos una pantalla de tipo rejilla para CarRating. Así que haz clic con el boton derecho en el nodo de pantallas desde el Explorador de Soluciones y despues haz clic en Agregar pantalla. Selecciona la plantilla de rejilla editable y selecciona CarRatings como origen de datos y el nombre CarRatingsGridScreen.

Ahora desde el Explorador de Soluciones, haz clic en el CarRatingsGridScreen y selecciona Ver código de pantalla.

Esto te llevará al editor de código. Reemplaza todo el código con lo siguiente (asegúrate de que el nombre de espacio de nombres es coherente con el resto de los archivos de código de usuario):

VB
Imports System.Collections.Generic
Imports System.Linq
Imports Microsoft.LightSwitch
Imports Microsoft.LightSwitch.Presentation
Imports Microsoft.LightSwitch.Presentation.Extensions
Imports System.Windows.Controls
Imports Microsoft.LightSwitch.Threading
Namespace LightSwitchApplication
    Partial Public Class CarRatingsGridScreen

        Private Sub CarRatingsGridScreen_Created()
            AddHandler Me.FindControl("grid").ControlAvailable, AddressOf CarRatingsGrid_ControlAvailable
        End Sub

        Private Sub CarRatingsGrid_ControlAvailable(sender As Object, e As ControlAvailableEventArgs)
            UpdateColumnNames(DirectCast(e.Control, DataGrid))
        End Sub

        Private Sub UpdateColumnNames(carRatingsGrid As DataGrid)
            Me.Details.Dispatcher.BeginInvoke(
                Sub()

                    Dim top5Cars = Me.DataWorkspace.ApplicationData.Cars.OrderBy(Function(car) car.Ranking).Take(5).Execute()

                    Dim carNames As String() = top5Cars.[Select](Function(car) car.Name).ToArray()

                    Dispatchers.Main.BeginInvoke(
                        Sub()
                            Dim rowTemplate As IContentItem = DirectCast(carRatingsGrid.DataContext, IContentItem).ChildItems(0)

                            For index As Integer = 0 To carNames.Length - 1
                                'start with the second column of the grid
                                rowTemplate.ChildItems(index + 1).DisplayName = carNames(index)
                            Next

                        End Sub)

                End Sub)
        End Sub
    End Class
End Namespace

C#
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.LightSwitch;
using Microsoft.LightSwitch.Presentation;
using Microsoft.LightSwitch.Presentation.Extensions;
using System.Windows.Controls;
using Microsoft.LightSwitch.Threading;
namespace LightSwitchApplication
{
    public partial class CarRatingsGridScreen
    {
        partial void CarRatingsGridScreen_Created()
        {
            this.FindControl("grid").ControlAvailable += CarRatingsGrid_ControlAvailable;
        }

        void CarRatingsGrid_ControlAvailable(object sender, ControlAvailableEventArgs e)
        {            
            UpdateColumnNames((DataGrid)e.Control);
        }

        private void UpdateColumnNames(DataGrid carRatingsGrid)
        {
            this.Details.Dispatcher.BeginInvoke(() =>
            {                

                var top5Cars = this.DataWorkspace.ApplicationData.Cars.OrderBy(car => car.Ranking).Take(5).Execute();
                
                string[] carNames = top5Cars.Select(car => car.Name).ToArray();

                Dispatchers.Main.BeginInvoke(() =>
                {
                    IContentItem rowTemplate = ((IContentItem)carRatingsGrid.DataContext).ChildItems[0];
                                        
                    for (int index = 0; index < carNames.Length; index++)
                    {
                        //start with the second column of the grid
                        rowTemplate.ChildItems[index + 1].DisplayName = carNames[index];
                    }
                });
            });
        }
    }
}

En el código anterior, lo primero que estamos haciendo es el registro de controlador de eventos con el evento CarRatingsGrid_ControlAvailable de nuestro DataGrid. Esto está ocurriendo en el método CarRatingsGridScreen_Created.

Cuando la rejilla de datos en la pantalla aparece, nuestro método CarRatingsGrid_ControlAvailable se disparará. Este método tiene un argumento de tipo ControlAvailableEventArgs desde la cual podemos obtener el control real de Silverlight.

A continuación pasamos el control al método UpdateColumnNames desde CarRatingsGrid_ControlAvailable. Dado que el método se ejecuta en el subproceso principal, vamos al hilo lógico para obtener los 5 primeros nombres de coches y almacenarlos en una matriz (no podemos acceder a los datos del DataWorkspace en el hilo principal). Entonces volvemos al hilo principal y establecemos los nombres de columnas en la rejilla.

Ahora bien, para comprobar que funciona, tendremos que agregar unos cuantos registros en la tabla "Car". Así que crearemos una pantalla de rejilla editable para la tabla de coches y añadiremos unos pocos registros. Despues abre una nueva instancia de la CarRatingsGridScreen, debe tener los nombres de las columnas actualizadas.

Aquí está una captura de cómo deben ser las las pantallas en tiempo de ejecución:



A pesar de este post es sobre la configuración de los nombres de las columnas de forma dinámica, se puede extender a cualquier tipo de manipulación del interfaz de usuario. Por ejemplo, podemos obtener un identificador para un control de cuadro de texto en una pantalla y establecer su fondo en amarillo sobre la base de un cálculo, o podemos cambiar el color de la fuente de una celda de la rejilla de datos. El mismo concepto se aplica - obtener un identificador para el control de Silverlight subyacente y cambiar cualquier propiedad que deseemos en el proceso del interfaz de usuario.

Este texto es una traducción de un articulo original del Babar Ismail Dynamically setting column names on an editable grid.