manuales_desarrollo

Manuales de desarrollo de YeboYebo


Project maintained by yeboyebo Hosted on GitHub Pages — Theme by mattgraham

Pineboo Server desde Eneboo / Delegate commit

Objetivo

La opción de Delegate Commit es un paso más en el objetivo de pasar la funcionalidad de negocio del ERP (todo lo que modifica la base de datos) a la parte servidor de Pineboo a través de su API.

La idea final es que la API de Pineboo Server sirva las peticiones de clientes Eneboo, de clientes Quimera, o de cualquier otro sistema que queramos conectar.

En qué consiste

Delegate commit es una opción de ejecución de Eneboo que modifica el comportamiento del motor cuando este maneja un cursor automático.

Llamamos cursor automático a los cursores que el motor usa automáticamente cuando conectamos los slots insertRecord, editRecord o deleteRecord a señales que emite un componente FLTableDB (tablas de Eneboo).

Cuando delegate commit está activo, en lugar de hacerse un commitBuffer normal cuando creamos, editamos o borramos un registro de un cursor automático, el motor de Eneboo hace una llamada a la función delegateCommit del script principal del módulo al que pertenece la tabla del cursor (flfacturac, flfactalma, etc)

El caso más básico de esta función es este:

function oficial_delegateCommit(cursor)
{
	return formHTTP.iface.saveCursor(cursor, accion)
}

Lo que formHTTP.iface.saveCursor(cursor, accion) hace es llamar a Pineboo Server y pedirle que guarde el cursor. Una vez llamado, y si la llamada es correcta, el cliente Eneboo hace los refrescos necesarios para mostrar los datos actualizados.

Activación

Activamos delegateCommit incluyendo una clave delegateCommit en el fichero de configuración $HOME/.qt/eneboorc

[application]
...
delegateCommit=true

Esto activa delegate commit para todos los cursores excepto para los de tablas de sistema (flfiles, flmodules, etc.)

Casos especiales

Hay un caso especial en el que una llamada por defecto de delegate commit no funcionará correctamente, y es el caso en el que tenemos un formulario de edición con una subtabla, y las operaciones que hagamos con los elementos de la subtabla afectan a los datos del formulario.

Típicamente, es el caso de un formulario de pedido con la subtabla de líneas. Los cambios en las líneas afectan a los totales del pedido por lo que no basta con hacer un delegate commit de la línea de pedido. En este caso deberíamos llamar a la función add_linea / edit_linea / delete_linea de la API del pedido.

Para ello, modificamos oficial_delegateCommit para que, en el caso de que la tabla a guardar sea la de líneas de pedido, llamemos a la función de API correcta y no a la de commit buffer por defecto.

NOTA: ver implementación de este caso en flfacturac

Evolución

A medida que vayamos enriqueciendo las funciones de API, debemos eliminar paulatinamente las llamadas a formHTTP.iface.saveCursor para irlas sustituyendo por llamadas a las funciones de API específicas para cada entidad.

Más