Exit form

Pedro
29 de Septiembre del 2005
Hola.
Agradeceria que alguien me echase una mano.

Un form llamado con un CALL FORM, en un momento dado de la ejecución, se ejecuta un EXIT FORM y se sale directamente de la aplicacion cuando debería salirse unicamente del formulario llamado.

Muchas gracias.
Un saludo.

jc3000
29 de Septiembre del 2005
¿ Por un casual no tendrás en el primer form ( el que hace CALL_FORM ) un WHEN-WINDOW-ACTIVATED verdad ?

pedro
29 de Septiembre del 2005
La pantalla se llama desde un menu, pero en ese momento el formulario que hace de tapiz sí tiene un WHEN_WINDOW_ACTIVATED. ¿Por que?

jc3000
29 de Septiembre del 2005
Revisa bien el codigo de ese trigger y dime si ves algo raro

pedro
29 de Septiembre del 2005
No he visto nada raro. Es curioso porque parece que el error ocurre cuando se muestra un mensaje.
¿Qué tendría que haber en when_window_activate?

jc3000
29 de Septiembre del 2005
Ponme el codigo entero de ese trigger

pedro
29 de Septiembre del 2005
Este es el texto del when_windows_activate
DECLARE
L_ret NUMBER;

BEGIN

Set_Window_Property('COGS002W', WINDOW_STATE, MAXIMIZE);
Set_Window_Property('COGS002W', TITLE, :GLOBAL.GE_NOM_CLIENTE);

/* Si elige corporativo distinto cargar datos y habilitar el menú y actualizar variable
que comprueba el nodo desconocido, en otro caso no hacer nada. La variable global
de cod_corporativo esta con '0001' rellenado con ceros. En display 1. Por eso se transforma. */

IF (:COGSCORPO.DXT_COD_CORPORATIVO) = TO_CHAR(TO_NUMBER(:GLOBAL.GE_COD_CORPORATIVO))
THEN
:GLOBAL.GE_NODO_REVISADO:='S';
ELSE
:GLOBAL.GE_NODO_REVISADO:='N';
END IF;


/* Solo se cargan los datos en pantalla principal si se selecciona un corporativo */

IF :GLOBAL.GE_COD_CORPORATIVO<>'0'

THEN
IF (:global.ge_cod_servicio='0002') THEN

COGS_CARGAR_DATOS_P;
COGS_CARGAR_SERVCONTRA_MINI_P;

Set_Window_Property(FORMS_MDI_WINDOW,title,:cogscorpo.dxt_txt_servicio);
Set_Window_Property('COGS002W', TITLE, :GLOBAL.GE_NOM_CLIENTE);
COGS_HAB_GESTION_P;
COGS_HAB_FACTURACION_P;
COGS_HAB_TARIFICACION_P;
:GLOBAL.GE_COD_CORPORATIVO_ANTERIOR:=:GLOBAL.GE_COD_CORPORATIVO; /* El nuevo corporatiov anterior es el actural*/
:GLOBAL.GE_CAMBIOS_DATOS_GENERALES:='N'; /* Cambio a 'N', NO. Si cambia algo en datos generales pasará a 'S'*/
:COGSCORPO.ETIQ_ACCESO_PRIMARIO:=Null;
:COGSCORPO.ETIQ_ACCESO_UNICO:=Null;
:COGSCORPO.DXT_ACCESOS:=Null;
:COGSCORPO.DXT_ACCESOSUNICO:=Null;
:COGSCORPO.ETIQ_DES_CICLOFACT:=Null;

Set_Item_Property('COGSCORPO.ETIQ_AGRUPACION',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.DXT_NOMAGRUPACION',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.DXT_CODAGRUP',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.ETIQ_BUZ_IBERCON',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTBUZONIBER',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',X_POS,23);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',Y_POS,185);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',X_POS,155);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',Y_POS,185);
Set_item_property('COGSCORPO.DES_CICLOFACT',DISPLAYED,property_false);
Set_item_property('COGSCORPO.ETIQ_DES_CICLOFACT',DISPLAYED,property_false);
--GO_ITEM ('COGS_SERVCONTRA.TXT_FOCO');
SHOW_VIEW('COGS_SERVCONTRA');
ELSE
COGS_CARGAR_DATOS_P;
Set_Window_Property(FORMS_MDI_WINDOW,title,:cogscorpo.dxt_txt_servicio);
Set_Window_Property('COGS002W', TITLE, :GLOBAL.GE_NOM_CLIENTE);
COGS_HAB_GESTION_P;
COGS_HAB_FACTURACION_P;
COGS_HAB_TARIFICACION_P;
:GLOBAL.GE_COD_CORPORATIVO_ANTERIOR:=:GLOBAL.GE_COD_CORPORATIVO; /* El nuevo corporatiov anterior es el actural*/
:GLOBAL.GE_CAMBIOS_DATOS_GENERALES:='N'; /* Cambio a 'N', NO. Si cambia algo en datos generales pasará a 'S'*/
:COGSCORPO.ETIQ_ACCESO_PRIMARIO:='Accesos Primarios:';
:COGSCORPO.ETIQ_ACCESO_UNICO:='Accesos Únicos:';
:COGSCORPO.ETIQ_DES_CICLOFACT:='Ciclo de Facturación:';

Set_Item_Property('COGSCORPO.ETIQ_AGRUPACION',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.DXT_NOMAGRUPACION',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.DXT_CODAGRUP',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.ETIQ_BUZ_IBERCON',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTBUZONIBER',DISPLAYED,PROPERTY_TRUE);

Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',X_POS,23);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',Y_POS,201);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',X_POS,155);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',Y_POS,201);
set_item_property('COGSCORPO.DES_CICLOFACT',DISPLAYED,property_true);
Set_item_property('COGSCORPO.ETIQ_DES_CICLOFACT',DISPLAYED,property_true);

--GO_ITEM ('COGSCORPO.TXT_FOCO');
SHOW_VIEW('COGS_CORPO');
END IF;
END IF;


/**********************************************************************************************
Si el corporativo elegido está dado de baja, hay que desactivar algunas opciones de menú.
**********************************************************************************************/

COGS_DESHAB_BAJA_CORP_P;




/*si el Cod_Servicio es CORPORATIVO 2000 o MINICORPORATIVO, se habilitaran unos u otros posibilidades
del menú principal*/

IF :GLOBAL.GE_COD_SERVICIO = '0001' THEN

COGS_HABILITAR_MENU_CORPO_P;

ELSE

IF :GLOBAL.GE_COD_SERVICIO = '0002' THEN

COGS_HAB_MENU_MINICORPO_P;
COGS_DESHAB_MENU_MINICORPO_P;
END IF;

END IF;

COGS_SEGURIDAD_MENU_P;

EXCEPTION
WHEN VALUE_ERROR THEN

NULL;
/* Salta esta exception la primera vez que se entra en
el trigger, porque cod_corporativo='0'
en vez de un number , p.ej '0001'. Dejarlo así, porque
en COGS001E se pone cod_corporativo='0'.
Sirve para saber si es la primera vez que salta el trigger
Porque el tratamiento es distinto en las siguientes.*/
END;



jc3000
29 de Septiembre del 2005
Bien, la verdad es que no he visto nada raro en el codigo que me has puesto, pero por experiencia personal, me dá que ese trigger es el que de alguna manera está cerrando la aplicación.

Haz una cosa, vete poniendo trazas a lo largo del codigo del WHEN-WINDOW-ACTIVATED, por ejemplo :

MESSAGE(1);
MESSAGE(1);

IF (:COGSCORPO.DXT_COD_CORPORATIVO) = TO_CHAR(TO_NUMBER(:GLOBAL.GE_COD_CORPORATIVO))
THEN
:GLOBAL.GE_NODO_REVISADO:=\'S\';
ELSE
:GLOBAL.GE_NODO_REVISADO:=\'N\';
END IF;

MESSAGE(2);
MESSAGE(2);

Y así hasta llegar al final

Con suerte te echará antes de llegar al ultimo mensaje y entonces sabrás que es lo que no rula bien.

Tb create un KEY-EXIT a nivel de form con este codigo :

message(:system.trigger_item);
message(:system.trigger_item);

Esto te dirá el BLOQUE.CAMPO donde estaba posicionado el foco cuando se ha producido el EXIT-FORM

Cuentame lo que veas..........