Redimiento en Compact Framework – Carga de datos en un DataGrid

Siguiendo en la línea de «agradar» a nuestros clientes, y porque no decirlo a nuestros pequeños corazoncillos, algo que suele marcar la diferencia entre una solución aceptable y otra que caerá en el olvido es la velocidad con la que nuestra aplicación se mueva, por ello y para comenzar esta nueva línea he recopilado algunos de los ejemplos que tenia por ahí olvidados y me he dedicado a ponerlos en comparativa. El primer ejemplo que voy a tratar es la carga de datos en un DataGrid, utilizando tres métodos, carga de datos desde un DataSet mediante el asistente que nos da la herramienta de Visual Studio, es decir utilizando un tableadapter un bindignsource y el dataset correpondiente, el otro método consistirá en cargar los datos en un DataTable que definiremos y cargaremos en tiempo de ejecución, la carga de datos la realizaremos simplemente con un SqlCeDataReader para recorrer y asignar los datos y asignar el datatable al Datasource del DataGrid (vaya trabalenguas), y por último la misma operación pero utilizando como lector un SqlCeResultSet.

image

Como podéis ver el cargar un DataGrid directamente rellenando un DataTable creado en tiempo de ejecución reduce el tiempo de muestreo de los datos en nuestro DataGríd casi a la mitad que utilizando el asistente eso sin contar con la cantidad de memoria utilizada que no es el objetivo de esta prueba.

Por supuesto que esto solo nos puede resultar útil para mostrar grandes volúmenes de datos (cosa que en aplicaciones móviles no es muy recomendado) ya que para volúmenes de pequeños (menos de 500) no hay mucha diferencia, aunque personalmente una diferencia de ver los resultados de forma casi instantánea a esperar uno o dos segundos si que es importante.

Para lo demás os dejo que toméis vuestras propias conclusiones, las pruebas las he realizado contra un dispositivo real, mi pobre y resucitada HTC P3300 con un procesador OMAP850-210MHz. realizando cargas de 100, 1000 y 10000 registros de una tabla con cuatro campos, por lo que los resultados pueden variar en caso de utilizar otros dispositivos aunque siempre de forma proporcional, también lo he probado contra el emulador pero para este tipo de pruebas los resultados no son fiables.

Y eso es todo por hoy.

Saludos

José Antonio Gallego

Mobile .NET Users Group

Custom Controls en Compact Framework – personalizando un Listview

Como la mayoría de los desarrolladores el sentido del diseño lo tuve aparcado durante algún tiempo, pero a medida que te involucras en los desarrollos, y sobre todo cuando estas cerca del cliente de das cuenta que una buena funcionalidad no lo es todo, el cliente/usuario final, no tiene porque comprender la complejidad de un desarrollo y posiblemente no sepa valorarla, en cambio una interfaz de usuario atractiva cambia las cosas, algunas de las principales novedades respecto a tecnología móvil en estos últimos tiempos ha ido principalmente en esa dirección, creando nuevos medios de interacción con el usuario, como pueden ser los acelerometros, o interfaces de usuario atractivas como el Touch flow de htc… pero eso lo estoy dejando para un post posterior.


Este fin de semana rastreando por la msdn e recopilado unos cuantos métodos para crear un control Listview personalizado para Compact Framework.


Curiosamente todas las funcionalidades que vamos a utilizar para la creación de este control YA están contenidas en el mismo de forma nativa, pero por algún motivo que aún no he descubierto, estas propiedades no están accesibles en el control desde código manejado, por lo que únicamente tendremos que enviar los mensajes necesarios para activar las funcionalidades que deseemos y obtener un resultado como el de la imagen… (insisto… no soy diseñador jeje)


 


 


Ejemplo ListViewEx 

 


Para poder crear nuestro propio control listView crearemos un control personalizado que herede del control ListView y a continuación declararemos la funciones que harán las llamadas a nativo, para esto tan solo necesitamos la invocación a SendMessage (Manejado , Nativo)


Una vez agregada la llamada declararemos las propiedades que extenderán nuestro control Gradient, GridLines, BackgroundImage y DoubleBuffering éstas funciones hacen relación con las constantes LVS_EX_GRADIENT, LVS_EX_GRIDLINES, LVM_SETBKIMAGE y LVS_EX_DOUBLEBUFFER respectivamente. Si queréis ver todas las posibilidades visitar este enlace.


Como no soy muy dado a andarme por las ramas aquí os dejo un ejemplo con el código fuente del control y la aplicación de ejemplo, lo único destacar lo siguiente, he buscado los ejemplos para mostrar como utilizar la funcionalidad bien mediante p/invoke o bien mediante MessageWindow.SendMessage desde el espacio de nombres Microsoft.WindowsCE.Forms.


MobileNug.Controles.ListviewEx.zip


Un saludo a todos y espero que os sea útil, por su puesto si lo ampliáis seria fantástico que lo compartáis. Esto mismo se puede hacer con otros controles. Así que adelante.


José Antonio Gallego

Mobile .NET Users Group

Implementando un Hard-Reset por código en Windows Mobile 6.x

Un tema bastante peliagudo en los tiempos que corren es el de la seguridad de los datos que almacenamos en nuestras aplicaciones, sobre todo cuando hablamos de aplicaciones de gestión empresarial, en las cuales almacenamos datos confidenciales de nuestros clientes, como facturación, deudas, compras habituales…

Si bien es cierto que si en nuestra empresa contamos con un servidor Exchange podemos forzar el borrado remoto, también es cierto que hasta que no nos demos cuenta de que el dispositivo ha «cambiado» de dueño no podremos dar dicha orden.

Aquí os dejo un ejemplo muy simple de como implementar el hard-reset del dispositivo para Windows Mobile 6.x utilizando el sistema de aprovisionamiento OMA Client.

Este sistema nos permite configurar nuestros dispositivos, desde agregar enlaces a la lista de favoritos del Explorer, hasta el ejecutar el borrado mediante Hard-Reset de nuestro dispositivo, esto último es lo que ha propiciado la redacción de este post.

Para ello es tan sencillo como componer el documento XML correspondiente.

<wap-provisioningdoc>
  <characteristic type=»RemoteWipe»>
      <parm name=»doWipe» value=»1″/>
  </characteristic>
</wap-provisioningdoc>

En este documento vemos que vamos a ejecutar la característica RemoteWipe y como parámetro le especificamos la acción doWipe.

Como ejecutamos esto desde nuestra aplicación, muy sencillo, para ello utilizaremos el método ProcessConfiguration esta clase se encuentra dentro del ensamblado Microsoft.WindowsMobile.Configuration por lo que deberemos agregar este nombre de espacio como referencia a nuestro proyecto.

Éste método tiene dos parámetros, veamos la sintaxis:

XmlDocument ProcessConfiguration (XmlDocument configDoc,bool metadata)

Donde configDoc será el documento XML con el que se aprovisionará nuestro dispositivo, y con el parámetro de metadata especificamos si vamos a recoger la respuesta, este último parámetro es muy útil si queremos controlar los errores que se puedan producir o por si el archivo de aprovisionamiento debe generar una salida, como puede ser por haber realizado algún tipo de consulta.

Una vez visto esto vamos a por el ejemplo:

public bool doWipe()
{
string WipeCSP = @»<wap-provisioningdoc>
                    <characteristic type=’RemoteWipe’>
                    <parm name=’doWipe’ value=’1’/>
                    </characteristic>
                   </wap-provisioningdoc>»;

//Documento en el que almacenaremos la respuesta
System.Xml.XmlDocument xmlDocRes;

//Documento donde cargaremos el xml de aprovisionamiento

XmlDocument configDoc = new XmlDocument();
configDoc.LoadXml(WipeCSP);

//Llamada al configuration manager
xmlDocRes = ConfigurationManager.ProcessConfiguration(configDoc, true);

//TODO: aquí iría el procesamiento del documento de retorno
return true;
}

Ojo que esto solo es valido para dispositivos con Windows Mobile 6.0 o superior no funciona en Windows Mobile 5.0 ni en Windows Mobile 2003.

Otro tema importante es que, muy bien, ya he flaseado la PDA pero que pasa con mi tarjeta de almacenamiento… y es que muchas veces los datos guardados en la tarjeta de memoria de nuestro dispositivo es mucho más importante que el contenido de la propia PDA, bien porque la aplicación guarde los datos en la tarjeta de memoria (bien porque hayamos hechos fotos comprometedoras que no queremos que nadie vea jeje) a partir de Windows Mobile 6.1 también es posible forzar el cifrado de la tarjeta SD utilizando el mismo sistema que hemos implementado para realizar el reset de la pda, tan solo hemos de utilizar el siguiente xml de aprovisionamiento y listo.

<wap-provisioningdoc>
<characteristic type=»MobileEncryption»>
   <parm name=»Enable» value=»1″ />
</characteristic>
</wap-provisioningdoc>

Con esto y un bizcocho aquí os dejo un listado de enlaces para los que estéis interesados en investigar un poquito más en el tema del aprovisionamiento de los dispositivos móviles.

Understanding Provisioning (MSDN)

Options for Delivering Provisioning XML Files to Windows Mobile-Based Devices

Ejecutando archivos de aprovisionamiento desde nativo c++

Como final, desearos a todos una felices fiestas, ya que a muchos no nos ha tocado la lotería, nos seguiremos viendo por aqui.

¡Un saludo!

José Antonio Gallego

Mobile .NET Users Group

Actualización de la guía de Arquitectura para desarrollo Móvil

En codeplex se ha publicado la actualización de la guía de arquitectura y buenas prácticas para el desarrollo de aplicaciones Móviles.

Sin lugar a dudas se trata de una lectura mas que recomendada, aquí os dejo el enlace para que podáis descargaros el documento y acuñarlo en la biblioteca.

Mobile Application Architecture Pocket Guide

 

image

Capítulo 1, «Mobile Application Architecture»

Capítulo 2, «Architecture and Design Guidelines”

Capítulo 3, «Presentation Layer Guidelines”

Capítulo 4, «Business Layers Guidelines”

Capítulo 5, «Data Access Layer Guidelines”

Capítulo 6, «Service Layer Guidelines”

Capítulo 7, «Communication Guidelines”

Capítulo 8, «Deployment Patterns”

pnp_logo

A disfrutarla, por aquí ya estamos en ello.

Día de novedades en el TechEd [dia 3]

Día intenso, por no decir que no puedo con mi alma claro que queda como feo. Perdonar pero hoy no voy a ir en orden, prefiero contar lo interesante para ir al grano que no son horas o estos post se tendrán que llamar crónica de una muerte anunciada.

Noticias fresssscas, lo primero gracias Reyes por el aviso de Internet Explorer 6 para Mobile (aunque solo sea en el emulador jejeje) ha coincidido con la charla de lanzamiento así que poco más que contar…

Aquí el enlace correspondiente.

http://www.microsoft.com/downloads/details.aspx?FamilyId=1A7A6B52-F89E-4354-84CE-5D19C204498A&displaylang=en

Pues hay mas jejeje. A ver ¿a quién le suenan los widgets? (y no, no me valen los de symbian) pues ahora también los tenemos para mobile, se trata de webs completas incluyendo sus javascripts… si he dicho javascript, dentro de nuestra propia PDA, la gran ventaja de esto que permitirán el uso de características del dispositivo, GPS, Lectores, acceso a datos, y SILVERLIGHT Mobile (al menos un día de estos claro) además su generación es de lo más simple, ejemplo: abrir carpeta donde está la web, crear archivo xml (muy simple), comprimir todo en zip y renombrar la estensión a widget. Ya está.

No tienes nada más que hacer, no han pasado urls así que os toca a vosotros hacer el trabajo de campo.

Aquí algunas de las muestras, (perdón por los desenfoques pero estaba temblando de la emoción jejeje)

clip_image002clip_image003clip_image004

Otro pedazo de anuncio ha sido el lanzamiento de la nueva versión de Dynamcis Mobile 1.5 así que ya tenemos aquí la nueva versión y parece que ya han arreglado muchas cosillas para mas info de esto visitar mi blog o Mobilenug en la sección de Dynamicsl.

clip_image006

Kristian en acción

Ahora vamos con temas más mundanos.

Asistimos a la charla de Unit testing para dispositivos, de la cual cabe destacar que es válido tanto para CF 2.0 como para 3.5 (perdonar pero doy por hecho que sabéis lo que son las pruebas unitarias claro jejeje), aunque estarán disponibles en CF para Visual Studio 2008, realizaron algunas demos pero estás será mejor verlas con todo el material, no es algo muy nuevo pero la charla fue animada.

clip_image007

Maarten Stuys y Constanze Roman

Tras una maravillosa comida (que pena que no se pueda expresar la ironia de una forma más sencilla) a base de un sándwich frío y verde como para ahogar una vaca, llegamos a la segunda mitad del día, con tantas cosillas interesantes me pase a la presentación del Entity Framework para ver de que iba, y tras enterarme termine con la versión de Embedded

Durante la sección de exhibiciones hubo una muy graciosa de Robotics  (perdonar el tamaño de la foto, pero si os fijáis en el ordenador que lo controla es el mismo que utilizamos en el centro para hacer el piloto de embedded este año) ya me veo poniéndolo encima de algo con patas para ver si se mueve)

clip_image008

Las últimas sesiones fueron las comentadas al prinicpio del Explorer de Mobile y de Dynamics, y por último toco pase a la cena por países, en la que me la he pasado en grande charlando.

Un saludo

José Antonio Gallego

Mobile .NET Users Group

Nueva versión de Dynamics Mobile 1.5

Hoy durante la sesión en el TechEd, Kristian Ridley por parte Microsoft nos a anunciado la nueva versión para Dynamics Mobile, en esta nueva release la versión 1.5 nos trae algunas novedades y muchos arreglos de los problemas que arrastraba desde la versión 1.0

[kitkat](si no sabes de que va esto visita www.dynamicsmobile.es) [/kitkat]

Novedades y arreglos

  • Soporte para Windows Server 2003 32 y 64 bit
  • Windows Server 2008 32 y 64 bit
  • Snap-ins para MMC
  • Soporte para base de datos SQL Server 2008
  • Dynamics NAV 2009 NAS
  • Dynamics NAV 2009 Web Services
  • Visual Studio 1009 SP1
  • Compact Framework 3.5
  • Solucionado ya el soporte para VGA (por fin)
  • SQL Server CE 3.5 SP1

Y muchas cosas mas pero que no tiene sentido contarlas sin probarlo antes. (ni justo para vosotros el darlas por buenas sin verlo)

 

Antes de continuar y enganchando con la frase anterior, decir que aún NO esta disponible para descargar en la Partnersouce pero lo estará a lo largo de este mes. (momento en el que me pondré manos a la obra para exponer la arquitectura de este tipo de desarrollos)

La gran novedad esta del lado del servidor, ya que actualmente dependimos de los conectores, pero se está modificando la arquitectura para facilitar el que nosotros podamos crear nuestros propios conectores, aunque por supuesto nos siguen dando los conectores para NAV y AX.

Y hasta aquí puedo leer, no han anunciado grandes cambios en el código, para los que hayáis trabajado con Smart Client Software Factor este tipo de proyectos móviles os sonarán.

Un saludo a todos

José Antonio Gallego

Mobile .NET Users Group

[TechEd Dev 2008] Lunes

Hola a tod@s 

Como podéis ver os hablo desde la habitación del hotel intentando poner en claro las notas de este dia, acabo de llegar de la cena de los representantes de INETA a la cual he asistido como uno de los fundadores de MobileNug y ha sido una velada muy interesante, (charlar sobre desarrollo frente a unos montaditos de jamón siempre resulta interesante) pero de esto no voy a hablar hoy.

 Hoy el día a pesar del viaje ha estado interesante, tras la llegada al hotel y arrojar literalmente la ropa y la maleta para salir corriendo directamente hacia el pabellón (ya eran las 13:30 y el Keynote empezaba a las 14:00) me encontré el pabellón totalmente abarrotado de desarrolladores mientras sonaba una música de fondo que recordaba a la película de Akira, mientras una presentación representaba cientos de líneas de código entrecruzándose. 

El Keynote fue interesante, hicieron un repaso a algunos de los anuncios del PDC  de los Ángeles como el lanzamiento de AZURE y algo que me llego jeje fue que hablaron de los centros de innovación en Europa y la importancia de los mismos dentro de Microsoft (a ver si así algunos se dan por aludidos) y ya somos 24 centros en Europa y Valladolid SI aparece en este mapa (aunque según la imagen parecia mas bien Avila jejeje)

 

Tras la introducción llego la presentación de Jason Zander General Manager de Visual Studio que vino por parte de Corp. Jason nos estuvo alumbrando con las novedades que podremos encontrar dentro de Visual Studio 2010, nuevas herramientas para que los testers puedan llevar a cabo su trabajo, hablo de la integración de Visual Studio de lleno en el desarrollo web y como con Visual Studio podemos combinar el desarrollo web para nuestras aplicaciones de escritorio (todo muy en la nube ahora que está tan de moda) pero coincido con Alarcon en que ciertamente fue un poco aburrido)

 

El auditorio hasta las cejas 

Sin comer y con 4 cafés ya encima me dirigí a la presentación de Rob Tiffany Mobility Architect de Microsoft y creador de Windows Mobile Line of Business Accelerator, durante esta sesión Rob nos mostró las últimas adicciones que se habían hecho sobre esta herramienta, las cuales paso a resumir a continuación. (más adelante hablare de forma detallada sobre todo esto en cuanto tenga tiempo) ·         Global Cache (Nos permite acceder a constantes y estructura desde cualquier parte de nuestra aplicación)
·         Log de Errores (simplemente, y digo simplemente porque lo es, un writer para archivos donde logear nuestros errores)
·         Disponibilidad de Red (Se limita a hacer un httpgetwebresponse pero ya es algo)
·         Proyectos CAB
·         Localización (a través del MapPoint Web Service)
·         Soporte multi-lenguaje  

Esto en cuanto a las novedades aunque como he dicho Windows Mobile Line Of Business Accelerator requeriría una seria documental para él solito, pero realmente para los que ya lo conocemos no ha supuesto grandes cambios, aunque siempre es entretenido asistir a una charla de Rob


Ya para terminar los traks de este lunes (a los que he asistido claro) Rematamos con Programing with State & Notification Broker, presentado por Constanze Roman y Maarten Struys  en el cual nos presentaron esta tecnología que nos permite capturar más de 100 cambios del sistemas ( llamadas de teléfono, llegadas de sms, cambios de la pantalla) sin necesidad de tener que recurrir a código nativo, todo desde manejado.

El trak se dividió en tres partes SystemState, el cual nos permite detectar en enlazar los cambios producidos en el sistema desde nuestras aplicaciones Windows Mobile, RegistryState, que nos permite personalizar nuestros propios cambios, es decir mediante la detección de un cambio en el registro de nuestra PDA ejecutar acciones en nuestras aplicaciones, y por último se mostro el interfaz IApplicationLauncher que permite lanzar aplicaciones en base a cambios producidos en el sistema. 

Por último el dia terminó con el Exibition Welcome Reception, en el cual pude charlar con mucha gente a la que hacía tiempo tenía ganas de conocer y encontrarme por fin con asistentes españoles al evento.


 

Desde Barcelona y por hoy esto ha sido todo. Un saludo y mañana mas.

Evento Mobility Show 2008 22 Octubre

Queda solo una semana y aquí en Valladolid nos estamos volviendo locos con las pruebas de las salas, (odio las pruebas de sonido), terminando las demos, y pegándonos con los focos, total para que luego el efecto DEMO aparezca. Pero vamos, con muchas ganas. El Mobility Show 2008 es lo que el developers day a los desarrolladores pero esto para los desarrolladores de Mobile y la gente de IT, la idea es pasar el día cerca del mundo del desarrollo movil, tanto para los que ya estamos trabajando con ello desde hace años como para todos aquellos a los que os gustaría trabajar o simplemente ampliar conocimiento.


 


El Mobility Show 2008 pretende mostrar todo el potencial de los dispositivos móviles (Microsoft) tanto en el desarrollo como en la infraestructura… y la puesta en escena… bueno eso mejor venís y lo veis.




 


Os recuerdo que el evento será el 22 de octubre en el Parque tecnológico de Boecillo (Valladolid)


Ya quiero aprovechar este recordatorio para agradecer la colaboración de la gente de Windows Mobile de Microsoft Ibérica a TelefonicaHTC por apoyarnos en esta iniciativa.

Sony Ericcson lanza un nuevo SDK Create XPERIA™ X1 Panels para Windows Mobile® 6.1

El 3 de septiembre (de 2008 para los anales de la historia) Sony Ericsson ha lanzado la BETA de su SDK para Windows Mobile, este SDK está pensado para que los desarrolladores podamos crear nuestros propios paneles XPERIA para nuestras aplicaciones.


 



SDK Sony Ericsson
 

 

  Estos paneles pueden ser escritos en nativo (c++) o en HTML y por lo que incluyen en su documentación se trata de una extensión basada en el Windows Mobile Today API de Microsoft. En la descarga de esta BETA podemos encontrar lo siguiente:

  • Emulador XPERIA X1

  • Plantillas para Visual Studio

  • Guía de desarrollo

  • Referencia del API

  • Tutoriales

  • Ejemplos de código
 Podemos encontrar este SDK en la web de Sony Ericsson o directamente en este enlace: Sony Ericsson Beta SDK for Windows Mobile® 6.1 (v1.0.3) (9.1 MB) 

Cabe destacar que lo primero que debemos hacer tras instalar el SDK es leernos detenidamente la Guía de configuración del emulador, ya que nos requerirá seguir algunos pasos antes de poder probar alguno de los ejemplos.
 
El principal problema que nos encontramos es que el emulador aparece de un tamaño descomunal (al menos con una resolución de 1280 X 768 de nuestro monitor) el emulador no entra en la pantalla. Y claro viendo la configuración del emulador nos encontramos con que el emulador está configurado para mostrarse con una pantalla de 480 x 800… Eso y que en esta versión beta no han implementado aún el mapeo de los hard buttons.


 

Pero para que podamos disfrutar un poquito de este emulador desde Mobile Nug he incluido una versión reducida del Skin del XPERIA, con los hard buttons ya enlazados, para utilizarla (pero ojo, ya sabeís que si quereis desarrollar para ese dispositivo debemos hacerlo a una resolución de 400 x 800).

 

Podeís descargaros el skin en el siguiente enlace:

 


 


Por otro lado tenemos que la guía de desarrollo lo único que hace es redirigirnos a las guías de los tutoriales, aunque la referencia del API está bastante bien.
 
Respecto al desarrollo de los paneles el único modo que tenemos para desplegarlos es si creamos nuestro panel con HTML (si no tenemos la suerte de tener un XPERIA) es creando el archivo de instalación y desplegándolo, lo que lo hace un poco tedioso, aunque es cuestión de acostumbrarse.
 
En conclusión se trata de una iniciativa muy bien acogida (que últimamente solo se oye hablar del i-phone de Apple).

Más información en:
www.developer.sonyericsson.com 
https://developer.sonyericsson.com/site/global/docstools/windowsmobile/p_windowsmobile.jsp

José Antonio Gallego


Mobile .NET Users Group


 

Como utilizar la camara de la PDA desde un tasklet


En determinado tipo de aplicaciones es necesario realizar capturas desde la cámara de nuestro dispositivo, y si pudiésemos remitir de una forma automatizada dichas fotos a nuestro ERP, fotos de entrega de mercancía, de las piezas a cambiar en nuestra aplicación de mantenimiento.

 

Creo que a estas alturas todos ya sabemos como utilizar la camara desde Windows Mobile, pero aquí lo que vamos a hacer es integrar dicha funcionalidad dentro de una aplicación de Dynamics Mobile.

 

 

Tasklet Camara

 

Aquí os dejo el artículo completo y la correspondiente solución, espero que os sea útil.

 


Como utilizar la camara de tu PDA en un Tasklet [ PDF 9 Páginas 424 KB (434.176 bytes)]

 

Solución de ejemplo [20,0 KB (20.480 bytes)]

 

!!Un saludo¡¡

José Antonio Gallego

Mobile .NET Users Group