Decalogo del factor humano en el desarrollo de software móvil

En estos últimos años me he dedicado precisamente a esto, a llevar funcionalidades del ERP a dispositivos móviles, y no me he llevado un batacazo… más bien han sido varios, en los cuales uno siempre intenta no volver a caer.


A la hora de acometer un proyecto de software móvil no te puedes centrar en lo meramente técnico, en que lenguaje utilizar, en que sistema operativo vas a basar tu desarrollo, en este tipo de proyectos tendemos a olvidarnos del factor humano, (si, esos seres bípedos que resultan ser los usuarios finales), por otro lado tenemos que tener encuentra que dispositivo se adecua más a su modo de trabajo y sobre todo a su entorno, en este post espero resumir lo más posible todos estos pequeños factores en lo que he querido llamar Decálogo de desarrollo móvil.


1º Un usuario no es un Geek 😉


Por mucho que nos empeñemos un usuario final de, por ejemplo, una aplicación de gestión de un matadero, no es precisamente un maquinitas, esto es importante a la hora de diseñar el interfaz de usuario, los nombres a utilizar y el TAMAÑO de los botones, en el caso de que el dispositivo a utilizar carezca de hardbuttons (ver el segundo mandamiento). Por lo tanto por mucho que nos empeñemos si creamos una aplicación difícil de manejar (con más de tres saltos de menú es sencillo que se pierdan) lo más probable es que el proyecto se alargue eternamente en el tiempo ya que los propios usuarios lo van a rechazar.


2º Dime que herramienta tienes y te diré como programarla.


Supongo que esto es mundialmente conocido pero es importante elegir el dispositivo antes de empezar a plantearse tirar una sola línea de código. Si vamos a trabajar en un entorno industrial es lógico (sentido común o como queráis llamarlo) que orientemos a nuestro cliente a elegir un dispositivo de este tipo, por ejemplo de Motorola/Symbol, Psion, Intermec, Datalogic… Es importante tener un conocimiento previo de estos equipos, suelen contar con sus propios SDKs de desarrollo (los cuales es muy importante a la hora de reducir tiempo de desarrollo y el famoso ciclo de reinventar la rueda)


MC70


El dispositivo depende del entorno (no quiero imaginarme una flamante Diamond como herramienta de trabajo en una cámara frigorífica), de la finalidad del programa (tampoco visualizo a un elegante comercial ataviado con un equipo industrial de medio kilo) así que ante la duda lo mejor es ponerse en contacto con los comerciales de alguna de las casas y en la mayoría de los casos tan solo es necesario aplicar como he dicho el sentido común.


También es importante destacar las características técnicas del dispositivo, si esta escaso de recursos deberíamos olvidarnos de programar con Compact Framework y optar por algo más «compacto» como c++


3º Dejar que los usuarios (FINALES) se acerquen a mi


Esta muy bien escuchar las ideas de los administrativos, gerentes, jefes de producción y del personal técnico de la empresa…. ¿Pero quién va a utilizar la aplicación? quien va a tener que estar día a día trabajando con lo que nosotros pobres artistas del software creemos, está claro, aquí aplicamos la solución al primer punto de este decálogo, es importante reunirse con al menos alguno de los usuarios finales del programa, lo más lógico no siempre es acudir al mas «avispado» sino al que mejor se lleve con los compañeros… (si lo se… suena un poco manipulador, pero no es lo que pensáis) la idea de formar, enseñar y co-diseñar (sí, he dicho co-diseñar) al que más trato tenga, es que esa persona os ahorrará horas de trabajo tras la puesta en marcha.


La idea es involucrar al usuario final en el diseño de la aplicación, este después podrá explicar el mismo a sus compañeros el uso de la misma, y por supuesto explicarte a ti de donde cojea la aplicación… Pero CUIDADO, que no se convierta en una carta a los reyes magos!!!


4º Un anillo para dominarlos a todos… Simplificando las comunicaciones


El tema de las comunicaciones siempre es peliagudo, aunque en los últimos tiempos esto ha mejorado considerablemente, así que solo cabe decir aquí que es importante (siempre que sea posible) utilizar un UNICO sistema de comunicación, no hablo de si utilizar WIFI, GPRS, UMTS ect. Sino del sistema, WebServices, Replicación SQL, MSMQ, o transferencia de archivos de texto… insisto en que solo siempre que sea posible, ya que es de cajón de que cuantos más métodos incluyamos más complicado será escalar nuestra aplicación, mantenerla y detectar los posibles errores, que en la parte de comunicaciones suelen aparecer con más frecuencia de la que nos gustaría. Lo ideal es establecer simpre que nos sea posible un unico canal y establacer las interpretaciones en las entradas y las salidas de datos.


Nuestros usuarios agradecerán no tener que realizar complicadas configuraciones.


5º  Planifica bien tu proyecto


Si alargamos demasiado el desarrollo de nuestra aplicación corremos el riesgo de que para cuando la terminemos ya estemos utilizando tecnología obsoleta…. (si, algunos ya sabréis que no es tan raro) un desarrollo de una aplicación móvil comercial no deberíais alagarla más de 3-4 meses (por supuesto esto depende del proyecto a acometer y es solo una media, del tiempo real, que mi equipo y yo hemos dedicado, por supuesto en estos meses no se incluye el tiempo de segundas fases y ampliaciones, sino al tiempo de tener lista la primera release puesta en el cliente) 


La reducción de los tiempos en este tipo de proyecto evitan el cansancio del equipo de desarrollo, y evitan «la dispersión mental» y el perder del norte el objetivo.


Nuestros clientes no se desesperaran al ver que pasan las semanas y siguen sin tener nada, si el proyecto es muy largo desde que hablamos con ellos a la presentación del mismo no recordarán nada de lo que te contaron.


6º Se hace camino al andar… pero si ya lo han andado otros pa’ que


Aprovecha las funcionalidades del SO, dedica algún tiempo (se puede vivir durmiendo 5 horas) a estudiar las funcionalidades que te ofrecen los SDK del sistema operativo a utilizar. En alguna ocasión me he encontrado con desarrollos muy originales…. sobre algo que ya estaba resuelto en una nueva versión del Compact Framework, o desarrollos de Windows Mobile 5 muy currados pero que luego corrían sobre Windows Mobile 6 y con funcionalidades ya resueltas en su SDK


7º Estar atento a las novedades y desarrollos de terceros.


Más de lo mismo que el punto 6… pero es que muchas veces está muy bien desarrollar tus propios componentes pero dependiendo del alcance del proyecto a veces es interesante ver que componentes ya existen y adquirirlos. El trabajo de los demás también debe ser valorado. Un claro ejemplo es OpenNetCF (aunque ya ha perdido un poco de su espiritú de código abierto que tanto exito les dió)


8º Crea manuales SENCILLOS


Si puedes hacer que el manual entre en un folio mejor que mejor, y esto incluyendo capturas de pantalla, el equipo de soporte te lo agradecerá, y será más fácil que los usuarios finales «al menos» le echen un ojo.


Si no es posible reducirlo tanto, siempre está bien crear una hoja de guía rápida en la primera página de tal modo que puedan utilizarla de chuleta.


9º Valora a tu equipo


Insistiendo en el valor humano, si los desarrolladores no comprenden la aplicación difícilmente podrán darse cuenta de los «agujeros» con los que pueda contar la misma, es importante dedicar un tiempo a explicar el modo de trabajo actual de los usuarios finales, de este modo siempre nos podremos ahorrar el trabajo extra de corregir después errores (que suelen suponer replantear toda la aplicación…)


10º Aquí sois vosotros los que decidís este punto del factor humano en el desarrollo de un proyecto


¿Sugerencias?….


Un saludo a todos y perdonar por esta pequeña chapa, a veces me pongo a escribir y pierdo un poco el norte. 


José Antonio Gallego


Mobile .NET Users Group

Un mini Geek en mi familia

Hoy continua, para mí, el que sin lugar a dudas es el proyecto mas importante al que nos podemos enfrentar en este mundo, y es tener un hijo, esta noche y con muchas prisas ha nacido mi primer hijo Alejandro, con tres kilos y medio y sin dejar de mover las manitas de un lado a otro, espero que sea para que le vaya bien un teclado entre las manos  (perdonar que voy a por el babero que se me cae la baba aún).


Se que no es muy adecuado poner aquí este post pero agggg, estoy tan contentoooooo que quiero que todo el mundo se entrere!!! (Seguro que lo comprendereis 😉 )


Un abrazo comunidad!!!


PD: Me voy a comprar pañales :S a ver si de tanto inventar, a alguno de IT se le ocurre una maquinita que haga esa parte!!! jejeje

Microsoft se mueve, VI-FI ¿Un nuevo protocolo de red para vehículos?

La universidad de Massachusetts, Microsoft y la Universidad de Washington están trabajando en un nuevo sistema que permitiría resolver el problema del uso de redes Wi-Fi en nuestros vehículos.


Si, ya sé que a primera vista esto tecnológicamente no sería complicado, lo complicado es que “funcione de verdad”, es decir, el dotar a un vehículo como un autobús para que suministre conexión Wifi a los viajeros no tiene ninguna complicación, la complicación es que el autobús pueda conectarse a una red Wifi externa, como las actuales redes WI-FI urbanas que están comenzando a aparecer y esta ofrezca un servicio sin interrupciones.


ViFi

El sistema lo que pretende es mejorar el sistema de Handoff para evitar los cortes que se producen entre el cambio de una estación base a otra.


Lo que se pretende NO es dar otro motivo de distracción al conductor, sino de dar una posibilidad real y económica para que los pasajeros o los sistemas del vehículo, como el GPS, el ordenador de abordo puedan utilizar una conexión de red que no se caiga a cada paso, lo que permitiría incluso la posibilidad de utilizar sistemas de telefonía VoIP desde el coche.


Por ello se está trabajando en un nuevo protocolo al que han denominado Vi-Fi que pretende mejorar los métodos den handoff actuales.


En el siguiente enlace del blog de Balasubramanian podréis leer más sobre el tema, realmente muy interesante.


Aunque no se trata de algo totalmente novedoso, ya hay empresas que han realizado estudios de I+D sobre este tema, si que parece una muestra de las tendencias de las comunicaciones y de la informatización de los vehículos, como ya se está viendo por parte de la adaptación de Windows Automotive como por ejemplo con el sistema Blue And Me de Microsoft que se integro en Fiat (y por favor jejeje, olvidémonos del chiste del coche y el pantallazo azul).


José Antonio Gallego


Mobile .NET Users Group

Dynamics Mobile. Personalización del SplashScreen

Las herramientas de desarrollo de Dynamics Mobile nos ofrecen un buen conjunto de herramientas para poder realizar nuestros desarrollos móviles, entre de estas herramientas se nos ofrece la posibilidad de personalizar nuestra aplicación, en este capítulo veremos cómo personalizar el Splashscreen, como adaptar sus textos y como cambiar la imagen predefinida ya incluida.


Para aquellos que aún no hayáis creado una aplicación con Dynamics Mobile. Al iniciar cualquier aplicación desarrollada con Dynamics Mobile, lo primero en ejecutarse, la aplicación RolePad, muestra una pantalla de carga, el Splashsceen. Esta pantalla por defecto nos muestra el estado de carga de nuestra aplicación.


En el Splashscreen podemos personalizar los textos de carga e incluso la imagen mostrada durante la carga.



Ejemplo SplashScreen
 

Personalizando el Splashscreen


Partimos de una aplicación Dynamics Mobile cualquiera, la abrimos en nuestro Visual Studio y abrimos el archivo app.config (todo lo haremos desde este archivo)


Tan solo hemos de agregar lo siguiente, en la sección de configuraciones, agregamos una nueva sección llamada splashScreen (ver Sección código xml 1 en negrita), esta parte se encuentra al principio del archivo.


[Sección código xml 1] Archivo app.config


<configSections>
  <section name=«splashScreen» 
                 type=«Microsoft.Dynamics.Mobile.Framework.RolePad.SplashScreen.SplashScreenSection, 
                           RolePad» />
</configSections>


A continuación agregamos la definición de dicha sección. Esta parte la agregamos tras el elemento <application>, un nuevo nodo llamado Splashscreen como podéis ver en la Sección de código xml 2.


[Sección código xml 2] Archivo app.config


<!– Splash screen–>
  <splashScreen background=«MobileNugSplash.jpg«>
    <labels>
      <add key=«Label_ApplyingUpdate« text=«Instalando actualizaciones«/>
      <add key=«Label_Initializing« text=«Cargando, epere por favor…«/>
      <add key=«Label_Rollingbackupdates« text=«Desaciendo cambios«/>
      <add key=«Label_Startingapplication« text=«Cargando…«/>
      <add key=«Label_Startingservices« text=«Configurando servicios…«/>
      <add key=«Label_Startingshell« text=«Cargando el shell…«/>
    </labels>
  </splashScreen>

Los parámetros a configurar son los siguientes background, en este atributo podemos especificar el nombre de un archive de imagen válido (jpg, png, bmp) que se encuentre en el directorio de nuestra aplicación.


Para agregarlo podemos incluirlo como contenido dentro del proyecto RolePad y asegurarnos de que lo incluimos en el cab de instalación para que se copie en la carpeta de nuestra aplicación.


En nuestro ejemplo hemos incluido un archivo MobileNugSplash.jpg (Figura1) personalizado con el logo de la comunidad de MobileNug


 


EjemploSplashScreen


Figura 1


 


El tamaño de la imagen es importante ya que debemos tener en cuenta el factor de forma en que se mostrará nuestra aplicación de creando una imagen con el tamaño de 320×268 nos aseguramos de que nuestra imagen ocupará toda la pantalla ya mostremos la aplicación en horizontal o en vertical.


Como podéis ver en la Figura 2 hemos incluido la imagen como contenido y la hemos marcado para que se copie cuando hagamos el despliegue.


 


Explorador de soluciones


Figura 2


También podemos agregar los textos de información de carga de nuestra aplicación y personalizarlos para el idioma que corresponda. Esto se hace agregando un elemento contenedor de labels en el ejemplo de [Sección de código xml 1] podéis verlo los textos aparecen en la parte inferior de la pantalla y son los siguientes.


Label_ApplyingUpdate: Texto mostrado mientras se instalan actualizaciones
Label_Initializing:  Texto mostrado al inicializar la aplicación
Label_Rollingbackupdates: Texto mostrado al deshcer cambios
Label_Startingapplication: Texto mostrado al cargar la aplicación
Label_Startingservices: Texto mostrado al configurar los servicios
Label_Startingshell: Texto mostrado mientras se carga el shell


Como habéis visto esta personalización es muy sencilla pero con un resultado vistoso, ya que es una buena forma de diferenciar nuestra aplicación.


En próximas entregas os ire iremos comentando nuevas pesonalizaciones, aunque aquí va otro pequeño apunte.


Si deseamos cambiar el nombre mostrado en la cabecera de nuestros formularios es tan sencillo como modificar la etiqueta <application> dentro del archivo app.config


<application text=»MobileNUG demo» validation=»false» />


Lo mostrado en el atributo text será el nombre mostrado en la cabecera de nuestros formularios.


Aquí os dejo el PDF con el tutorial y la solución (codigo fuente) con el ejemplo.


Personalizando el Splash Screen [ PDF 8 Páginas 388 KB (397.312 bytes)]

 

Solución de ejemplo [28,0 KB (28.672 bytes)] (Solución Visual Studio 2005 C#, compatible con VS2008)

Saludos y nos leemos pronto


José Antonio Gallego


Mobile .NET Users Group

Dynamics Mobile. Como pasar información entre Tasklets

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.



Flujo de datos

 


 


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


Un saludo a todos!


José Antonio Gallego


Mobile .NET Users Group

Compact Framework y las aplicaciones en modo Kiosco

Normalmente a la hora de afrontar el desarrollo de una aplicación móvil nos suelen exigir que la aplicación se ejecute en modo kiosco, es decir que el usuario solo pueda trabajar con la aplicación en cuestión y limitar de este modo el acceso a otras aplicaciones.


Unos de los primeros pasos para esto es el inhabilitar el botón de inicio del escritorio, eso nos permite hacer que nuestra aplicación pueda utilizarse en modo kiosco sin la necesidad de estar maximizando el formulario y realizando chequeos para hacer que nuestra aplicación siempre tenga el foco, esto último además tiene el inconveniente de que en caso de que necesitemos utilizar alguna funcionalidad de la PDA, como el teléfono móvil, no podríamos hacerlo.
En otros casos también necesitamos deshabilitar el SIP panel para forzar a utilizar nuestro propio teclado.


Todo esto es posible hacerlo mediante llamadas en nativo, para facilitar esto aquí os dejo una pequeña librería MobileNUG.Device.Kiosco que os permitirá jugar con todo esto directamente desde código manejado.


Para utilizarla tan solo debéis agregarla a vuestra solución Smart Device para Compact Framework.


La librería MobileNUG.Device.Kiosco cuenta con las siguientes funciones


ModoKiosco(Activar)
Esta función deshabilita y oculta el icono de Inicio de Windows Mobile, y deshabilita y oculta el SIPpanel


OcultarElemento(Accion a realizar)
Esta función permite realizar (según el parámetro Acción que le pasemos)
Mostrar y habilitar todo
Ocultlar botón inicio
Ocultar icono SIP panel
Ocultar botón inicio e icono SIP panel


Ojo, que los oculta pero no los deshabilita


BotonInicio(Activar)
Hbilita y deshabilita el botón de inicio (no lo oculta)


SIPpanel(Activar)
Habilita y deshabilita el SIP panel.


Aquí va un ejemplo de como útilizarla.


(…)
using MobileNUG.Device;


public partial class Form1 : Form
{
   
//Declaramos el nuevo objeto MobileNUG.Device.Kiosco
    Kiosco
mnugKiosco;
   

    public
Form1()
    {
        InitializeComponent();
   
    //Inicializamos el componente kiosco
       
mnugKiosco = new MobileNUG.Device.Kiosco(this.Handle);
   
    //Habilitamos el modo kiosco
   
    mnugKiosco.ModoKiosco(true);
    }
   
   
private void Form1_Closing(object sender, CancelEventArgs e)
    {
   
    //Desactivamos el modo kiosco
       
mnugKiosco.ModoKiosco(false);
    }
}


También podéis descargaros la solución completa en MobileNUG en este enlace.


Ejemplo MobileNUG.Device.Kiosco


Si solo queréis descargaros la librería podéis hacerlo aquí.


El ejemplo y la solución están en C# para Compact Framework 2.0 pero es muy fácil pasarla a VB.NET y también es compatible con Compact Framework 3.5 y Visual Studio 2008.


¡Espero que os sea útil!


Un saludo a todos desde MobileNUG
José Antonio


Mobile .NET Users Group

Como insertar imagenes en una base de datos SQL CE

Hace tiempo me vi en la necesidad de insertar imágenes dentro de un campo en una base de datos de Sql CE, algo que resulta relativamente sencillo ha resultado ser algo no muy conocido, (y desde mi punto de vista proco práctico) ya que me estan llegando de nuevo consultas sobre como se podría hacer, así que para aquellos que lo necesitéis (antes o después ocurrirá) aquí os dejo el ejemplo y podréis encontrar la solución completa con su código fuente en el enlace adjunto al final.

//Cargamos la imagen en un objeto tipo Image
Image dibujo = new Bitmap(rutaAplicacion + @»Imagen.bmp»);

//Creamos un stream en memoria para guardar la imagen
MemoryStream memStream = new MemoryStream();

//Guardamos la imagen en nuestro stream especificando el formato (jpg,bmp…) atentos al parámetro ImageFormat
dibujo.Save(memStream,System.Drawing.Imaging.ImageFormat.Bmp);

//Guardamos el stream en un array de bytes
Byte[ ] dibujoByteArray = memStream.GetBuffer();

//Declaramos y abrimos la conexión con la base de datos donde la variable de conexión especifica el path de nuestro archivo sdf
SqlCeConnection conexion = new SqlCeConnection(«Data source=» + cadenaConexion);

conexion.Open();

//Creamos el comando SQL para insertar, atentos al parámetro @Imagen
string comandoSQL = «INSERT INTO Cliente (No,Nombre,Imagen) VALUES (1,’PACO’,@Imagen)»;

SqlCeCommand comando = new SqlCeCommand(comandoSQL, conexion);

//Asignamos el array de bytes al parametro @Imagen
comando.Parameters.Add(«@Imagen», dibujoByteArray);

//Ejecutamos y listo!… sed buenos y poner los chequeos…


comando.ExecuteNonQuery();


conexion.Close();


 


Por supuesto si conoceis algún modo mejor de poder hacer esto, o algún otro método alternativo no dudeís en hacermelo llegar!!


Aquí os dejo el enlace,


Un saludo a todos desde MobileNUG
José Antonio


Mobile .NET Users Group


 


 

Desarrollando un Cliente FTP para Compact Framework 2.0

Aunque ya tenemos aquí la nueva versión de CF 3.5 que mejora en gran medida el tema de las comunicaciones, aún nos vemos obligados muchas veces a tener que trabajar con su hermano pequeño el Compact Framework 2.0, y por supuesto no es nada raro el tener que utilizar servidores FTP para transferir archivos, descargarlos etc. (a pesar de ser un metodo nada recomendado por motivos de seguridad que no explicare en estos momentos ) si que es cierto que es una forma muy comoda de enviar información cuando no tenemos otro modo de hacerlo (no podemos colgar ninguna aplicación en el servidor, abrir un servicio web o similares).


Aquí os dejo un ejemplo mostrando como podemos utilizar crear nuestra propia clase MobileNug.Net.ClienteFTP para integrarla en nuestras aplicaciones moviles.


/******************************************     Codigo C#          *************************************************/
using MobileNug.Net;
(…)


ClienteFTP clienteFtp;
clienteFtp = new ClienteFTP();
clienteFtp.Host = «192.168.0.xxx»;
clienteFtp.Username =
«anonymous»;
clienteFtp.Password =
«»;


try
{
    clienteFtp.Ejecutar_FTP(
ClienteFTP.Comando.enviar,
                                               
@»Program FilesPrueba_MnugNETClienteFTParchivo.txt»);
}
catch (Exception ex)
{
   
MessageBox.Show(ex.Message);
}


(…)
 /****************************************************************************************************************/


 


/******************************************     Codigo VB.net          *************************************************/


Imports MobileNug.Net


Public Class Form1

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
Dim clienteFtp As New ClienteFTP()
  clienteFtp.Host =
«192.168.0.xxx» ‘TODO: Poner aqui el host del servidor FTP
 
clienteFtp.Username = «anonymous» ‘TODO: Poner aqui el nombre de usuario
 
clienteFtp.Password = «» ‘TODO: Poner aqui el pass
  
 
Try
   
clienteFtp.Ejecutar_FTP(MobileNug.Net.ClienteFTP.Comando.enviar, «nombrearchivo.txt»)
 
Catch ex As Exception
    MessageBox.Show(ex.Message)
 
End Try
End Sub
End
Class

 /***********************************************************************************************************************/


En el siguiente enlace podréis encontrar la solución completa, inclyendo el código fuente de la clase MobileNUG.Net.ClienteFTP


Si la utilizais recordar que hay que tunearla… agregar un control de errores en condiciones, y ampliarla con lo que necesiteis si la vais a utilizar en una aplicación seria.


Espero que os sea útil, y por supuesto si la mejorais o agregáis nuevas funcionalidades no dudeis en remitirlas a la dirección de correo de mobilenug (la encontraréis en la web de la comunidad), estaremos encantados de re-publicarla y agregaros como colaboradores.


Un saludo a todos
José Antonio


Mobile .NET Users Group


 

Aprovisionando bases de datos SQL CE con Integration Services

No hace mucho me preguntaron por la posibilidad de generar una base de datos para SQL Server CE desde un equipo PC para posteriormente pasarla a un parque de dispositivos móviles.


Esto en un principio no me pareció extremadamente útil hasta que vino la correspondiente explicación, el tremendo volumen de datos que tenían que cargar (tremendo tratándose de una base de datos para un dispositivo móvil claro), y que todos los equipos iban cargados con la misma información.


Por lo que me resulto un tema interesante, y tras darle un par de vueltas… pensando en la posibilidad de hacer alguna herramienta que nos permitiese hacerlo me di cuenta de la pérdida de tiempo en la que estaba a punto de caer… ¡pero si SQL Server Integration Services ya lo hace!…. me puse manos al a obra, y tras probar el típico asistente para crear un paquete de transacciones, caí con mi gozo en un pozo al no permitirme hacerlo… así que tocó hacerlo a manita, en las siguientes líneas he puesto un “paso a paso” basado en hechos reales… jejeje, digo reales ya que trabajo con Microsoft Dynamics y el tutorial y las pruebas se han hecho trabajando contra una base de datos de Microsoft Dynamics NAV 5.0 SP1, pero sirve para cualquier tipo de origen de datos, desde cualquier base de datos que soporte ODBC, sobre SQL Server o cualquiera de los orígenes de datos soportados por las herramientas de SQL Server Integration Services… XML, archivos de texto, Excel, Access…


Integrando SSIS con SQL CE


Para poder explicar como hacer esto he preparado una pequeña guia en la cual explico como crear una solución desde cero en Visual Studio que podreís descargar de aquí ya que es un poco amplia para colgarla directamente en el blog.


Espero que os resulte útil!!


Un saludo a todos
José Antonio


Mobile .NET Users Group


 

Integrando Dynamics Mobile con Outlook Mobile

Hoy voy a contar algo que me han preguntado ya varias personas, y es como integrar Outlook Mobile dentro de una aplicación desarrollada con el framework de Microsoft Dynamics Mobile.



Y es que una de las tareas que más comúnmente debemos introducir en nuestras aplicaciones es poder gestionar una agenda, manejar tareas y controlar avisos… todo eso ya está incluido en nuestros dispositivos gracias a las funcionalidades que nos da Outlook Mobile, por lo que… ¿para que vamos a reacer todo eso de nuevo? 



Como ya sabréis muchos, Outlook puede ser integrado dentro de nuestros desarrollos, y con Dynamics Mobile no es diferente, de hecho, nos permite utilizar la interfaz propia de Outlook, y de un modo tan sencillo como el agregar la llamada al Tasklet correspondiente en nuestra aplicación.


Vamos a ver a continuación como agregar esta funcionalidad a nuestros propios desarrollos para Dynamics Mobile.



1. Integrar Outlook Mobile:
1.1.        Prerrequisitos

Para poder seguir este tutorial necesitaremos:




  • Visual Studio 2005 standard o profesional


  • Compact Framework 2.0


  • SDK Windows Mobile 5.0 o 6.0


  • Microsoft Dynamics Mobile Tools

1.2. Creando nuestra aplicación
Abrimos el visual Studio 2005 y creamos un nuevo proyecto.
Seleccionamos en tipo de proyecto Visual C#, Smart Device y solución para Windows Mobile 5.0 o 6.0 (esto último es independiente).
En la parte de plantillas (ver figura 1) seleccionamos la plantilla de Tipo Tasklet



Figura 1


Para nuestro ejemplo llamaremos a nuestro Tasklet “TaskletOutlook”.
Pulsaremos en Aceptar y se nos creará un proyecto con estos contenidos (Ver figura 2)



Figura 2


Hasta aquí sencillo ¿no? pues continuemos, ahora sobre este mismo proyecto vamos a agregar un nuevo proyecto, esta vez del tipo RolePad.
 
Para ello, en nuestro Visual Studio iremos a: 
Archivo–>Agregar–>Nuevo proyecto y seleccionaremos en las plantillas, la plantilla de RolePad (ver figura 3)



 
Figura 3
 


Pulsaremos en aceptar y se nos agregara el proyecto del tipo RolePad a nuestra aplicación.



Figura 4


Como podéis ver en el explorador de soluciones (Figura 4) ahora tenemos dos proyectos nuestro TaskletOutlook y el proyecto DemoOutlook. 
 
En este último es donde podemos encontrar el archivo UserRole.xml y el archivo app.config (entre otros que para este ejemplo no son relevantes)



Aún nos queda un poquito antes de empezar a entrar en la integración con Outlook.


Debemos establecer la carpeta de resultados de nuestros dos proyectos a una misma ubicación.


Sobre cada uno de los proyectos haremos clic con el botón derecho del ratón y pulsaremos en propiedades, iremos a la pestaña Dispositivo y modificaremos la “Carpeta de archivo de resultados:” por “DemoDynamics” (Ver figura 5) 
 



 
Figura 5



Esto lo debemos hacer en los dos proyectos. 


Una vez hecho esto, iremos al proyecto DemoOutlook  y agregaremos como referencia el proyecto TaskletOutlook.
 
Para hacerlo pulsar con el botón derecho sobre el proyecto y pulsar en “Agregar referencia…” seleccionamos la pestaña Proyectos y ahí (figura 6) encontraremos nuestro Tasklet, lo seleccionamos y pulsamos en aceptar.



Figura 6
 
NOTA: Estos pasos que estás siguiendo son los básicos para crear una aplicación sobre Dynamics Mobile.
 
Ya tenemos nuestro primer Tasklet y la aplicación RolePad.
 
Ahora vamos a comenzar a trabajar para enlazar Outlook con nuestra aplicación.


Sobre nuestra aplicación RolePad agregaremos las siguientes referencias, repetiremos el proceso, botón derecho sobre el proyecto y seleccionaremos “Agregar referencia…”
 
Una vez se muestre la ventana pulsaremos en la pestaña “Examinar” e iremos a la carpeta donde hayamos instalado el Mobile Framework de Dynamics, la ruta por defecto es:


C:Archivos de programaMicrosoft Dynamics MobileMobile FrameworkDeploy


Una vez en la carpeta Deploy debemos seleccionar varias referencias:
– Interop.PocketOutlook.dll
– Microsoft.Dynamics.Mobile.Components.Services.PocketOutlookService.dll
– Microsoft.Dynamics.Mobile.Components.Tasklets.Outlook.dll
 
1.3. Modificando el archivo UserRole.xml
 
Una vez agregadas las referencias abriremos el archivo UserRole.xml y deberemos copiar el siguiente código.(sobreescribiendo TODO el contenido)
 
 
<?xml version=»1.0″ encoding=»utf-8″ ?>
  <userRole minimize=»true» xmlns=»http://schemas.microsoft.com/Dynamics/Mobile/2007/04/Flow«>
    <orchestrations>
      <orchestration name=»startup»>
        <tasklets>
          <tasklet name=»TaskletOutlook» type=»TaskletOutlook.Tasklet1, TaskletOutlook» >
            <actions >
              <open tasklet =»Task.Create»
                    text =»Nueva Tarea»
                    name =»MnuNuevaTarea»
                    priority =»1″/>
              <exitOrchestration text =»Cerrar» priority =»2″ />
            </actions>
          </tasklet>
          <tasklet name=»Task.Create»
                  type=»Microsoft.Dynamics.Mobile.Components.Tasklets.NewTaskTasklet,
                        Microsoft.Dynamics.Mobile.Components.Tasklets.Outlook» />
        </tasklets>

      </orchestration>
    </orchestrations>
</userRole>
 
 
La parte que más nos interesa para este ejemplo es la parte resaltada.
(Para más información sobre el archivo UserRole acudir al artículo “Diseccionando el archivo UserRole Parte II”)
 
En esa parte hemos declarado el tasklet que utilizaremos para integrar Outlook Mobile <tasklet name=»Task.Create…»
 


1.4. Agregando servicios a app.config 
Una vez agregado este texto, guardaremos y abriremos el archivo app.config. Debemos agregar el servicio que nos dará acceso a trabajar con Outlook, para ello debemos agregar el siguiente elemento <add> dentro de <services>
 
<services>

<add type=»Microsoft.Dynamics.Mobile.Components.Services.IPocketOutlookService,
           Microsoft.Dynamics.Mobile.Components.Services.PocketOutlookService» 
     implementation=»Microsoft.Dynamics.Mobile.Components.Services.PocketOutlookService,
                     Microsoft.Dynamics.Mobile.Components.Services.PocketOutlookService»/>

</services>  


Cuando ya hayamos agregado este elemento, guardamos nuestro archivo app.config y ya estamos lístos, para probar!!!
 
1.5. Probando nuestra aplicación
Lo primero es asegurarnos de establecer como proyecto de inicio el proyecto DemoOutlook.
Esto lo puedes hacer seleccionando el proyecto, botón derecho y en el menú contextual marcarlo como proyecto de inicio.
 
En Visual Studio pulsa F5, selecciona el Emulador de Windows Mobile 5.0 o 6.0 según corresponda (si te pregunta el programa) y VS abrirá automáticamente el emulador y desplegará nuestra aplicación, la cual tendrá una apariencia similar a esta. (Ver imagenes)



 
 
 
Para probar la parte de crear una nueva tarea pulsamos sobre el menú “Nueva Tarea” y tachaaaa, ya tenemos nuestro enlace a crear tareas en Outlook Mobile sin haber escrito NI UNA SOLA LÍNEA de codigo en nuestro Tasklet.
 
Epilogo:


Acabamos de ver como enlazar la creación de tareas en Outlook Mobile desde nuestra aplicación Dynamics Mobile, por supuesto es posible acceder a nuestras tareas, a nuestros calendarios, revisar alertas… pero eso ya lo iremos viendo en la próxima entrega, tiempo al tiempo. 



Podréis descargar la solución completa para Visual Studio 2005 y el SDK de Windows Mobile 5.0 en el siguiente enlace.
 
http://www.mobilenug.com/descargas/Descarga%20de%20soluciones/[DM]DemoTaskletOutlook.zip 
 
Si queréis este tutorial en PDF lo encontrareis en:
 
http://www.mobilenug.com/dynamics/Archivos/Integrando%20Dynamics%20Mobile%20con%20Outlook.pdf 
 
Saludos a todos
José Antonio Gallego
  


Mobile .NET Users Group