Acciones y operaciones son dos conceptos fundamentales que hay que conocer para desarrollar con el framework.
Una acción es el proceso que se inicia tras la solicitud de un usuario (un estímulo de la IU). Las acciones están divididas en dos grupos:
Acciones genéricas
Las acciones genéricas resuelven procesos comunes de un mantenimiento (altas, bajas, modificaciones, búsquedas...)
Acciones particulares
Con las acciones particulares se podrán resolver necesidades concretas no resueltas por el framework.
Las operaciones son métodos internos del framework que serán llamados para cumplir lo que cada acción requiere, algunas de estas operaciones son públicas por lo tanto el programador podrá invocarlas desde las acciones particulares. El programador podrá modificar el comportamiento de por defecto de la operación sobreescribiendo con una serie de métodos abstractos (virtuales).
La siguiente imagen ilustra como se produce la comunicación entre las diferentes capas desde que un estímulo es recibido en la interfaz hasta que se resuelve. Podemos ver claramente la diferencia esencial entre acciones y operaciones.
Vamos a explicar un poco más en profundidad cada una de las acciones genéricas. Explicando tanto el objetivo global de la acción, los posibles retornos que produce, las operaciones que los componen y los métodos virtuales de cada una de estas operaciones.
Tabla 2.1. Conceptos comunes a todas las acciones genéricas
Métodos virtuales: Todas las acciones genéricas tienen una serie de métodos que el programador puede sobreescribir completando el comportamiento de la acción. Generalmente hay un método virtual “pre”, antes de la acción (inserción, modificación, borrado), y un método “post”, después de la acción. |
actionForward: Acción de retorno de un método virtual. Puede tomar un valor por defecto asignado por el framework o el programador asignarle uno particular. |
Tabla 2.2.
Valores de retorno de los métodos virtuales: |
|
Iniciar ventana
Esta acción se ejecutará al iniciar la ventana.
La acción contiene la siguiente operación:
initWindow: Genera todas las listas definidas para el panel y las carga en el objeto v_datosPreinsertar. Almacena el valor del módulo actual por si es la primera vez que se entra en una pantalla de dicho módulo. Su comportamiento se puede sobrecargar con el método virtual preIniciarVentana.
preIniciarVentana: Método que permite realizar cualquier acción antes de que se cargue la ventana.
Buscar
Realiza la consulta del panel basándose en los datos que hay en el panel filtro.
La acción se compone de dos operaciones:
buildQuery: Método privado que recoge los datos del panel filtro y los añade al WHERE de la consulta del panel. Su comportamiento se puede sobrecargar con en el método virtual preBuscar.
preBuscar: Método que permite realizar cualquier acción antes de que se realice la consulta.
refreshSearch: Método público que se encarga de realizar la consulta que se ha generado con el método anterior. Es importante saber, también, que este método puede ser llamado en cualquier momento para refrescar los datos de un panel, por ejemplo, después de una acción particular. Su comportamiento se puede sobrecargar con el método virtual postBuscar.
postBuscar: Método que permite modificar los resultados obtenidos en la búsqueda.
En el caso de que este método devuelva un 0 existe la posibilidad de tener un actionForward con la acción gvHidraNoData que mostrará un mensaje avisando que la consulta no ha devuelto datos, si se quiere particularizar este caso se sobrecargará la acción.
Editar
Esta acción genérica se ejecuta cuando estamos con trabajando con tres modos. Como su propio nombre indica realiza la consulta de edición a partir de los datos seleccionados en el panel tabular.
La acción se compone de dos operaciones:
buildQueryEdit: Método privado que recoge los datos del panel tabular con los que formará la WHERE de la consulta que nos devolverá los datos que se podrán editar. Su comportamiento se puede sobrecargar con el método virtual preEditar.
preEditar: Método que permite realizar cualquier acción antes de que se realice la consulta de edición.
refreshEdit: Método público que se encarga de realizar la consulta que se ha generado con el método anterior, así obtener los datos actualizados. Es importante saber, también, que este método puede ser llamado en cualquier momento para refrescar los datos de un panel, por ejemplo, después de una acción particular. Su comportamiento se puede sobrecargar con el método virtual postEditar.
postEditar: Método que permite modificar los resultados obtenidos de la consulta.
En el caso de que no se haya seleccionado ninguna tupla para editar, aparecerá un mensaje por defecto informándonos de la situación. Para poder sobrecargar este comportamiento existe un actionForward con la acción gvHidraNoData con el que podremos hacerlo.
Recargar
Acción genérica que actúa en un patrón maestro-detalle. Se ejecutará cuando se efectúe un cambio de maestro, recargará los detalles correspondientes.
La acción se compone de dos operaciones:
buildQueryDetails: Crea/recupera la instancia del panel detalle activo (puede haber N detalles activos). Llama al método refreshDetail de esa instancia detalle. Su comportamiento se puede sobrecargar con el método virtual preRecargar.
preRecargar: Método que permite realizar cualquier acción antes de efectuar la consulta del detalle.
refreshDetail: Método público que se encarga de realizar la consulta que se ha generado en el método anterior, obtener los datos del detalle a partir del maestro seleccionado. Su comportamiento se puede sobrecargar con el método virtual postRecargar. Es importante tener en cuenta que el programador puede llamar a este método en cualquier momento para refrescar los datos de un detalle, por ejemplo, después de una acción particular.
postRecargar: Método que permite modificar los datos obtenidos de la consulta.
Hay que recordar que los métodos virtuales de esta acción no tienen como retorno un actionForward programado por el desarrollador.
Modificar
Esta acción genérica se ejecuta desde el modo de trabajo edición, cuando, tras haber editado unas tuplas, se pulsa el botón guardar.
La acción se compone de dos operaciones:
updateSelected: Método privado que recoge los datos de pantalla y actualiza en la BD los datos modificados. Su comportamiento se puede sobrecargar con el método virtual preModificar.
preModificar: Método que permite realizar cualquier acción antes de que se lleve a cabo la modificación.
refreshEdit: Método público que se encarga de actualizar los datos visualizados en el modo de trabajo edición. Su comportamiento se puede sobrecargar con el método virtual postModificar.
postModificar: Método que permite utilizar los datos modificados en otras operaciones.
refreshSearch o refreshDetail: Método público que se encarga de actualizar los datos después de la operación de actualización en el panel tabular. Es importante tener en cuenta que esto implica que se lanzará el postBuscar o el postRecargar.
La acción modificar por defecto deja el foco en el modo edición, este comportamiento se puede cambiar. El cambio se realiza en el fichero mappings.php, en la entrada correspondiente a modificar, en la acción gvHidraSuccess, cambiar en la url el panel destino (p.ej. panel=listado)
Borrar
Esta acción genérica se dispara “típicamente” desde el modo de trabajo tabular para eliminar las tuplas seleccionadas.
La acción se compone de dos operaciones:
deleteSelected: Recoge las tuplas seleccionadas del panel y las elimina. Esta operación se puede parametrizar haciendo uso de los métodos virtuales preBorrar y postBorrar.
preBorrar: Método que permite realizar cualquier acción antes de que se lleve a cabo el borrado.
postBorrar: Método que permite modificar los resultados obtenidos después del borrado.
refreshSearch o refreshDetail: Método público que se encarga de actualizar los datos después de la operación de actualización en el panel tabular. Es importante tener en cuenta que esto implica que se lanzará el postBuscar o el postRecargar.
Insertar
Esta acción genérica se dispara desde el modo de trabajo inserción cuando, tras haber introducido los datos se pulsa el botón guardar.
La acción se compone de dos operaciones:
insertData: Recoge los datos de la pantalla y los inserta en la BD. Esta operación se puede parametrizar haciendo uso de los métodos virtuales preInsertar y postInsertar.
preInsertar: Método que permite realizar cualquier acción antes de que se lleve a cabo la inserción.
postInsertar: Método que permite utilizar los datos modificados en otras operaciones.
refreshSearch o refreshDetail: Método público que se encarga de actualizar los datos después de la operación de actualización en el panel tabular. Es importante tener en cuenta que esto implica que se lanzará el postBuscar o el postRecargar.
Nuevo
Esta acción genérica se invoca para preparar la presentación de datos en pantalla antes de una inserción.
La acción se compone de la siguiente operación:
nuevo: Realizará las operaciones de preparación de los datos y visualización previos a la inserción. Esta operación se puede sobreescribir con el método virtual preNuevo.
preNuevo: Método que permite sobrecargar la acción nuevo antes de ser lanzada. Por ejemplo, cuando tenemos algún campo que tiene un valor por defecto o es calculado a partir de los valores de otros campos.