esofitec. CoreDocs

esofitec. CoreDocs

Trabajo sin conexión

Sincronización y caché local

Un técnico de campo pierde la cobertura a menudo: en un sótano, en una nave, en una carretera. Para que eso no le pare, la app guarda en el dispositivo una copia de los datos con los que trabaja y una cola de los cambios que hace sin conexión, y envía esa cola a FileMaker en cuanto vuelve la red. Este artículo describe qué se guarda, cuándo y cómo se sincroniza, qué no se puede hacer sin conexión y los límites que conviene conocer para dar soporte.

La regla que lo resume: lo que un técnico ha hecho sin conexión no existe en FileMaker hasta que su dispositivo sincroniza. Si un cliente echa en falta un parte o una firma en s360 escritorio, lo primero es preguntar si el técnico tiene cambios pendientes.

Qué guarda el dispositivo#

Qué Para qué
Copia de catálogos y fichas Clientes, direcciones, artículos, personas, proyectos y los catálogos auxiliares. Permiten trabajar sin conexión con datos maestros
Copia de tareas, planificaciones y partes De los meses del calendario que se han visitado y de los registros que se han abierto. Con conexión, la app los pide siempre al servidor y actualiza la copia
Cola de cambios pendientes Las altas, los cambios y los borrados hechos sin conexión, en el orden en que se hicieron
Ficheros pendientes Las firmas, fotos, documentos y recibos que todavía no se han podido subir
Cola de errores Los errores pendientes de enviar a LOG_ERRORES_APP, como mucho 200. Ver Datos que registra la app
Configuración y credenciales La configuración de la activación, el código de empresa, el usuario y, si se marcó «Recordar contraseña», la contraseña, en el almacenamiento seguro del sistema
Identidad para el acceso sin conexión Los datos del último inicio de sesión con conexión. Ver Inicio de sesión sin conexión

Todo esto vive en los datos de la app. Si se borran desde los ajustes del sistema o se desinstala la app, los cambios pendientes se pierden sin que se pueda recuperar nada, y la app no avisa de que los hay antes de cerrar sesión.

Cuando el espacio libre del dispositivo baja de 500 MB, la app avisa de que quizá no pueda guardar todo lo necesario para trabajar sin conexión, y por debajo de 150 MB, con un aviso más serio.

Cuándo se sincroniza#

La app intenta sincronizar:

  • cuando el dispositivo recupera cualquier tipo de red;
  • cada 5 minutos, mientras la app está abierta;
  • al volver a la app desde otra aplicación;
  • cuando el usuario pulsa «Sincronizar ahora» en el indicador de conexión.

Solo hace algo si hay lecturas que fallaron o cambios pendientes. Primero repite las lecturas que fallaron y después envía la cola, de una en una y en el orden en que se hicieron. Con la app cerrada o en segundo plano no sincroniza nunca: un técnico que guarda el móvil con cambios pendientes no los envía hasta que vuelve a abrir la app con cobertura.

La cola de cambios pendientes#

Mientras no hay conexión, la cola se mantiene compacta:

  • Varios cambios del mismo campo se quedan en el último.
  • Borrar un registro anula los cambios pendientes de ese registro.
  • Los cambios en un registro creado sin conexión se incorporan a su alta, que se envía ya con los valores finales. Vale para partes, tareas, servicios del marcaje, materiales, gastos, clientes, presupuestos y artículos. En un servicio añadido a mano desde la sección Servicios sin conexión, en cambio, lo que se cambie antes de sincronizar no llega a FileMaker.

Al enviarla, cada operación acaba de una de estas formas:

Resultado Qué hace la app
FileMaker la acepta La quita de la cola
FileMaker responde con el error 201, «Field cannot be modified» La descarta: el campo no se puede escribir por la Data API, y reintentarlo no lo arreglaría. Queda en el registro de errores
FileMaker responde con el error 952, de token no válido La mantiene y avisa de que hay que cerrar sesión y volver a entrar
FileMaker la rechaza por cualquier otro motivo, o no llega a responder con un código La mantiene y la vuelve a intentar en cada sincronización
Se pierde la conexión o se agota el tiempo La mantiene, no la cuenta como rechazo y deja el resto de la cola para la siguiente sincronización

Cuando la cola envía servicios de un parte, al terminar la pasada la app lanza una vez por parte el guion API_GuardarServicioParte, que regenera los conceptos facturables a partir de los servicios, como ocurre al salir del parte con conexión. Si la pasada se corta por falta de red, lo reintenta en la siguiente. Si la app se cierra antes, ese recálculo no se hace hasta la próxima vez que se salga del parte con conexión.

Un cambio rechazado se reintenta para siempre

No hay límite de reintentos ni forma de descartar un cambio desde la app. Si FileMaker rechaza un cambio de manera permanente, por ejemplo porque el registro se ha borrado en escritorio o porque no pasa una validación, el indicador seguirá mostrando ese cambio pendiente indefinidamente, y los intentos quedan en LOG_ERRORES_APP, como mucho una vez cada 10 minutos. El mensaje de la entrada dice «Rechazado por el servidor (code N)», con el código de error de FileMaker, y su origen indica la entidad y el campo.

No hay control de conflictos. Si un registro se cambia en escritorio mientras el técnico lo cambia sin conexión, al sincronizar gana el del técnico: campo a campo en las ediciones de un campo, y el registro entero cuando la app envía el registro completo.

Altas sin conexión#

Sin conexión se pueden crear partes, tareas, planificaciones, servicios, materiales, gastos, conceptos, presupuestos y albaranes, certificaciones, clientes, artículos, documentos, fotos y firmas. Mientras no se envían, llevan un identificador provisional, que empieza por local-. Al sincronizar, FileMaker les da su identificador real y la app sustituye el provisional también en los registros que dependen de ellos, que esperan en la cola a que su padre exista.

Lo que necesita un número o un código, como un parte, una tarea, un presupuesto o un albarán, no lo tiene hasta que se sincroniza, porque lo asignan los guiones de FileMaker. Al salir de un parte sin conexión, la numeración y el recálculo de sus servicios no se lanzan: los hace la cola al sincronizar el parte y sus servicios.

El marcaje sin conexión#

El marcaje funciona igual con conexión que sin ella. Sin conexión:

  • Iniciar un servicio lo crea en la cola, con la hora en que se pulsa, la posición y el tipo de hora y de trabajo por defecto, y el contador arranca. El usuario ve «Servicio iniciado sin conexión. Se enviará al servidor cuando haya conexión.». El tipo de hora y de trabajo por defecto son los del último inicio de sesión con conexión de esa empresa en el dispositivo.
  • La foto, si el perfil la exige, se guarda en el dispositivo con «Foto guardada. Se enviará al servidor cuando haya conexión.» y el marcaje sigue.
  • Parar el servicio con su alta todavía en la cola guarda la hora de fin, los tiempos y la posición de salida en esa misma alta, así que el servicio llega a FileMaker ya cerrado. Si el alta ya se había enviado, la parada se envía como un cambio normal, o se encola si sigue sin conexión.
  • Si se cierra la app con un servicio en marcha, al volver a abrirla el marcaje lo recupera de la copia del dispositivo y se puede parar.
  • La firma exigida para iniciar o para salir del parte cuenta como hecha si hay una firma de ese parte pendiente de enviar. Ver Firma y foto.

Lo que no se puede hacer sin conexión#

Acción Qué pasa sin conexión
Previsualizar o imprimir el PDF de un documento «No se puede previsualizar el documento sin conexión.» Tampoco se genera el PDF al firmar un parte desde la sección de partes de una tarea: la firma se guarda y se envía al sincronizar
Adjuntar el recibo a un gasto creado sin conexión «Este gasto todavía no se ha enviado al servidor. Adjunta el recibo cuando se haya sincronizado.»
Certificar un presupuesto creado sin conexión No se permite hasta que se sincroniza
Traspasar el stock de un material No se hace, ni siquiera al sincronizar. Ver Traspaso de stock
Consultar datos que no se han cargado antes Solo está disponible lo que hay en la copia del dispositivo

Cuando un fichero no se puede subir aunque su registro sí exista, como la imagen de una firma, una foto o un recibo, la app guarda una copia del fichero y lo reintenta al sincronizar. El usuario ve, por ejemplo, «Firma guardada. La imagen no se ha podido enviar y se reintentará al sincronizar.».

Límites que conviene conocer#

  • Borrar un registro creado sin conexión no cancela su alta, salvo en clientes y artículos. El registro desaparece de la pantalla, pero se crea igualmente al sincronizar y vuelve a aparecer.
  • Los cambios pendientes no guardan la empresa. Si alguien inicia sesión en otra empresa desde el mismo dispositivo con cambios pendientes, la app los envía a la base de la empresa nueva, donde pueden modificar o borrar un registro que no tiene nada que ver. Antes de cambiar de empresa en un dispositivo hay que sincronizar y comprobar que no queda nada pendiente.
  • Un alta cuyo envío agota el tiempo de espera puede crearse dos veces. Si FileMaker la crea pero la respuesta no llega a tiempo, la app no lo sabe y la deja en la cola, y al sincronizar la vuelve a crear.
  • El indicador solo dice cuántos cambios hay pendientes, no cuáles son ni por qué fallan. Eso hay que buscarlo en LOG_ERRORES_APP.

Catálogos y marcas de sincronización#

Los catálogos no se descargan en cada inicio de sesión. Cada uno tiene en EMPRESAS una marca de fecha, SYNC_FECHA_<CATÁLOGO>_APP (por ejemplo SYNC_FECHA_CLIENTES_APP o SYNC_FECHA_ARTICULOS_APP), y la app solo vuelve a descargar el catálogo si la marca es posterior a la última descarga. Cuando la descarga, lo trae completo.

Si la marca de un catálogo está vacía, la app lo descarga la primera vez y ya no lo vuelve a descargar. Si un cambio en un catálogo no llega a los móviles, lo primero es comprobar que su marca se ha actualizado. El perfil y las secciones de las fichas son la excepción: se descargan en cada inicio de sesión con conexión, tengan la marca que tengan.

Inicio de sesión sin conexión#

Si al iniciar sesión no hay conexión, el servidor no responde a tiempo o la conexión se corta a medias, la app intenta entrar con los datos del último inicio de sesión con conexión. Lo consigue si se cumple todo esto:

  • en ese dispositivo hubo un inicio de sesión con conexión de la misma persona, con perfil y con el contrato aceptado;
  • el código de empresa y el usuario coinciden con los de ese inicio;
  • la contraseña coincide con la de ese inicio. La app no guarda la contraseña para esto, solo un resumen que no se puede revertir;
  • no han pasado más horas de las que fija TIEMPO_DESCONEXION_APP, 48 si está vacío, desde ese inicio de sesión;
  • en la última sincronización, el usuario no aparecía como no vigente.

Si no se cumple, el usuario ve «No hay conexión a internet. Conéctate para iniciar sesión.». El mensaje es el mismo cuando la contraseña no coincide.

Conviene tener presentes cuatro cosas:

  • El plazo solo se comprueba al entrar. Una sesión ya abierta sigue funcionando aunque pasen más horas, hasta que el usuario sale.
  • Tras actualizar a la versión 3.8.5, hace falta un inicio de sesión con conexión antes de poder entrar sin conexión. Las identidades guardadas por versiones anteriores no tienen el resumen de la contraseña y no valen.
  • Una baja no siempre se nota sin conexión. Si el usuario se ha desactivado y el dispositivo llegó a sincronizarlo, el acceso sin conexión se bloquea. Una persona dada de baja, en cambio, no lo bloquea, porque la app solo descarga las personas vigentes y la persona simplemente deja de estar en la copia.
  • Cerrar sesión borra la identidad, ya sea con el botón «Cerrar sesión» o confirmando la salida con el botón atrás de Android. Después de cerrar sesión, hace falta conexión para volver a entrar.

El indicador de conexión#

Con la sesión iniciada, la app muestra un icono flotante con el estado de la sincronización:

Aspecto Significado
Rojo, con la nube tachada El dispositivo no tiene red o hay lecturas que fallaron
Naranja Hay cambios pendientes de enviar
Número sobre el icono Cuántos cambios hay pendientes

Al tocarlo se ve el detalle, por ejemplo «Tienes 3 cambios guardados en el dispositivo, pendientes de sincronizar.», y el botón «Sincronizar ahora». El resultado sale en un aviso:

Mensaje Significado
«Sincronización completada.» Se ha enviado todo
«No se pudo completar: sigue sin haber conexión. Se volverá a intentar más adelante.» Sigue sin red
«N cambios no se pudieron enviar: el servidor los ha rechazado. Se mantienen pendientes.» FileMaker rechaza esos cambios. Ver la cola de cambios pendientes
«No se ha podido completar la sincronización. Inténtalo de nuevo más tarde.» Otro fallo

La sincronización automática no muestra ningún aviso, salvo el de sesión no válida.