Oracle - Cambiar mensaje sistema por uno personalizado

 
Vista:

Cambiar mensaje sistema por uno personalizado

Publicado por Javier Ferri (2 intervenciones) el 19/02/2009 16:00:42
Hola, buenas.

Tengo un listado en Reports 6i lanzado desde una aplicación en Forms 6i bajo Oracle 9i, el cual hago una serie de validaciones en el trigger After Parameter Form.

Una aclaración inicial, todo esto ocurre cuando una vez tengo el listado en pantalla, en el visor, le doy a Fichero-> Generar en Fichero -> Texto. Para ello las valicaciones las ejecuto únicamente cuando

if :desformat = 'delimited' then --Validaciones

La idea es que si esas validaciones no salen como yo espero (por ejemplo, hago un select count(*) de la tabla y no me devuelve ningún registro), poder cancelar la ejecución del listado mostrando algún mensaje y evitar que llegue a ejecutarse.

He estado probando varias cosas:

En el After Parameter Form hacer un Return (false); en lugar del Return (true); que hay por defecto: con esto me sale el mensaje de error REP-0771: El disparador 'Despues de la pantalla' ha fallado. y el listado se cancela, no se termina de ejecutar.

Esto me serviría, pero lo que me gustaría sería cambiar este mensaje por un personalizado, supongo que con un exception when... se podría hacer, pero no he encontrado el lugar donde ponerlo, si lo pongo en el mismo After Parameter Form no llega, no hace caso, sigue saliendo lo mismo.

Otra opción que he probado es en vez de poner el return (false);, poner raise srw.program_abort; sin poner el exceptption when... pero entonces me sale el mensaje: REP-1419: 'afterpform': programa PL/SQL abortado, y el listado no se ejecuta.

Estamos en las mismas, ¿se puede cambiar ese mensaje? Bien, pues poniendo un exception when srw.program_abort null; o bien un when others null; se puede capturar, pero entonces aparece el mensaje: REP-1410: 'afterpform': Se ha producido un error fatal de PL/SQL. ORA-06503: PL/SQL: La función no ha devuelto ningún valor.

Por lo que en ese exception pongo un return(true); ya no sale, pero el listado se ejecuta, y si pongo un return(false); me sale el REP-0771 anteriormente citado.

Lo último que he probado es a poner:

:destype := '';
:desformat := '';
:desname := '';

pero entonces aparece otro mensaje: REP-1803: No se puede abrir el fichero de destino ''. cancelandose tambien la ejecución pero con el dichoso mensaje...

Decir que este último método funciona bien cuando desde Forms pido el listado directamente en texto, puesto que el mensaje sigue saliendo pero no en una ventana emergente como hasta ahora, sino en el log del Report Background Engine, por lo que esto me serviría ya que sería transparente al usuario.

Por lo tanto, hay alguna forma de cancelar la ejecución de un listado sin que aparezca ningún mensaje, o por lo menos insertar un mensaje personalizado por mi?

Muchas gracias, y perdón por el tocho...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Cambiar mensaje sistema por uno personalizado

Publicado por juan david muñoz castellanos (1 intervención) el 18/10/2012 23:00:03
no se si cancelarse pero por lo menos cambiar el mensaje si


.
.
.
exception
when others then

if sqlerrm = sqlerrm(numero del error en oracle) then
dbms_output.put_line('tu mensaje');
else
dbms_output.put_line(sqlerrm);
end if;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar