Pacoideas - Volver al formulario padre desde el evento Cerrar

Hola.

imagen

Desde la versión 29 disponemos del Estilo Vista única en el formulario que nos permite abrir solo una instancia del mismo. De forma nativa se comprueba si ya existe una pestaña abierta con el formulario sin origen o con la misma ficha que se va a editar.

Ahora se nos plantea el problema de regresar a la pestaña desde la que un determinado formulario ha sido llamado. Es el caso del formulario principal con la lista de maestros, desde el que ejecutamos el formulario de edición en modo Vista de los registros de la lista.

La siguiente imagen es una captura de la aplicación vERP. Queremos conseguir que el usuario regrese a la pestaña de Artículos cuando se cierra el formulario de edición del Artículo.

image

La idea que os planteo es guardar en el formulario hijo una referencia a la pestaña con el formulario padre. Esta referencia nos servirá para activar la pestaña padre desde el evento cerrar del formulario hijo.

image

El formulario padre se identifica con un Id único _CID_FORMULARIO para localizarlo en la lista de Vistas abiertas.

Rem (Evento PRE_INI del formulario padre)
Rem (Identificamos el formulario con un ID único)
Set ( _CID_FORMULARIO, "FRM_" + timeToString(currentTime(), "HHmmsszzz") )

En el evento PRE_INI del formulario hijo guardamos en _CID_VISTA_ORIGEN el ID del formulario padre.

Rem (Evento PRE_INI del formulario hijo)
Rem ( Guarda el identificativo de la Vista actual para volver a ella cuando cerramos esta Vista )
Set ( _CID_FORMULARIO, "FRM_" + timeToString(currentTime(), "HHmmsszzz") )
Set ( _CID_VISTA_ORIGEN, fun:FUN_VISTA_GUARDAR@proyecto.app() )

La función FUN_VISTA_GUARDAR devuelve el ID del formulario padre _CID_FORMULARIO y lo guarda en la variable _CID_VISTA_ORIGEN del formulario hijo.

// Función FUN_VISTA_GUARDAR
var oVistaActiva = theMainWindow.currentView()
var cIDActiva = ''
if (oVistaActiva) { 
	cIDActiva = oVistaActiva.root().varToString("_CID_FORMULARIO")
}
theRoot.setVar("CID_VISTA_ACTIVA",cIDActiva)

Ahora solo nos falta capturar el cierre del formulario desde el evento PRE-Vista cerrada del Marco AUTOEXEC .

// Se dispara en el Evento PRE-Vista cerrada del Marco AUTOEXEC
// Activa la Vista, si existe, con identificativo _CID_VISTA_ORIGEN
// El formulario que se está cerrando es cIDFormulario
var oVista = theMainWindow.currentView()
// Las Vistas genéricas (como el Visor HTML) no son Vistas de datos
if (oVista.type() > 0) {
	var cIDFormulario = oVista.root().varToString("_CID_FORMULARIO")
	// El formulario que queremos activar es cIDActivar
	var cIDActivar = theMainWindow.currentView().root().varToString("_CID_VISTA_ORIGEN")
	var numVistas = theMainWindow.viewsCount();
	if (cIDActivar) {
		theMainWindow.showMessageStatusBar("Cerrando - " + cIDFormulario,1000)
		for (numVista = 0; numVista < numVistas; numVista++){
			oVista = theMainWindow.getViewAt(numVista);
			// Comprobamos si el formulario es el que queremos activar
			// En la variable local _CID_FORMULARIO se guarda el ID del formulario
			if (oVista.root().varToString("_CID_FORMULARIO") == cIDActivar){
				theMainWindow.setCurrentView(oVista)
				break
			};
		};
	}
}

Usamos en este caso un poco de código javascript porque necesitamos el objeto theMainWindow para recorrer la lista de Vistas activas. Espero os sea de utilidad.

Saludos
Paco Satué

2 Me gusta

Se agradecen los aportes Paco.
¿Hay alguna web o blog donde estes recopilando estas ideas aparte de este foro?

Un Saludo

Hola matcas.

A los suscriptores de Ejercicios con Velneo les he enviado la Extensión "Cosas de Paco Satué" para acceder desde vDevelop al listado completo de mis Aplicaciones, Artículos y aportaciones interesantes al Foro.

Para cualquier duda sobre la Extensión poneros en contacto conmigo a través del correo electrónico de los Ejercicios con Velneo.

Saludos
Paco Satué

Gracias por construir esta idea tan útil. Me la apunto por si alguien me lo pide con fervor.
Sería ideal que el sistema hiciera este tipo de cosas al estilo “facilitar la vida” tanto a la usuaria como a la programadora porque me parece básico para la mayoría de casos.
Opcional: activar en sistema la casilla “Volver al formulario padre”, funcionante en caso de existir.

Hola Carlosan.

Que hubiera un Estilo de formulario “Volver al formulario padre”, sería desde luego una funcionalidad tan útil como la de Vista única.

No soy muy partidario de que Velneo sea tan asistido porque perdemos el control de muchas funcionalidades nativas, pero este tipo de comportamiento “opcional” usando el Estilo de formulario, sí que es realmente LifeIsSoft.

Saludos
Paco Satué

1 me gusta

Gracias por el aporte funciona perfecto. Me sirvió para solucionar otra necesidad que tenia.
Como uso esta función en los formularios getCurrentObjectId() para otras funcionalidades que uso la use en lugar de
Set ( CID_FORMULARIO, "FRM" + timeToString(currentTime(), “HHmmsszzz”) ).
me quedo así
Set ( OBJ_ID_REF, getCurrentObjectId() ) aprovechando el estilo de vista única.