RSS

Archivos Mensuales: diciembre 2008

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="DeviceEncryption">
   <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 aquí.

 
Deja un comentario

Publicado por en 24 diciembre, 2008 en Artículo, Desarrollo

 

Como cargar una imagen guardada en SQL CE

Hace unas semanas pusimos como poder guardar imagenes dentro de una base de datos de SQL Ce… pero que cabeza que no pusimos como recuperarlas!!! pero ya esta… tranquilos que aquí va el ejemplo.

public Image RecuperarImagen()
{
Image dibujo = null;
//Declaramos y abirmos la conexión
SqlCeConnection conexion = new SqlCeConnection("Data source=" + cadenaConexion);

conexion.Open();

//Creamos el comando SQL para recuperar la imagen, atentos a @Imagen
string comandoSQL = "SELECT Imagen FROM Cliente WHERE Nombre = @nombre";

SqlCeCommand comando = new SqlCeCommand(comandoSQL, conexion);

//Asignamos el array de bytes al parametro @nombre
comando.Parameters.Add("@nombre", "PACO");

SqlCeDataReader reader;

reader = comando.ExecuteReader();

if (reader.Read())
{
//  Aqui va la parte interesante
Byte[] imagenByteData = (Byte[])reader[0];

//Creamos un stream en memoria para guardar la imagen
MemoryStream memStream = new MemoryStream(imagenByteData);
//Guardamos la imagen utilizando la funcion Bitmap que nos permite recuperar imagenes desde un stream
dibujo = new Bitmap(memStream);
memStream.Close();
}

conexion.Close();
//Retornamos la imagen
return dibujo;

}

 
Deja un comentario

Publicado por en 23 diciembre, 2008 en Desarrollo, Trucos

 

Como pasar datos entre tasklets

[Dynamics Mobile discontinuado Ver más aquí]

Hoy voy a contar que metodo utilizar con Dynamics Mobile a la hora de traspasar datos entre los distintos Tasklets (Vistas o formularios), como podemos pasar una o varias variables y como poder capturar las variables de salida de Tasklets desarrollados por teceros (por ejemplo de Dynamics Mobile Sales)

Dado que cada uno de los Tasklet son realmente ensamblados compilados (dll) en proyectos independientes carecemos de la opción de traspasar los datos entre los distintos formularios (ups, perdón, tasklets) del modo habitual, con varialbes estaticas, pasandolo mediante funciones etc…

Para poder entender esto antes de meternos en código os voy a explicar primero que método utiliza internamete

El método es muy sencillo, el sistema lo que hace es que el Tasklet deja en memoria (lo que llaman un StateKey) el valor del dato o los datos que queremos traspasar, este StateKey tiene un nombre concreto que previamente le habremos dado, cuando abrimos otro Tasklet si este tiene especificado como dato de entrada un parámetro cuyo nombre StateKey es el mismo el sistema automáticamente rellenará esa propiedad con el contenido almacenado en memoria, el metodo es muy similar al uso de las Hastables.

Esto nos obliga a trabajar con mucho cuidado, ya que los datos se almacenan en memoria siempre en modo texto, por lo que los datos deben ser validos, de lo contrato se producirá un error en tiempo de ejecución, por ejemplo la propiedad de destino es de tipo numerico y le pasamos una cadena "paco"… ya podeís imaginar que esto no va a funcionar precisamente bién.

Para poder manejar esto deberemos utilizar en nuestros Tasklets los parametros OutputMapping para las salidas y los InputMapping para los parametros de entrada.

Si quereís un ejemplo completo de como pasar información entre dos tasklets aquí os dejo una guía y una solución de ejemplo para seguirla.

Tener en cuenta que esto es para desarrollo con Dynamics Mobile por lo que es necesario tener las herramientas del framework de Dynamics Mobile instaladas. Podréis descargarlas desde la partnersource (es necesario estar registrado)

Tutorial en PDF: Como pasar datos entre tasklets

Solución de ejemplo: Ejemplo como pasar datos entre tasklets

 
Deja un comentario

Publicado por en 14 diciembre, 2008 en Dynamics Mobile

 

Servicios en Windows Mobile bajo codigo manejado

Recientemente me encontrado con un proyecto en Codeplex para la utlización de servicios bajo Windows Mobile de Peter Nowak llamado Managed Services for Windows Mobile. Se trata de una librería bajo código administrado que permite la creación de Servicios de forma aproximada a como lo hace Windows Desktop.

servicemanager1

Entre sus características destaca:

  • Para utilizar esta libreria no se requiere de acceso a P/Invoke.

  • Está desarrollada en .NET CF 2.0.

  • Ejecuta servicios automáticamente al iniciar el sistema

  • Contiene un administrador bastante sencillo de utilizar.

servicemanager3

Por las pruebas que he realizado en un emulador tiene, aparentemente -está en versión Alpha-, buena pinta. Desde el mismo site de Codeplex viene con un ejemplo de servicio, documentación, código fuente y el Service Manager utility, con lo que ejecutarlo o crear tu propio servicio no es demasiado complicado, otra cosa es entender realmente como funciona internamente.

ManagedServiceClassDiagram

Por lo visto, está basado en un post del blog de Pavel Bánský, en el que explica cómo desarrollar servicios para Windows Mobile bajo código administrado. Todo parte de la idea de ejecución in-process de una DLL bajo \Windows\Services.exe, sin embargo la forma más habitual para hacerlo es mediante código nativo. Pavel muestra como encapsular las llamadas a WinCE y Peter se basa en el resultado para crear una librería íntegra para la creación de servicios bajo código administrado.

Si quereis profundizar más sobre el tema mirad en Services.exe Application Development for Windows Mobile-based Devices.

Fuente: www.desarrollobile.net

 
Deja un comentario

Publicado por en 2 diciembre, 2008 en Artículo, Desarrollo