CHAPTER FOUR
4.6. Future Training Programs
Política con Evidencias
Página 37 Uso de políticas de firma y evidencias en mensajes
} ] } ] }
Usaremos el parámetro type para indicar el tipo de evidencia imagen.
"type": "ANNOTATION"
Los parámetros que podemos usar en esta evidencia para su configuración son los siguientes: { "type": "ANNOTATION", "helpText": "Foto del cliente", "typeFormatSign": "XADES_EPES_ENVELOPED", "certificateAlias": "viafirmadocuments", "certificatePassword": "12345", "positions": [ { "page": 1, "rectangle": { "width": 100, "height": 145, "x": 417, "y": 330 } } ] } Key Descripción
type Tipo de evidencia, y debemos indicar “FINGER_PRINT”
helpText Ayuda contextual que aparecerá en modo “alert” en la pantalla del
dispositivo móvil antes de iniciar la captura.
typeFormatSign Formato en el que se firmará el XML que contendrá la evidencia
capturada. Los valores posibles se describen en el capítulo “Firma del XML”.
certificateAlias Alias del certificado que se usará para la firma; este certificado Evidencia del tipo Imagen
Página 38 Uso de políticas de firma y evidencias en mensajes
debe estar instalado previamente en servidor y asociado a las credenciales gestionadas por viafirma manager.
certificatePassword Password del certificado que se usará para la firma; este
certificado debe estar instalado previamente en servidor y asociado a las credenciales gestionadas por viafirma manager.
positions Array de posiciones, pudiendo indicar una o varias posiciones en la que
deseamos representar la imagen capturada. Para cada posición, indicaremos el número de la página, la posción dentro de la página y el tamaño.
positions: page Número de la página en la que se va a insertar la imagen
capturada.
positions: rectangle Usaremos las coordenadas X,Y para determinar el vértice
superior izquierdo del rectángulo imaginario para representar la imagen, e indicaremos ancho (width) y alto (height) del mismo.
Usaremos el parámetro type para indicar el tipo de evidencia huella, y el parámetro deviceType para indicar el vendor del dispositivo que vamos a utilizar para la captura. Al indicar un vendor relacionado con la captura de huellas, el dispositivo móvil cederá el control al accesorio para inciar la captura.
"type": "FINGER_PRINT", "deviceType": "vendorID"
Por ejemplo, para conectar con un lector de huella de Tactivo, Precise Biometric, usaremos el siguiente identificador: "deviceType": "iFMID"
Los parámetros que podemos usar en esta evidencia para su configuración son los siguientes: { "type": "FINGER_PRINT", "helpText": "Huella del cliente", "deviceType": "iFMID", "typeFormatSign": "XADES_EPES_ENVELOPED", "certificateAlias": "viafirmadocuments", "certificatePassword": "12345", "metadataCipherPublicKey": "MIIFbDCCBFSgAwIBAgIIGtUapa ...", "positions": [ { "page": 1,
Evidencia del tipo huella
Página 39 Uso de políticas de firma y evidencias en mensajes
"rectangle": { "width": 100, "height": 145, "x": 417, "y": 330 } } ] } ` Key Descripción
type Tipo de evidencia, y debemos indicar “FINGER_PRINT”
helpText Ayuda contextual que aparecerá en modo “alert” en la pantalla del
dispositivo móvil antes de iniciar la captura.
deviceType ID del vendor que usaremos para la captura. Por ejemplo, para
Tactivo, usaremos “iFMID”
typeFormatSign Formato en el que se firmará el XML que contendrá la evidencia
capturada. Los valores posibles se describen en el capítulo “Firma del XML”.
certificateAlias Alias del certificado que se usará para la firma; este certificado
debe estar instalado previamente en servidor y asociado a las credenciales gestionadas por viafirma manager.
certificatePassword Password del certificado que se usará para la firma; este
certificado debe estar instalado previamente en servidor y asociado a las credenciales gestionadas por viafirma manager.
metadataCipherPublicKey clave pública con la que será cifrado el contenido del
atributo metadata de la evidencia utilizando un cifrado RSA/None/NoPadding en UTF-8 al cual se le aplicará un base64.
positions Array de posiciones, pudiendo indicar una o varias posiciones en la que
deseamos representar la huella capturada. Para cada posición, indicaremos el número de la página, la posción dentro de la página y el tamaño.
positions: page Número de la página en la que se va a insertar la representación
de la huella capturada.
positions: rectangle Usaremos las coordenadas X,Y para determinar el vértice
superior izquierdo del rectángulo imaginario para representar la huella, e indicaremos ancho (width) y alto (height) del mismo.
Página 40 Uso de políticas de firma y evidencias en mensajes
El sistema permite crear formularios para ser usados como entrada de datos desde el propio dispositivo móvil. Su funcionamiento se describen en los siguientes pasos:
Crear una plantilla a partir de un .odt o .docx Generar formulario para la plantilla seleccionada.
Esta generación construirá un JSON con tantos elementos como variables hayan sido detectadas en la plantilla.
También se podrán crear nuevos formularios de forma directa haciendo uso del diseñador de formularios.
Cuando un formulario es informado (rellenado) desde el dispositivo móvil,
automáticamente se solicitará al servidor (mobile services) un nuevo mensaje que dará lugar al envio de una notificación, la cual nos llegará inmediatamente al mismo
dispositivo desde el que se completó el formulario.
Una vez recibida dicha notificación, el PDF ya se mostrará ajustado a la plantilla que fue vinculada al FORM, y con los datos informados por el usuario desde el propio
dispositivo móvil.
En los formularios que mostraremos en el dispositivo móvil se podrán usar los siguientes tipos de datos:
Caja de texto que valida si el texto introducido es un email con formato correcto.
Uso: { "key": "email", "type": "text", "label": "Email", "placeHolder": "insert email", "size": "33",
Uso de formularios
Tipos de Datos
Email Página 41 Uso de formularios"validation": "email" }
Como se muestra en la imagen, el teclado muestra la @ para facilitar la introducción del correo.
Caja de texto que habilita el teclado númerico para facilitar al usuario la introducción del número. Uso: { "key": "number", Teléfono Página 42 Uso de formularios
"type": "tel", "label": "Teléfono",
"placeHolder": "insert phone", "size": "33"
}
Como se muestra en la imagen, se habilita el teclado de teléfono.
Muestra calendario para que el usuario seleccione la fecha.
Uso: { "key": "date", Fecha Página 43 Uso de formularios
"type": "date", "label": "Date", "placeHolder": "date", "size": "33"
}
El usuario no podrá introducir tipo de dato incorrecto, sólo podrá seleccionar una fecha desde el objeto calendario mostrado.
Muestra calendario, hora y minutos para que el usuario la seleccione.
Uso:
Fecha y Hora
Página 44 Uso de formularios
{ "key": "datetime", "type": "datetime", "label": "Datetime", "placeHolder": "date time", "size": "33" }
El usuario no podrá introducir tipo de dato incorrecto, sólo podrá seleccionar una fecha y hora desde el objeto calendario mostrado.
Muestra hora y minutos para que el usuario los seleccione.
Hora
Página 45 Uso de formularios
Uso: { "key": "time", "type": "time", "label": "Time", "placeHolder": "time", "size": "33" }
El usuario no podrá introducir tipo de dato incorrecto, sólo podrá seleccionar una hora y minuto desde el objeto time mostrado.
Fecha Actual
Página 46 Uso de formularios
Carga la fecha actual del dispositivo, y no permite su edición. Uso: { "key": "today", "type": "todayText", "format": "%w - %d %n %y", "monthNames": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "dayNames": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] }
Formato por defecto: "%d/%m/%y"
Posibles Valores: d: Day m: Month number n: Month name w: Day name y: Full year H: Hours M: Minutes S: Seconds i: ISO date
Caja de texto que habilita el teclado númerico para facilitar al usuario la introducción del número. Uso: { "key": "number", "type": "number", "label": "Number", "placeHolder": "insert number", "size": "33" } Número Página 47 Uso de formularios
Este tipo de datos habilitará el teclado numérico del dispositivo móvil. Área de texto. Uso: { "key": "textarea", "type": "textarea", "label": "Textarea", "size": "100", "height": "120", "placeHolder" : "This is a textarea" } Textarea Página 48 Uso de formularios
height: se mide en píxeles, y por defecto es de 100.
Muestra el conjunto de valores contenidos en la lista informada dentro del JSON.
Uso: { "key": "select1", "type": "select", "label": "Select Sample", "list" : "combos" }
Lista precargada para el Select
La lista que alimentará al select del ejemplo 1 deberá definirse al principio del JSON tal y como se muestra en el siguiente ejemplo:
"lists" : {
"combos" : ["Value 1", "Value 2", "Value 3"] }
Muestra el conjunto de valores contenidos en la lista informada dentro del JSON.
Uso: { "key": "checkbox1", "type": "checkbox", "label": "Checkboxes", "list" : "checkboxes" }
Devolvemos string de lista de los valores seleccionados separados por ' | '
Lista precargada para el Checbox Select
Checkbox
Página 49 Uso de formularios
La lista que alimentará al checkbox anterior deberá definirse al principio del JSON tal y como se muestra en el siguiente ejemplo:
"lists" : {
"checkboxes" : ["Value 1", "Value 2", "Value 3"] }
Muestra el conjunto de valores contenidos en la lista informada dentro del JSON.
Uso: { "key": "radios1", "type": "radio", "label": "Radios", "list" : "radios" }
Lista precargada para el Radio
La lista que alimentará la lista de valores del radio del ejemplo anterior deberá definirse al principio del JSON tal y como se muestra en el siguiente ejemplo:
"lists" : {
"radios" : ["Value 1", "Value 2", "Value 3"] }
¿Cómo definir varias listas precargadas?
Para alimentar varias listas que serán usadas en distintos elementos del formularios, y siguiendo los ejemplos anteriores, se podrán informar de la siguiente forma:
"lists" : { "combos" : ["Value 1", "Value 2", "Value 3"], "checkboxes" : ["Value 1", "Value 2", "Value 3"], "radios" : ["Value 1", "Value 2", "Value 3"] } Radio Página 50 Uso de formularios
Listas Vinculadas
Los selects pueden estar vinculados de forma que los valores mostrados en cada uno dependan de los seleccionados en un select anterior, como la típica selección de provincia y con ella se recarga el select de municipios que pertenecen a esa provincia.
Para su uso nos ayudaremos del siguiente ejemplo:
En 1er lugar definimos la lista padre:
"lists" : {
"listaPaises" : ["España", "Colombia"] }
En segundo lugar definimos la listas hijas:
"nestedLists" : { "listaComunidades" : { "España" : ["Andalucía", "Galicia", "Aragón"], "Colombia" : ["Atlántico", "Antioquia", "Cundinamarca"] } }
Y por último definimos los combos (select):
"items" : [ { "key": "comboPaises", "type": "select", "label": "Países", "update": "comunidades", "list" : "listaPaises" }, { "key": "comboComunidades", "type": "select", "label": "Comunidades", "nestedList" : "listaComunidades" }]
Observar que en el segundo combo no es necesario el atributo update porque este combo no actualiza a ningún otro combo hijo. Observar también que este segundo
Página 51 Uso de formularios
combo se usa el atributo nestedList en lugar de list, como sí se usa en su combo padre.
Todos los items permiten el atributo "disabled" para que el valor introducido sólo sea de lectura y no permita su edición.
{ "key": "name", "type": "text", "label": "Name", "placeHolder": "insert name", "size": "33", "disabled": true }
Para los items del tipo "text" se permiten el atributo "match" para indicar en la validación del formulario que el valor aquí indicado debe ser igual que el introducido en el item referenciados, tal y como se muestra en el siguiente
Ejemplo: { "key": "email", "type": "text", "label": "Email", "placeHolder": "insert email", "required": true, }, { "key": "emailRepeat", "type": "text", "label": "Repeat Email", "placeHolder": "repeat email", "required": true, "match": email } ##### Tipo Link Este tipo de elemento se podrá usar para incluir enlaces html para llevar al usuario a contenidos externos de la app.
{ "key": "help", "type": "link", "text": "help", "href": "http://www.viafirma.com" }
Item de Sólo Lectura
Repetir valor de campo
Página 52 Uso de formularios
#### Validación de Datos
Los tipos de datos descritos en el punto anterior podrán ser validados de la siguiente forma:
Validación: requerido
Todos los tipos de datos podrán incorporar la validación required . Ejemplo:
{ "key": "name", "type": "text", "label": "Name", "placeHolder": "insert name", "size": "33", "required": true }
##### Validación: email
Supone una validación de un formato "conocido", y usamos una expresión regular para controlar que el texto introducido corresponda a un correo electrónico.
{ "key": "email", "type": "text", "label": "Email", "placeHolder": "insert email", "size": "33", "validation": "email" }
Observar que el tipo de dato es text, pero la validación del tipo email llamará a una expresión regular email.
##### Validación con Expresión Regular
Para cualquier otro tipo de dato que se desee validar se podrá usar, de forma explícita, una expresión regular a la hora de definir el componente.
Para incluir una expresión regular como validación en cualquier componente que queramos montar en nuestro formulario lo podremos hacer tal y como se muestra en el siguiente ejemplo haciendo uso de validationRegex :
{ "key": "age", "type": "text", "label": "Age", "placeHolder": "insert age", "size": "33", "validationRegex": "[0-9]+" } En el código anterior montamos un tipo texto para solicitar la Edad del Usuario, y en la validación usamos una expresión regular para que sólo admita valores del 0 al 9. ##### Validación Longitud de Campos Se podrá valida la longitud máxima y mínima de los campos de formularios del tipo text. Para ello, se usará maxlength y minlength según proceda. Para incluir una expresión regular como validación en cualquier componente que queramos montar en nuestro formulario lo podremos hacer tal y como se muestra en el siguiente ejemplo haciendo uso de validationRegex : Página 53 Uso de formularios
{ "key": "age", "type": "text", "label": "Age", "placeHolder": "insert age", "size": "33", "validationRegex": "[0-9]+" } ````
En el código anterior montamos un tipo texto para solicitar la Edad del Usuario, y en la validación usamos una expresión regular para que sólo admita valores del 0 al 9.
Página 54 Uso de formularios
El sistema de plantillas immplementado en mobile services soporta formato Word (.docx) y formato openOffice (.odt), y está basado en la inclusión de variables de forma cómoda e intuitiva, tal y como se describe a continuación:
Para insertar en nuestro documento una variable sólo será neceario insertar en el lugar deseado el nombre de la variable precedida de "$", por ejemplo $client_surname .
Nombre de cliente: $client_name Apellidos del cliente: $client_surname Importe de la compra: $purchase_amount