jueves, 14 de octubre de 2010

Profiling Mobile Applications

En las aplicaciones generadas con GeneXus tambien podemos realizar analisis de rendimiento. Para ello hay varias herramientas disponibles, yo quiero mostrarles una herramienta gratuita que encontre y creo puede ser de utilidad a muchos.

Dejo una serie de pasos para quienes quieran hacer alguna prueba.

1. Instalar EQATECProfiler.NET Esta es una herramienta ghratuita que puede ser descargada desde http://www.eqatec.com/tools/profiler





2. Abrir el directorio bin de la aplicación mobile desde EQATECProfiler. Es aquí donde se encuentran las dlls generadas de la aplicación.  

3. EQATECProfiler.NET tiene una seccion de Build que toma como entrada el directorio bin del modelo, y lo que hacer es crear un directorio bin-profiler hermano que tiene todas las dlls a las que le “inyecta” codigo de profiler ( Ver imagen).


4. Copiar al pocket pc el directorio bin-profiler y correr la aplacion. Cuando termino, queda en el \Temp\ un .log que lo sacas del pocket  y lo abris con este profiler en la seccion View y ahí ves qué metodos se llamaron y cuanto demoro cada uno.
Otra opcion es abrir directamente el archivo extesion .eqlog que ya te abre todo directamente con el profiler.
  
5. Analisis de resultados 

Espero que les sirva !!

sábado, 9 de octubre de 2010

Cómo crear un Data View para conectarse a SQL Server desde un PocketPC

En un post anterior mencionaba las diferentes formas de sincronizacion que existen, hoy voy a mostrar un ejemplo con Data Views.


Empezaremos por crear una base de datos a la cual nos conectaremos luego con Genexus. La base de datos se llamara APersona.


Les dejo el script para la creacion de la tabla y sentencias para cargar algunos datos necesarios para probar nuestro ejemplo


--Script creacion tabla 
GO
/****** Object:  Table dbo.Persona    Script Date: 01/20/2010 15:14:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE dbo.Persona(
      IdPersona numeric(18, 0) NOT NULL,
      NombrePersona char(20) NOT NULL,
      Direccion char(30) NOT NULL,
 CONSTRAINT PK_Persona PRIMARY KEY CLUSTERED
(
      IdPersona ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON PRIMARY
) ON PRIMARY

GO
SET ANSI_PADDING OFF


 --Ingreso de datos
INSERT INTO Persona SELECT 1 , 'PruebaDataView' , 'PruebaDataView'
INSERT INTO Persona SELECT 2 , 'DataView' , 'DataView'



Una vez creada la KB estamos a cuatro pasos de conectarnos a  la base de datos con nuestro Pocket PC.

      1.   Crear una  KB y seleccionar el Generador .Net Mobile



      2.   Crear el Data Store mediante el cual nos conectaremos a nuestra base de datos y configurarlo correctamente, este es el paso en el que se debe tener mas cuidado



La configuracion del Data Store deberia quedar asi 

Notar que se especifica el Puerto por el cual se va a acceder ("Server TCP/IP port") y la propiedad "Use Trusted Connection" esta en no.

Para quienes tengan la versión Express del SQL deben habilitar el protocolo TCP/IP desde el SQL Server Configuration Manager y en las propiedades especificar el TCP Port (puerto a utilizar: 1433)



      3.   Ahora si ya tenemos todo pronto para crear el Data View. Para esto utilizaremos el Database Reverse Engineering. 
En la configuración del Data View solo debemos tener en cuenta dos cosas: 
    1. En Platforms especificamos que es SQL Server CE y no SQL Server. Esta confusión es común y hará que nuestro Data View no funcione. 
    2. Property "Data Store" lo apuntamos al Data Store que creamos anteriormente.


      4.   Por ultimo, solo nos queda probar nuestra aplicacion, entonces indicamos que la Transaccion Persona sera nuestro Startup Object y damos F5. 
Si ingresamos el Id Persona = 1 y todo quedo bien 




viernes, 16 de julio de 2010

Como extender la descripcion de un combo mas alla de su ancho.

Un problema con el que se pueden haber encontrado cuando diseñan una pantalla para un dispositivo movil es que el espacio para agregar componentes nunca es suficiente.

En particular en los combo box la descripcion de los combos no se extiende mas alla del ancho del combo y corta las descripciones, por lo tanto si queremos que se vea todo el contenido que agregamos al combo este debe ser tan ancho como la descripcion mas larga que contiene.

Lo que se busca es tener un combo mas pequeño en pantalla que optimice el espacio y mejore el diseño del work panel en general y no perder por esto el contenido o parte del contenido del combo.

En la imgen se puede ver lo que intento describir, la imagen de la derecha en realidad es de un combo box web donde el funcionamiento es de la manera que queremos lograr que funcione en el generador mobile.




La buena noticia es que hay una forma de cambiar el ancho de la descripcion sin necesidad de agrandar el combo. La forma mas sencilla de lograr esto seria cambiando la propiedad DropDownWidth del combobox, pero esta funcionalidad no esta presente en .net compact framework.

Entonces nosotros lo vamos a hacer usando codigo C# directamente en el workpanel donde queremos este comportamiento.

El primer paso es crear un work panel y agregar una variable "&micombo" con propiedad ControlType = "ComboBox" y un boton con el evento enter asociado (el evento puede ser cualquiera).

Event Enter

         // Agrego descripciones al combo
         &micombo.AddItem("cuatro", "este es mucho mas largo")
         &micombo.AddItem("cinco", "y este es mucho pero mucho mas largo")

         csharp System.IntPtr handle = ((com.genexus.uifactory.net.NetChoice)((com.genexus.ui.GXComboBox) cmbavMicombo.getGXComponent()).choice).Handle;

         csharp SendMessage(handle, 352, 300, 0);
EndEvent // Enter


Sub 'dummy'
         csharp }
         csharp [System.Runtime.InteropServices.DllImport("coredll.dll")]
         csharp static extern int SendMessage(System.IntPtr hWnd, int wMsg, int wParam, int lParam);
         csharp protected void dummy2(){
EndSub

domingo, 6 de junio de 2010

Como simular la impresión vía bluetooth o serial utilizando HyperTerminal de Windows

Cuando desarrollamos aplicaciones por ejemplo de venta en algun momento vamos a necesitar imprimir facturas, recibos, reportes, etc. En aplicaciones móviles lo mas común es utilizar impresoras bluetooth portátiles.

Claramente lo mas sencillo es tener la impresora que vamos a utilizar luego de puesta en produccion, sin embargo esto no siempre es asi, muchas veces no contamos con la impresora ya sea porque nuestro cliente no la ha adquirido aun o simplemente porque no contamos con una.

Por suerte no es necesario contar con la impresora para poder realizar las pruebas de impresion, lo que podemos hacer es simular la misma. Para esto necesitamos si tener algunas cosas fáciles de conseguir y mucho mas económicas que comprar una impresora :
  • Cable USB <> RS232 interface cable  : aproximadamente 15 dolares 
  • Bluetooth con adaptador serial: hay de todo, en promedio se puede conseguir uno por 120 dolares
  • Hyperterminal : gratis, hasta Windows XP viene instalado para versiones posteriores hay que descargarlo.

Bien una vez que tenemos lo necesario simular la impresion es bien sencillo, una vez conectado todo a nuestro PC debemos configurar el hyperterminal para que escuche el puerto al que hemos conectado el cable USB.

Configuracion de HyperTerminal 
  1. Creamos una nueva conexion ingresado el nombre de la misma.
  2. Elegimos el puerto en el que conectamos el cable USB <> RS232, la forma facil para saber el puerto es fijarse en el Administrador de dispositivos.
  3. Configurar las propiedades del COM al que nos hemos conectado, para esto simplemente alcanza con dar click al boton "Restore Defaults". Deberia quedar como se muetra en la imagen.




Lo único que queda es tomar la aplicación y enviar un reporte modo texto a imprimir, la pantalla del HyperTerminal mostrara exactamente lo mismo que si estuviéramos imprimiendo con una impresora real.



martes, 30 de marzo de 2010

¿Aplicaciones conectadas o desconectadas?

Cuando empezamos a pensar en el desarrollo de una aplicación móvil, una de las primeras decisiones que se deben tomar es la arquitectura para la cual vamos a desarrollar nuestra aplicación.


Aplicaciones locales al dispositivo. Para poder generar este tipo de aplicaciones GeneXus utiliza el Compact Framework, distribuido por Microsoft para poder ejecutar aplicaciones .NET en dispositivos móviles.

Estas aplicaciones tienen una interfaz estilo Windows y almacenan los datos localmente en la base de datos SQL Server CE (motor de base de datos para PocketPC). Para poblar de datos estas bases o pasar la información generada existen diferentes mecanismos de sincronización como webservices, data views, etc.

Para poder generar una aplicación .NET Mobile con GeneXus hay que tener en cuenta una serie de requerimientos simples, estos son: Active Sync y Windows Mobile SDK for Pocket PC para el caso que se tenga instalado Microsoft Visual Studio. Mi consejo es utilizarlo con Visual Studio instalado ya que además de brindar ciertas ventajas ofrece una serie de herramientas muy útiles que facilitan el trabajo. Además se cuenta con una serie de emuladores lo que hace que no sea necesario contar con un dispositivo para realizar el desarrollo.

Si no se cuenta con Visual Studio existen una serie de limitaciones no muy grandes y se agregan algunos ítems a los requerimientos. Mas info 

Aplicaciones conectadas o full web, estas son aplicaciones web como cualquier otra que hayamos desarrollado utilizando GeneXus.

A partir de GeneXus Evolution 1, el desarrollo de aplicaciones web mobile ha sido mejorado cambiando la forma en que las páginas web, estilos, y java scripts son generados cuando la aplicación es mostrada en los dispositivos móviles.

Esta versión de GeneXus brinda además la posibilidad de utilizar el Work With Pattern, para que el mismo pueda ser visto desde un dispositivo móvil, en la instancia del pattern debemos chequear que la propiedad "GenerateForSmartDevices" este en true.

Además se ha agregado el valor AppMasterSD a la property Master page de los web panels creada para: nos permiten tener un diseño consistente, para aplicaciones web mobile existe el tipo.

Finalmente a la hora de probar nuestra aplicación podemos acceder directamente al localhost desde nuestro dispositivo móvil de manera sencilla por lo que resulta muy fácil testear la aplicación


La elección entre una de estas dos arquitecturas debe estar basada en el uso que se le piensa dar a la aplicación. Debemos pensar entonces en las siguientes variables: conectividad, tiempos de ejecución y trafico de información.

Conectividad: si se piensa en una aplicación conectada, se debe estar seguro que se tendrá acceso el 100% del tiempo. En general las aplicaciones conectadas se utilizan dentro de depósitos donde esta variable se puede controlar.

Tiempos de ejecución y tráfico de información: una aplicación local siempre será más rápida que una a la que se aceda vía web además para trabajar no necesita enviar ni recibir información. Si a esto le sumamos el envió de un gran volumen de información puede resultar en que nuestra aplicación web mobile sea inutilizable.

En las aplicaciones locales se pueden desarrollar mecanismos para sincronizar con la base de datos central en nuestra empresa cuando se tenga conectividad mientras todo quedara almacenado localmente.


Mantenimiento de la aplicación
Por último resta hablar del mantenimiento de la aplicación, en ambos casos es muy fácil y no tiene complicaciones. Con respecto a la web basta con actualizar el server los cambios realizados.

En las aplicaciones locales es un poco diferente. Lo que se debe hacer es generar el cab y publicarlo luego basta con enviar vía mail o sms la url a cada dispositivo donde este quedo publicado, luego de descargado el cab con un clic se instala solo en el dispositivo.