Cerrar Formulario


([N1] vlinares) #1

Buenos días…

Estoy intentado crear un proceso en js que al intentar abrir un formulario desde una rejilla, si existe otro abierto cierre el anterior…

¿Como puedo programar en js que si se localiza un objeto lo cierre?.

algo así como formulario.close

Estaba intentado con esta secuencia de comandos, pero todavía no controlo el js,

/////////////////////////////////////////////////////////////////
// Busca un formulario si esta activo y lo cierra antes de abrir el nuevo
//
//
//Variables locales:
// -OBJ_IDREF: IDRef del Objeto.
// -OBJ_TIPO: Tipo del Objeto

var nNunVistas = theMainWindow.viewsCount();
var vista = null;
var szFormularioIdRef ="";
var bExisteTab = false;

// Se recorren todas las vistas centrales en busca del formulario
for ( nIndice 0 =; nIndice < nNumVistas; nIndice++)
{
vista = theMainWindow.getViewAt ( nIndice );
if ( vista )
{
formulario = vista.centralWidget().objectInfo();
if ( formulario.type() == theRoot.varToString( “OBJ_TIPO”) )
{
if ( formulario.idRef() == theRoot.varToString( “OBJ_IDREF” ) )
{
bExisteTab = true;
theRoot.close (formulario.idRef);
break;
}
}
}
}
// Se devuelve el voleano que indica que exitia la pestaña y se ha cerrado
theRoot.setVar( “ACTIVADO”, bExisteTab);

Gracias por vuestra ayuda.

Saludos
Vicente


([N3] pacosatu) #2

Hola Vicente.

¿De dónde te has sacado la función theRoot.close(formulario.idRef) ?

Con formulario.closeForm() es suficiente.

Saludos
Paco Satué


([N1] vlinares) #3

Buenos días.
Te explico, como no tengo ni idea de js, voy mirando el manual y probando cosas… osea “dando palos de ciego”.
La primera prueba que hice fue escribir formulario. pero esta clase no me daba la función que tu me indicas. De hecho lo acabo de probar y no funciona.
Estuve haciendo pruebas y miran y leyendo… y al final lo que funciona es:

          <strong>theMainWindow.closeViewAt(nIndice)</strong>

Paso el manejador evento que disparo (en imagen) la función CierraVentana.js que me funciona.

Estoy terminado de pulirlo, quien lo quiera utilizar, que lo considere como una “beta”.

/////////////////////////////////////////////////////////////////
// Busca un formulario si esta activo y lo cierra antes de abrir el nuevo
//
//
//Variables locales:
// -OBJ_IDREF: IDRef del Objeto.
// -OBJ_TIPO: Tipo del Objeto

var nNumVistas = theMainWindow.viewsCount();
var vista = null;
var szFormularioIdRef = “”;
var bExisteTab = false;

// Se recorren todas las vistas centrales en busca del formulario
for ( nIndice = 0; nIndice < nNumVistas; nIndice++ )
{
vista = theMainWindow.getViewAt( nIndice );
if ( vista )
{
formulario = vista.centralWidget().objectInfo();
if ( formulario.type() == theRoot.varToString( “OBJ_TIPO” ) )
{
if ( formulario.idRef() == theRoot.varToString( “OBJ_IDREF” ) )
{

            bExisteTab = true;
			theMainWindow.closeViewAt(nIndice);
			//formulario.closeForm;
            break;
        }   
    }
}

}

// Se devuelve el booleano que indica si existía la pestaña y se ha activado o no
theRoot.setVar( “ACTIVADO”, bExisteTab);

Muchas gracias por todo.

Saludos
Vicente

P.S.- Si alguien es tan amable de organizar un cursito de js que me avise.



([N1] vlinares) #4

Buenos días de nuevo…

Me auto corrijo…

En el Manejador de Eventos, la última linea debe ser:

   <strong>Interfaz: Ejecutar acción (EXP_MANT)</strong>

En lugar de:
If (!ACTIVADA…)

Saludos

Vicente


([N3] pacosatu) #5

Hola Vicente.

Disculpa, había pensado que la variable formulario era un objeto VFormDataView y en realidad es una Vista VMdiView.
En este caso es correcto usar theMainWindow.closeViewAt(nIndice)

Saludos
Paco Satué