Professional Documents
Culture Documents
Ttulo
Curso Acadmico
2012-2013
El autor
Universidad de La Rioja, Servicio de Publicaciones, 2013
publicaciones.unirioja.es
E-mail: publicaciones@unirioja.es
Resumen
4iKIM es una plataforma que nos permite gestionar informacin, sobre la cual se han
construido varias verticalizaciones para solucionar problemas ms especficos. Entre sus
mltiples elementos recoge la posibilidad de crear y organizar las tareas, por lo que se ha
considerado la utilidad de creacin de una aplicacin para gestionar y organizar tareas en
dispositivos mviles.
Como objetivo del proyecto, se realizar una prueba de concepto [PoC] sobre una
verticalizacin de 4IKIM que trabaje sobre un API de la plataforma y que permita comprobar la
utilidad de una herramienta con tal propsito. En dicha aplicacin se debera poder crear
nuevas tareas, editarlas, completarlas, eliminarlas, y gestionarlas de un modo gil, as como
poder visualizarlas de forma rpida y sencilla.
Abstract
4iKIM is a platform that allows us to manage information. The team of 4iKIM Collaboration SL
has built several verticalizations oriented towards solving more specific problems based on this
platform. As one of the elements of 4IKIM platform is the ability to create and organize tasks,
it has been considered the utility of creating an application to manage and organize tasks on
mobile devices.
As an objective of the project, there will be a proof of concept [PoC] onto a 4IKIM
verticalization that works on an API's platform and allows to verify the usefulness of a tool for
this purpose. With this that application, user should be able to create new tasks, edit them,
complete them, delete them, and manage them in a fast way, as well as displaying them
quickly and easily.
ndice
Introduccin a 4IKIM ..................................................................................................................... 8
Objetivos del TFG .......................................................................................................................... 8
Planificacin Inicial ........................................................................................................................ 9
Anlisis de requisitos ................................................................................................................. 9
Diseo........................................................................................................................................ 9
Interfaz ...................................................................................................................................... 9
Servicios..................................................................................................................................... 9
Testeo ........................................................................................................................................ 9
Anlisis......................................................................................................................................... 10
Prototipado ............................................................................................................................. 10
Enumeracin de los casos de uso ........................................................................................... 11
Esquema de Navegacin de Casos de uso .............................................................................. 14
Alcance del TFG ....................................................................................................................... 15
Pila de la aplicacin ............................................................................................................. 15
Diseo.......................................................................................................................................... 16
Diseo de las interfaces .......................................................................................................... 16
Diagrama de navegacin por ventanas ................................................................................... 23
Diseo en iPad ......................................................................................................................... 24
Arquitectura de 4IKIM ............................................................................................................. 25
Arquitectura de Task4U .......................................................................................................... 26
Arquitectura fsica ............................................................................................................... 26
Arquitectura lgica .............................................................................................................. 26
Patrones utilizados .................................................................................................................. 27
Uso de los patrones................................................................................................................. 27
Diagramas de clases ................................................................................................................ 28
Task4UApp .......................................................................................................................... 28
Servicios............................................................................................................................... 28
Capa de Lgica de Negocio.................................................................................................. 29
Capa de presentacin .......................................................................................................... 29
Representacin de una tarea en Task4U ............................................................................ 30
Recurrence .......................................................................................................................... 31
5
Introduccin a 4IKIM
4iKIM es una plataforma que nos permite gestionar informacin tanto personal como
corporativa de una forma integrada, unificada y colaborativa, independientemente de su tipo,
la fuente de informacin o su complejidad.
En base a esta plataforma, gracias al enfoque abierto y flexible de la misma, el propio equipo
de 4iKIM Collaboration S.L ha construido varias verticalizaciones orientadas a solucionar
problemas ms especficos (correo electrnico, gestin documental, gestin de proyectos).
Uno de los componentes que nos ofrece esta plataforma son servicios web, los cuales puede
estar publicados como servicios SOAP y/o REST. Mediante estos servicios se pueden construir
distintos tipos de aplicaciones, con distintos tipos de interfaces (web, mvil, otro servicios).
Planificacin Inicial
Anlisis de requisitos
Captura de requisitos del proyecto y definicin del alcance.
Fecha prevista de finalizacin: 8 de Febrero
-
Diseo
Desarrollo de un modelo o representacin para el programa.
Fecha prevista de finalizacin: 22 de Febrero
-
Interfaz
Implementacin de los formularios que componen la aplicacin
Fecha prevista de finalizacin: 12 de Abril
-
Servicios
Programar los servicios que doten a los formularios de contenido
Fecha prevista de finalizacin: 18 de Mayo
-
Priorizar funcionalidad
Partes de cdigo relevante
Testeo
Probar la aplicacin en los distintos dispositivos
Fecha prevista de finalizacin: Por determinar
Anlisis
Prototipado
En una primera fase de evaluacin del proceso, consideramos necesario imaginar el
funcionamiento bsico de la aplicacin. Para ello, y sin olvidar que la aplicacin nace como una
idea cambiante y muy flexible, hemos decidido utilizar prototipado en papel por su
manipulacin rpida y elstica.
Gracias a la primera revisin del prototipado en papel conseguimos definir y conceptualizar
mucha funcionalidad de nuestra aplicacin para la gestin de tareas, as como una primera
idea del flujo de las diversas pantallas, y como aproximacin a una maquetacin ms detallada.
Terminado el prototipado que se aade a este proyecto como anexo, iniciamos una segunda
fase de prototipado, esta vez a ordenador, en el que empezamos a incluir algo de
funcionamiento y navegacin para lograr un mayor detalle y detectar nuevas carencias o
mejoras en el modelo inicial.
Sobre este segundo prototipado realizamos el anlisis de requisitos, tratando de abarcar la
funcionalidad total de la aplicacin, pero sin olvidarnos de que, por tratarse de un prototipo, la
misma no estar en absoluto cerrada, sino abierta a cualquier cambio, ya sea de estilo o
nuevas funcionalidades.
10
c2.
c3.
Listar tareas:
Se podr mostrar un listado con las tareas que compartan criterios, ya sean
prestablecidos en unas listas predefinidas: tareas para hoy, destacados; o tareas
que compartan listas: trabajo, casa.
c4.
Filtrar listados:
Dentro de un listado, se podr realizar un filtrado, mostrando tan slo las tareas
que comparten las etiquetas establecidas en dicho filtro.
c5.
c6.
c7.
c8.
c9.
12
13
14
En principio intentaremos abarcar hasta el punto 5 de la pila, aunque en funcin del tiempo y
costes de realizacin dichas tareas, est sujeto a cambios.
15
Diseo
Diseo de las interfaces
El diseo de las interfaces se ha llevado a cabo mediante un detallado prototipado. Los
motivos y su evolucin estn explicados en el anlisis de requisitos de este mismo documento.
Listados
Resumen: En esta pantalla se mostrarn al usuario las tareas recin creadas que todava no
han sido revisadas. Desde este men el usuario podr editar tareas, aadirlas, o completarlas
de un modo cmodo y sencillo.
Casos de uso recogidos: c4: Filtrar listados, c7: Aadir tareas de modo simple, c8: Aadir una
tarea de modo avanzado, c10: Completar una tarea, c11: Ver una tarea
16
Resumen: En cualquier listado podemos pulsar el botn de bsqueda para encontrar las tareas
que contengan un texto.
Casos de uso recogidos: c5: Realizar bsquedas
Listados -> Editar
17
Resumen: Desde este men se pueden modificar los listados a los que pertenecer una tarea.
Casos de uso recogidos: c6: Asignar lista a las tareas
Men
Resumen: Deslizando el dedo hacia la derecha en un listado se accede al men, desde el cual
se podr acceder a los listados predeterminados, como Destacados, Hoy o Completadas, y
a los listados creados por el usuario.
Casos de uso recogidos: c3: Listar tareas
18
(*) No definiremos todos los listados predeterminados ya que todos actan de forma similar (e.g. el listado destacados en base al
campo destacados que se modifica en la creacin o edicin de una tarea).
Resumen: El listado Hoy es un listado predeterminado en el que se muestran las tareas cuya
fecha de vencimiento establecida es el da actual. Como la fecha de vencimiento no se
establece en base a ningn listado prestablecido, no se pueden mover tareas a este listado, ni
desde este listado a otros. Si se desea mover una tarea al listado Hoy ser necesario cambiar
su fecha de vencimiento.
Casos de uso recogidos: c10: Completar una tarea, c11: Ver una tarea
Men -> Editar
Resumen: El modo de edicin permite ordenar los listados creados por el usuario y
reordenarlos, para facilitar la visualizacin de aquellos que se consideren ms importantes.
Aunque las bandejas predefinidas no se pueden borrar del mismo modo, s que se puede evitar
su visualizacin pulsando en ellas, donde podremos controlar su comportamiento y aparicin.
Casos de uso recogidos: c22: Eliminar una lista.
19
Resumen: Al pulsar sobre una lista en el modo de edicin, llegaremos a esta ventana en la cual
podremos establecer los criterios de aparicin y ordenacin de las listas predefinidas. Las
opciones nos permiten establecer el criterio de ordenacin o de aparicin en el men,
pudiendo no mostrar un campo predefinido o mostrarlo slo si tiene algn elemento.
Casos de uso recogidos: c25: Establecer criterio de ordenacin, c26: Ocultar o mostrar listados
predeterminados.
Men -> Editar -> Lista creada
Resumen: Desde el men, con la opcin de edicin, pulsando una lista creada llegaremos a
esta ventana. Esta es igual a la de creacin de una nueva lista, con la salvedad de que en esta,
est la opcin de eliminacin de la lista.
Casos de uso recogidos: c25: Establecer un criterio de ordenacin, c21: Compartir una lista,
c22: Eliminar una lista.
20
Resumen: Se abre en una ventana modal y permite la creacin de una nueva lista, donde se
establecen, adems del nombre y el criterio de ordenacin, los usuarios con los que se desea
compartirlas tareas de dicha lista.
Casos de uso recogidos: c25: Establecer un criterio de ordenacin, c21: Compartir una lista.
Men -> Nueva lista -> Compartir con
Resumen: Esta ventana sirve para seleccionar los usuarios con los que se desea compartir una
lista de tareas.
Casos de uso recogidos: c21: Compartir una lista.
21
Resumen: Desde este men se pueden ver y editar todas las caractersticas propias de cada
tarea, adems de posponer (retrasar la tarea un da) delegar a otra persona dicha tarea, o
eliminarla definitivamente.
Casos de uso recogidos: c9: Eliminar una tarea, c11: Ver una tarea, c12: Posponer una tarea,
c13: Delegar una tarea, c20: Editar tarea creada con anterioridad.
Resumen: Cada uno de los parmetros del men de edicin de las tareas ofrece una ventana
para configurarlo.
Casos de uso recogidos: c14: Aadir subtareas, c15: Establecer la prioridad de las tareas, c16:
Destacar tareas, c17: Etiquetar tareas, c18: Establecer intervalo de repeticin, c19: Establecer
fecha
de
vencimiento
22
23
Diseo en iPad
En iPad, el men lateral de la aplicacin estara fijo, y a su derecha se podr ver los listados desplegados, haciendo una navegacin ms fluida, tal y como se
muestra en el prototipo a continuacin:
24
Arquitectura de 4IKIM
4IKIM Knowledge Center, en adelante 4IKIM KC, est diseado para ser una aplicacin
completamente extensible. Vendra a ser un ncleo, una aplicacin base a la que se le pueden
aadir multitud de mdulos que permitan controlar de forma ms usable los distintos tipos de
elementos de 4iKIM (chats, gestin de tareas, gestin de documentos, etc.) o ampliar la
funcionalidad.
Aunque 4IKIM KC est pensada para ser el contenedor de otras aplicaciones, es una aplicacin
para la gestin de trabajo corporativo, conteniendo la funcionalidad genrica de 4iKIM y puede
ser utilizada de manera independiente sin tener ninguna de ellas activas.
Al margen de 4IKIM KC, las aplicaciones pueden ser instaladas de forma independiente. La
aplicacin a realizar en este proyecto es uno de los mdulos para 4IKIM KC, pero se har como
aplicacin independiente.
La estructura bsica de 4IKIM KC seguira el esquema que se muestra a continuacin.
Sabiendo esto, el tema del que trata el proyecto es la realizacin de una aplicacin para la
gestin de tareas, que contendra mdulo, formularios y servicios asociados partiendo de las
respectivas interfaces comunes con el resto de aplicaciones.
25
Arquitectura de Task4U
Arquitectura fsica
El modelo predominante de arquitectura en tres capas (cliente, servidor web y base de datos)
ha dejado paso a un nuevo modelo en el que un servidor web de APIs es consumido por varias
aplicaciones o servicios (aplicaciones mviles, webs, bus, colas).
Nuestra aplicacin seguir este modelo, por lo que obtendr y modificar los datos a travs de
un servidor API web, que es el encargando de mantener la persistencia de la informacin.
En un futuro sera posible integrar una persistencia propia de la aplicacin para poder utilizarla
en modo offline. Para ello se utilizara una base de datos SQLite que almacenara los datos
recogidos en el servidor de 4IKIM.
Arquitectura lgica
La arquitectura lgica de nuestra aplicacin estar basada en el patrn MVC (Modelo Vista
Controlador).
Los datos son obtenidos de la API mediante llamadas a los servicios REST con lo que se
alimentarn nuestros modelos. El controlador se encargar de la comunicacin entre el
modelo y la presentacin (la vista).
26
Patrones utilizados
Abstract Factory [GoF]: El patrn Abstract Factory nos permite crear, mediante una
interfaz, conjuntos o familias de objetos (denominados productos) que dependen
mutuamente y todo esto sin especificar cul es el objeto concreto.
State [GoF]: Se utiliza cuando el comportamiento de un objeto cambia dependiendo
del estado del mismo. Por ejemplo: una alarma puede tener diferentes estados, como
desactivada, activada, en configuracin. Definimos una interfaz Estado_Alarma, y
luego definimos los diferentes estados.
Strategy [GoF]: Determina cmo se debe realizar el intercambio de mensajes entre
diferentes objetos para resolver una tarea. El patrn estrategia permite mantener un
conjunto de algoritmos de entre los cuales el objeto cliente puede elegir aquel que le
conviene e intercambiarlo dinmicamente segn sus necesidades.
Template Method [GoF]: Abstrae todo el comportamiento que comparten las
entidades en una clase (abstracta) de la que, posteriormente, extendern dichas
entidades. Esta superclase definir un mtodo que contendr el esqueleto de ese
algoritmo comn (mtodo plantilla o template method) y delegar determinada
responsabilidad en las clases hijas, mediante uno o varios mtodos abstractos que
debern implementar.
Plugin [PoEAA]: permite agregar funcionalidad a nuestro sistema en forma dinmica
utilizando configuracin, por lo general se usan en frameworks que permitan agregar
nuevas formas de implementar funcionalidades ya existentes.
Nivel de aplicacin:
o Abstract Factory: Para enlazar la instanciacin del servicio, la factora de
formularios y los mdulos.
Nivel de servicio:
o Abstract Factory: Para enlazar en la instanciacin con el servicio web
correspondiente y el motor de persistencia local.
o State: Para diferenciar entre el funcionamiento Online y Offline.
Nivel de formularios:
o Abstract Factory + Plugin: Para la instanciacin y carga de los formularios.
o Strategy: Para la independencia entre IOS y Android.
o Template Method: Para algoritmos iguales que difieran en ciertas operaciones
nicamente.
Nivel de Mdulos:
o Plugin: Instanciacin y carga de los mdulos.
27
Diagramas de clases
Task4UApp
Utiliza la composicin para unir la interfaz, el servicio y la lgica.
Servicios
Los servicios se la que se encarga de las llamadas a la API. Utiliza el patrn state, ya que en
caso de estar en modo online debe llamar a la API mientras que si est offline debe utilizar una
base de datos SQLite, aunque por el tiempo limitado del proyecto se prev no dotar de
funcionalidad offline a nuestra aplicacin.
Task4UService extiende a I4UService, que es comn a todas las aplicaciones de la
plataforma.
28
Capa de presentacin
Los formularios que utilizaremos en la aplicacin heredan de Task4UForm, la cual completa la
descripcin de I4UForm. Se utiliza el patrn strategy y los formularios resultantes sern la
capa visible de la aplicacin final.
29
30
Recurrence
Recurrence es la clase que representa la repeticin de las tareas, existir siempre y cuando
el valor booleano periodic de una tarea sea verdadero, y sus 3 valores representan cada
cundo ha de repetirse la tarea:
31
32
Implementacin
Por qu Appcelerator Titanium?
Para la creacin de nuestra aplicacin, hemos decidido utilizar el Framework de la empresa
Appcelerator, ya que nos ofrece una serie de ventajas, como son:
Es una Framework que nos permite desarrollar aplicaciones multiplatorma sin repetir
el cdigo, tanto para iPhone, como para iPad, Android, BlackBerry, etc. La mayor parte
del cdigo slo tendremos que pensarlo una vez, aunque cada dispositivo tiene una
serie de particularidades que hay que tratar individualmente.
Es gratuito tanto para uso personal como comercial.
Es software libre; tener acceso al cdigo fuente nos garantiza que no se est
inyectando cdigo malicioso en nuestra aplicacin, y asegura el mantenimiento del
cdigo a largo plazo.
El lenguaje de programacin utilizado es JavaScript, por lo que utilizaremos un
lenguaje muy frecuente y til para desarrollos posteriores, ya sea en nuevas
aplicaciones para mviles con Titanium, o bien en desarrollo de aplicaciones web.
Aspecto y uso de controles nativos.
Formacin JS
Al iniciar el proyecto, tan slo haba programado en JavaScript pequeos scripts para
aplicaciones web, al embarcarme en un proyecto de esta magnitud he tenido que dedicar una
semana a leer tutoriales y manuales de JavaScript, para familiarizarme con el lenguaje.
Mediante dichos tutoriales he aprendido las formas de emular orientacin a objetos con
JavaScript, cosa que el propio lenguaje no tiene de forma natural.
Decisiones de implementacin
Recurrence
Se ha decidido la creacin de una clase para la conversin de los valores de la clase que se
ocupa de la recurrencia llamada RecurrenceConverterHelper, la cual, a partir de unos
valores de la clase Recurrence, determina la repeticin de acuerdo al formulario de
repeticin de la tarea:
33
34
La funcin fn_refresh llama a la capa de lgica de negocio para obtener la lista de tareas y
mostrarlas actualizadas en el formulario del listado. Dicha llamada a la lgica de negocio
tambin nos servira para ilustrar el uso de callbacks y EventListener, pero nos
centraremos en la llamada inicial a tasksListTableClick.
Hemos escrito este mtodo en la lgica de negocio en lugar del formulario de listados, ya que,
aunque hace referencia al clic en la tabla de dicho formulario, requiere el uso de la factora de
formularios para la creacin de uno nuevo.
En este mtodo creamos un nuevo formulario del tipo Task4UTaskForm, al cual le pasamos,
adems de los parmetros requeridos para la creacin de dicho formulario, el parmetro
fn_callback que hace referencia a la funcin fn_refresh del listado de tareas.
35
Al iniciar el formulario, volvemos a requerir la lgica de negocio para la obtencin de los datos
del formulario, recordemos que no es posible obtener todos los datos para la generacin de la
tarea desde el listado, ya que el listado, para agilizar la carga y minimizar el uso de memoria,
usa un modelo simplificado de los datos (NavigationTasksListModel).
Cuando hemos recuperado los datos, desde la lgica volvemos a este formulario utilizando
eventos, para ello colocamos un EventListener en el formulario principal self de
Task4UTaskForm:
36
Diagrama de secuencia
En el siguiente diagrama se puede observar el proceso mediante el cual la peticin de datos se traslada hasta el servicio API Web, y del mismo modo cmo
se devuelve la informacin al formulario que lo solicita.
37
En la primera lnea, declaramos Task4UForm, que es el formulario del que hereda. Eso se lo
especificamos en la penltima lnea, asignando al prototype de este formulario una instancia
de Task4UForm, lo que hace que las instancias de Task4UPriorityForm cuenten con los
mtodos especificados en Task4UForm.
En la ltima lnea exportamos este formulario para que pueda ser utilizado desde otras clases
de nuestro programa.
Observar que podramos llamar a este formulario desde cualquier otra parte de nuestro
cdigo, aunque en nuestro programa la funcin de creacin de formularios residir en un
formulario AbstractFactory diseado para tal fin.
Visto esto, veremos el contenido del formulario Task4UPriorityForm:
38
En JavaScript, el this tiene un comportamiento diferente al de otros lenguajes [1], eso hace que
en algunas partes del cdigo no tengamos visibilidad al contexto, y no podamos utilizar las
funciones del formulario Task4UForm desde el que estamos heredando. Para solucionar este
contratiempo, asignamos a la variable _this el contenido de this para poder utilizar el contexto
en cualquier lugar de nuestro formulario.
Despus de esto creamos funciones que utilizaremos para los eventos. Se puede apreciar la
creacin de dos funciones, fn_open, y fn_close, que las asignaremos a los distintos eventos.
Esto nos permite escribir cdigo que ejecutar en la apertura o cierre de nuestros formularios.
Por ejemplo, el cdigo que contiene el fn_close es el siguiente:
En la documentacin que hemos ledo, nos hemos informado de que JavaScript no siempre
elimina correctamente los EventListener al cerrar los formularios. Para asegurarnos de que
sean borrados y no consuman memoria, los eliminamos uno a uno con
removeEventListener.
Hecho esto, creamos la ventana principal, a la que denominamos self
Podemos observar el uso de this para la creacin de la ventana, esto hace que en lugar del
crear la ventana con el mtodo de Titanium, usamos el definido en Task4UForm, permitiendo
que herede la mayor parte de sus propiedades, y haciendo que no tengamos que repetir,
dichas propiedades en todos los formularios de nuestra aplicacin.
Despus aadimos los EventListener a la ventana que acabamos de crear:
http://www.etnassoft.com/2012/01/12/el-valor-de-this-en-javascript-como-manejarlo-correctamente/
39
Despus crearemos el TableView, una tabla que contiene una lista de filas. Este elemento es
muy importante ya que se utiliza en la mayora de los formularios de la aplicacin, para
mostrar listados, mens, o las propiedades de las tareas, por ejemplo.
En esta parte del cdigo podemos ver un detalle interesante, el tableView se ha creado
llamando al this, el tableViewRow usando _this, ya que no est en el mismo mbito al estar
dentro del for, y para la creacin de la variable section (que sirve para crear diferentes
secciones dentro de un tableView), se ha utilizado Ti.UI.createTableViewSection(),
por lo que crearemos una seccin predeterminada por Appcelerator Titanium.
Una vez diseado el aspecto del tableView, pasaremos a darle funcionalidad, mediante un
EventListener al evento click del mismo:
En la primera lnea dentro de la funcin se lanza el evento al formulario superior, para que este
pueda actualizar su fila, con el nuevo valor que acabamos de cambiar.
La segunda lnea llama a la clase Task4UModule, que en nuestra aplicacin se encarga de
hacer las peticiones a los servicios, tanto para devolver en callback una serie de datos con
mtodos del tipo de getTasks como, en este caso, hacer modificaciones de los mismos en la
capa de datos por medio de la API.
Con la tercera lnea, modificaremos la prioridad en el objeto Task con el que estamos
trabajando. Acto seguido ejecutaremos una funcin que se ha pasado desde el padre como
parmetro, en concreto lo que hace dicha funcin es decirle al formulario de tareas que la
prioridad ha sido cambiada, para que sepa que al salir del formulario debe actualizar los datos
en el listado, ya que en el listado de tareas hay un indicador de prioridad asociado a cada tarea
(en la parte izquierda se muestra color azul, rojo o gris, segn si la urgencia de la tarea).
Para finalizar este evento cerramos la ventana eliminndola adems del NavigationGroup.
Por ltimo aadimos la tabla al formulario y lo devolvemos, para que cuando hagamos la
llamada a esta clase podamos hacer uso del formulario.
41
Task4UModule
La clase Task4UModule es la que se encarga de enlazar los formularios con los servicios.
El nmero de mtodos que esta clase tiene es muy grande. Entre otros, contiene mtodos para
crear nuevas tareas, buscar usuarios o grupos, marcar como favorita una tarea, etc.
Ejemplo: Funcionamiento de un mtodo de Task4UModule
Para ilustrar el funcionamiento de los mtodos de la clase veremos con ms detalle uno de
estos mtodos:
Observamos que el mtodo getTaskLists tiene dos partes, al principio declara una funcin,
llamada service_callback, que se utilizar ms adelante. En ella parsea los datos que
llegan del servicio aunque en este caso no sea necesario.
Despus de parsear los datos, que en este caso tan slo hace una asignacin de data, se lanza
un evento en el formulario, llamando al evento getData de ese formulario.
Aunque en la creacin del formulario de prioridad, no se puede apreciar, hay formularios, que
precisan una llamada a la capa de servicio para completar sus datos, ejemplos de estos
formularios podran ser: el listado de tareas, el formulario en que se edita una tarea, o en el
que se comparten y delegan.
Para ello, dichos formularios disponen de un EventListener adicional que llama a un
mtodo getData, que utilizan para completar el formulario con los datos recibidos.
Para aadir el EventListener se utiliza:
En este EventListener se puede apreciar que se incluye el identificador del formulario, para
que cuando se devuelvan los datos, solo sea este formulario quien los utilice.
42
La principal ventaja que nos otorga el uso de esta clase es que podemos redefinir el
comportamiento bsico de cualquier tipo de elemento de Titanium, y usarlo en todos nuestros
formularios sin tener que indicarlo en cada uno de ellos.
43
Por ejemplo, si queremos que todos nuestros botones tengan la propiedad style:
bordered, podemos hacer que el mtodo createButton cree, un botn Ti.UI.Button
con esa propiedad, y devolver el elemento creado en el return. Adems de poder utilizar
propiedades por defecto, tambin podemos elegir un comportamiento segn el dispositivo, o
aadir eventos y propiedades, que estos el elemento por defecto no trae.
Ejemplo: Funcionamiento de un mtodo de Task4UForm
Veremos con ms detalle uno de los mtodos de la clase, para que se comprenda mejor la
explicacin dada:
44
Slider
En la aplicacin para iPhone, y para iPad en modo vertical, se plante poner un men
deslizante en el lateral, que mostrara u ocultara los listados de tareas para poder acceder a
ellos de modo rpido:
Dicho men no es nativo, y fue necesario valorar distintas alternativas que encontramos. Unas
aseguraban ser compatibles con Android e iOS, otras por el contrario slo para iPhone, pero el
uso de ninguna era trivial, y plantearon varias complicaciones en su implementacin, ya que al
combinarla con los navigationGroup de Titanium daba algunos errores de la plataforma.
Las libreras para la implementacin de dicho complemento han sido seleccionadas de entre
varias encontradas de un repositorio de GitHub y adaptadas a nuestra aplicacin. Su
implementacin ha sido algo compleja, ya que est fuera del modelo de navegacin que
tenamos pensado inicialmente.
45
Adjunto un proyecto de prueba con el slider que al final decidimos utilizar [2]:
Puesto que, como hemos explicado, daba problemas el utilizar los NavigationGroup con los
distintos listados del men, se cre una clase adicional, MainMenuController, que
almacenara los distintos listados del men principal, de modo que, al estar todos los
formularios del men en dicha clase, se pueden abrir al cambiar entre los distintos listados sin
recurrir al control nativo. Adems, fueron realizadas pequeas modificaciones en el cdigo de
dicho Slider adaptndolo a nuestro programa.
El resultado final de la implementacin es el siguiente:
https://github.com/dbankier/CoverSliderExample
46
Otros aspectos
Internacionalizacin
Titanium cuenta con funciones para internacionalizacin bajo el namespace Ti.Locale,
dichas funciones sirven para convertir cadenas de texto, nmeros, fechas, etc. Para ello se
debe crear una carpeta i18n, dentro de la cual se crear una carpeta por idioma que deseemos
en la aplicacin usando para su nombre la ISO 639-1 [3]. Por ejemplo, para el idioma espaol
debemos crear la carpeta es y dentro un archivo con el nombre strings.xml, en el cual
escribiremos las cadenas que deseemos que se muestren en el idioma.
3
4
http://es.wikipedia.org/wiki/ISO_639-1
http://momentjs.com/
47
Conclusiones
A pesar de que la aplicacin final ha tenido algo menos de funcionalidad que la prevista en el
inicio, creemos que como prueba de concepto sirve de sobra para demostrar que una
herramienta como la desarrollada facilita en gran medida la gestin de tareas para los usuarios
de 4IKIM.
Mientras que las fases tempranas del proyecto (anlisis y diseo) se realizaron dentro de los
plazos previstos, la estimacin del coste de desarrollo de los formularios e interfaces se alej
bastante de las expectativas iniciales, adems tampoco se tuvo en cuenta el coste en
formacin de JavaScript necesario. Esta desviacin unida a la limitacin en el tiempo, nos ha
obligado a recortar funcionalidades, pero se ha procurado realizar las partes ms especficas
de la aplicacin, omitiendo las partes que supondran cdigo similar al realizado e intentando
marcar el camino para un desarrollo posterior. En vistas de esto, se ha avanzado ms en la
integracin con el iPad que con la realizacin de navegacin de las subtareas o las listas de las
mismas.
Puesto que el trabajo se ha realizado en estrecha colaboracin con la empresa, ya que el
desarrollo del proyecto lo hemos hecho dentro de sus instalaciones, somos conscientes que la
empresa est interesada en proseguir con el proyecto, signo de nuestro pequeo xito con la
aplicacin.
Lecciones aprendidas
Durante el proyecto he observado, entre otras cosas, la dificultad de estimar el alcance de un
proyecto de esta magnitud, y ms con el desconocimiento inicial tanto de la plataforma
Appcelerator Titanium como del uso de Mac, con el cual no estaba especializado, y con mi baja
experiencia en JavaScript.
Gracias a la extensa documentacin, y al personal de 4IKIM, hemos logrado desarrollar la
mayor parte del proyecto, pero creo que el mayor logro ha sido la gran cantidad de
conocimientos adquiridos, tanto en el lenguaje como en la programacin de aplicaciones para
mviles, as como tambin en manejar un proyecto de esta envergadura.
Mis conocimientos de JavaScript han mejorado notablemente, fue necesario estudiar
manuales y tutoriales de JavaScript. Con anterioridad haba usado mucho los eventos, ya que
en los formularios de C# haba usado bastante el paradigma dirigido por eventos, sin embargo,
no puedo decir lo mismo de los delegados, cuyo uso se me ha esclarecido mucho gracias al uso
casi imprescindible en este lenguaje de callbacks y funciones de retorno.
En cuanto a la programacin para dispositivos mviles ahora mismo sera capaz de programar
aplicaciones para todo tipo de dispositivos mviles de un modo rpido, ya que considero que
en este aspecto, es donde se ha concentrado la mayor parte del conocimiento adquirido.
Puesto que todo el lenguaje se ha realizado bajo su plataforma, el aprendizaje de Appcelerator
Titanium ha sido muy grande, y dada la proliferacin de los dispositivos mviles, creo que
estos conocimientos pueden representar un toque de distincin en mi perfil profesional.
49
Bibliografa
JavaScript
Appcelerator Titanium
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64