esofitec. CoreDocs

esofitec. CoreDocs

Instalación y soporte

Arquitectura

La app es un cliente directo de la Data API de FileMaker: no hay ningún servidor intermedio de Esofitec entre el móvil y la solución de la empresa. Todo lo que hace la app son lecturas y escrituras sobre presentaciones API_* de la solución, más llamadas a guiones de FileMaker para lo que necesita lógica de servidor: validar al usuario, numerar documentos, enviar albaranes a a3ERP o generar PDF. Este artículo describe esa conexión, cómo se mantiene la sesión y qué presentaciones y guiones usa la app.

Conexión con FileMaker#

La base de datos se forma con el código de empresa que el usuario escribe al iniciar sesión, o el que trae la clave de activación: PRO-01-<código de empresa>. Con ese mismo código la app elige el servidor de FileMaker:

Código de empresa Servidor
00000 Servidor de desarrollo
Los dos casos fijados en el código de la app: la cuenta de revisión de App Store y una empresa concreta Servidor de preproducción
Cualquier otro Servidor de producción

La elección se hace igual en el inicio de sesión manual, en el automático al abrir la app, en la recuperación de contraseña y en la activación. Un código de empresa nuevo no necesita ningún cambio en la app: basta con que su base exista en el servidor de producción.

Sesión de la Data API#

La app se identifica ante la Data API con una cuenta de aplicación de FileMaker, la que viene dentro de la clave de activación. Con ella obtiene un token de sesión, lo guarda en el almacenamiento seguro del dispositivo y lo reutiliza:

  • Antes de cada llamada comprueba que el token sigue siendo válido. Si FileMaker responde que no (HTTP 401), cierra esa sesión y pide un token nuevo.
  • Cualquier otra respuesta a esa comprobación no cierra la sesión, y tampoco un fallo de la red al hacerla. Un error 5xx o una conexión que se corta significan que el servidor o la red tienen un problema, no que la sesión haya caducado, y abrir sesiones nuevas en ese momento solo empeoraría las cosas. La app avisa, por ejemplo con «El servidor no está disponible en este momento. Inténtalo más tarde.», y esa llamada se trata como si no hubiera conexión: se lee de la copia local y los cambios se encolan. Con mala cobertura es lo normal.
  • Si FileMaker rechaza la petición de un token nuevo con un error 500, la app avisa de que no ha podido validar la sesión y pide cerrar sesión y volver a entrar. Lo mismo si, al enviar la cola de cambios pendientes, FileMaker responde con el error 952, que es el de token no válido.
  • Al cerrar sesión desde la app, se cierra también la sesión de la Data API. Al abrir la app no se cierra nada: si el token guardado sigue siendo válido, se reutiliza.

Inicio de sesión del usuario#

La cuenta de aplicación solo da acceso a la Data API. Quien valida a la persona es el guion AuthApp, en la presentación API_PERSONAS, que recibe el usuario y la contraseña del formulario junto con la versión de la app, la IP pública y la IP local del dispositivo y, cuando la app ya lo conoce, el nombre de la empresa. Si las credenciales son buenas, devuelve los identificadores de la empresa, la persona, el usuario y el perfil, el NIF y la marca de aceptación del contrato.

Después de un inicio de sesión correcto, la app descarga la configuración (empresa, parámetros globales, perfil y secciones de las fichas) y los catálogos, y abre el calendario. Lo que pasa cuando algo falla está en Resolución de problemas.

Tiempos de espera y reintentos#

El tiempo de espera de cada petición es el parámetro global TIMEOUT_RED_APP, en segundos. Si está vacío vale 30, y la app lo limita a un mínimo de 5 y un máximo de 120. Como mucho hay seis peticiones en curso a la vez; el resto espera turno.

Las llamadas a guiones, las de la sesión y las lecturas directas de registros tienen además un reintento: el primer intento espera como mucho 8 segundos y, si falla o no ha respondido en ese tiempo, la app repite la llamada una vez forzando IPv4, ya con el tiempo de espera completo. Se añadió para las redes que anuncian IPv6 pero no lo encaminan bien, donde la conexión se quedaba colgada. Las búsquedas, las altas, los cambios y los borrados de registros y las subidas de ficheros no tienen ese reintento.

Un guion lento puede ejecutarse dos veces

El reintento no cancela la primera llamada. Si un guion tarda más de 8 segundos en responder, FileMaker lo ejecuta dos veces: la primera, que sigue en curso, y la del reintento. El envío de un albarán a a3ERP tarda entre 6 y 10 segundos en el servidor de desarrollo, así que puede llegar a repetirse. Además, la respuesta del reintento puede no ser la del guion. Si en un cliente aparecen documentos duplicados en a3ERP o planificaciones repetidas, esta es la primera causa que hay que descartar.

Los parámetros de los guiones viajan codificados, así que cualquier carácter de un texto libre, como #, & o +, llega tal cual a FileMaker.

Presentaciones que usa la app#

La app solo trabaja con presentaciones cuyo nombre empieza por API_. Si se cambia el nombre de una, se quita un campo de ella o se cambia su tipo, la app deja de leerlo o de poder escribirlo, normalmente sin ningún aviso al usuario.

Ámbito Presentaciones Uso
Agenda y trabajo de campo API_TAREAS, API_PLANIFICACIONES_TAREA, API_PARTES, API_SERVICIOS_PARTE, API_MATERIALES_PARTE, API_GASTOS_PARTE, API_TAREAS_PERSONAL, API_TAREAS_RECURSOS, API_TAREAS_ACTIVOS, API_TAREAS_MANTENIMIENTOS_ACTIVOS, API_MANTENIMIENTOS Lectura y escritura
Checklist, campos adicionales y documentos API_CHECKLIST_PARTES, API_DATOS_CAMPOS_ADICIONALES, API_DOCUMENTACION Lectura y escritura
Facturación API_CONCEPTOS_FACTURABLES, API_PRESUPUESTOS_ALBARANES, API_DETALLES_PRESUPUESTO Lectura y escritura
Fichas API_CLIENTES, API_DIRECCIONES, API_ARTICULOS, API_PERSONAS, API_ACTIVOS Lectura y escritura
Configuración API_EMPRESAS, API_SYS, API_SYS_CONFIGURACION_MOVIL, API_PERFILES, API_USUARIOS Lectura. La app solo escribe en API_SYS, las opciones del diálogo de impresión, y en API_USUARIOS, la aceptación del contrato
Registro de errores API_LOG_ERRORES Alta. Ver Datos que registra la app
Ficheros API_DOCUMENTACION_IMAGEN (campo contenedor DOCUMENTO) y API_GASTOS_PARTE_RECIBO (campo RECIBO) Subida de firmas, fotos, documentos y recibos
Catálogos API_ACTIVIDADES, API_ALMACENES, API_CAMPOS_ADICIONALES, API_CARGOS, API_CATEGORIAS_PERSONAL, API_CHECKLIST_DEFINICION, API_CODIGOS_BARRAS, API_CONTACTOS, API_DEPARTAMENTOS, API_DOCUMENTOS_PAGO, API_ESTADOS, API_ETIQUETAS, API_FORMAS_PAGO, API_HORARIOS, API_INCIDENCIAS, API_PAISES, API_PERFILES_TIPO_HORA, API_PERIODOS_RENOVACION, API_PRIORIDADES, API_PROVINCIAS, API_PROYECTOS, API_PROYECTOS_PERSONAL, API_PROYECTOS_RECURSOS, API_RUTAS, API_SERIES, API_TARIFAS, API_TIPOS_ACTIVO, API_TIPOS_HORA, API_TIPOS_IMPACTO, API_TIPOS_INCIDENCIA, API_TIPOS_IVA, API_TIPOS_PARTE, API_TIPOS_PROYECTO, API_TIPOS_TAREA, API_TIPOS_TRABAJO, API_ZONAS Solo lectura

Guiones que llama la app#

Guion Presentación Para qué
AuthApp API_PERSONAS Validar al usuario al iniciar sesión
resetpwd TABLA_USUARIOS Recuperar la contraseña
API_ObtenerValoresDefecto API_SYS Tipo de hora y tipo de trabajo por defecto de los servicios nuevos
API_GuardarTarea API_TAREAS y TAREAS Numerar una tarea nueva
API_NuevaPlanificacion API_PLANIFICACIONES_TAREA Crear una planificación. Sin conexión se encola
API_GuardarParte API_PARTES y CONTADOR_PARTES Numerar un parte nuevo
API_NuevoServicioMarcaje API_SERVICIOS_PARTE Crear el servicio de un marcaje. Sin conexión se encola
API_GuardarServicioParte API_SERVICIOS_PARTE Recalcular los conceptos facturables de los servicios del parte
API_GuardarEntidadParte API_CONCEPTOS_FACTURABLES y API_MATERIALES_PARTE Añadir un concepto o un material
API_sumatoriaHorasParte FICHA_PARTE Sumar las horas de un parte
API_GuardarDocumento API_DOCUMENTACION Crear un documento, una foto o una firma
API_ObtenerDatosDocumentacion API_DOCUMENTACION Leer las imágenes y firmas de un registro
API_ImprimirDocumento API_DOCUMENTACION y API_PARTES Generar el PDF de un documento
API_ObtenerTotales API_PARTES y API_PRESUPUESTOS_ALBARANES Totales para imprimir el ticket
API_CreaRegistrosDatosCamposAdicionales API_DATOS_CAMPOS_ADICIONALES Crear los campos adicionales o de checklist de un registro
API_CalculaCamposCalculo API_DATOS_CAMPOS_ADICIONALES Recalcular los campos de cálculo
API_GuardarPresupuesto API_PRESUPUESTOS_ALBARANES Numerar un presupuesto o un albarán
API_guardarDocumentoPresupuestoAlbaran API_PRESUPUESTOS_ALBARANES Enviar un presupuesto o un albarán a a3ERP o a3FACTURA
numeroAlbaranesPorLineaDesdePresupuestos API_PRESUPUESTOS_ALBARANES Enlazar las líneas de una certificación con sus albaranes
API_getPriceFromA3ERP API_CONCEPTOS_FACTURABLES y API_PRESUPUESTOS_ALBARANES Pedir a a3ERP el precio de un artículo
API_AlbaranTraspasoMaterial API_PARTES Traspasar el stock de un material del parte
API_GuardarFicha API_CLIENTES, API_PERSONAS y API_ARTICULOS Numerar una ficha nueva o enviarla al ERP
API_ActualizarCliente API_CLIENTES Actualizar el cliente desde un parte o una tarea
API_BuscarRegistro API_CLIENTES y API_MANTENIMIENTOS Buscar un cliente o una dirección, o un mantenimiento

Los detalles de la numeración y del envío al ERP están en Integración con a3ERP.