lunes, 26 de mayo de 2008

Oracle forms: no me deja cambiar el color de fondo

Oracle forms: no me deja cambiar el color de fondo

Oracle forms: como puedo poner el color

Oracle forms: no me deja poner colores manualmente

SITUACIÓN:

(son 2 situaciones diferentes pero bastante relacionadas)

1) Intento cambiar el color de fondo de un canvas y solo me deja elegir entre la paleta que tiene mediante clic en el popup de colores que sale, mediante RGB pero no valores exadecimales si no porcentuales asi R100G50B0 significa 100% de rojo, 50% de verde y 0% de azul pero… solo nos lo deja poner si el color existe en la paleta al igual que si intentamos ponerlo como gray30 (gray 30%) o similares.

2) Otro problema es que inicialmente esta a pero si lo cambiamos en algunos elementos si nos deja volverlo a dejar como mediante la opción “no fill” que supongo que en castellano aparecerá como “sin relleno” “no llenar” o algo así.

EXPLICACIÓN:

1 Por defecto oracle forms viene con la opción de paleta de colores solo de lectura.

2 Forms tiene errores absurdos, a nadie debería extrañarle.

SOLUCIÓN:

1) Vamos a Edit > Preferences y cambiamos la opción “color mode” a Editable

Luego nos vamos a la parte visual y vamos a Edit > Layout Options > Color Palette y ya nos aparece la paleta y el botón de editar color tan típico del Paint brush.

2) En vez de intentar buscar el color editando la paleta o de intentar meter como valor el “blank” que nos sugiere la ayuda o el lo que hacemos es cambiar el “Visual Attribute group” a otro valor y luego lo volvemos a dejar en default y ala, los 3 valores a


viernes, 23 de mayo de 2008

No puedo hacer go_block en los triggers POST

Oracle forms: No me deja hacer go_block

Oracle forms: Como puedo ejecutar una consulta (execute_query) de un bloque de datos cuando cambio el valor de un item en otro bloque de datos?

Oracle forms: execute_query de otro bloque en trigger post-block

SITUACIÓN:

Es bastante típica, tenemos un elemento (item) en un bloque y queremos que cuando se modifique vaya a otro bloque y ejecute una consulta. El modo correcto de hacer esto cuando se trata de una relación padre-hijo (por ejemplo un bloque personas que cuando cambian la persona actualice el bloque de por ejemplo trabajos académicos de esta persona) es el de las relaciones uniendo los dos bloques por el identificador de la persona.

A veces sin embargo no es una relación así y se trata por ejemplo “si la persona es hombre carga el bloque de burradas y elimina el de tonterías y si la persona es mujer carga el bloque tonterías y elimina el de burradas” donde ya hay condiciones, algún que otro análisis de variables… y no nos es posible hacer la relación lo primero que uno piensa es “go_block (‘tonterías’); execute_query;” pero entonces nos sale que no es posible ejecutar go_block en el post-change ni varios otros a nivel de item.

EXPLICACIÓN:

A Oracle forms a saber porque motivo de diseño no le da la gana permitir facilidades así.

SOLUCIÓN:

La solución es ponerlo en el trigger WHEN-NEW-ITEM-INSTANCE del bloque donde tenemos el objeto que al cambiar active lo otro. Pero claro, eso nos pasaría con cualquiera de los elementos del bloque así que tenemos que filtrarlo poniendo en el trigger

if :system.current_item = 'nombre del elemento activador’ and (variable_auxiliar = 0 or variable_auxiliar is null) then

go_block (‘tonterias’);

execute_query;

variable_auxiliar:=1;

end if;

Lo de la variable auxiliar es para que no caiga en un bucle infinito y así controlamos que solo se hace una vez.


jueves, 22 de mayo de 2008

Error 0

Oracle forms: Error 0.


Muchas veces Oracle nos da errores negativos o uno muy curioso que dice, “error 0 linea 0 carácter 0” o variantes aunque normalmente lo de “error 0” se mantiene y empieza a petar todo en cascada. Al principio uno se acojona pero tiene fácil solución, la más básica de todas las soluciones informaticas, salir y volver a entrar ;P

Otras versiones son ya más claras cuando lo que vienen a decir es "he muerto"

A menudo cuando vamos programando forms para web y en el Explorer vamos refrescando llega un momento en que se colapsa y se queda la pantalla gris, pues lo mismo, cerrar y abrir Explorer. (Funciona mucho mejor con Firefox pero como quien manda es el cliente y suelen usar Explorer a saber porque pues…)

Desaparece la toolbar al volver al form inicial.

Oracle forms: Desaparece la toolbar al volver al form inicial.

Oracle forms: Llamo a un formulario con call_form y al salir del segundo desaparece la toolbar.

SITUACIÓN:

En un formulario con toolbar horizontal tengo un botón que llama mediante CALL_FORM a otro formulario parecido también con su toolbar y cuando salgo de este no solo se cierra el formulario si no que desaparece la toolbar y nos queda el form anterior que se desplaza para arriba. ¿Donde está la toolbar?

EXPLICACIÓN:

Cuando salimos de un formulario se cierra la ventana de forms (no la del S.O. si no lo que definimos en forms como Window) mediante una orden interna que desconozco. Como cuando programamos forms no solemos empezar de zero si no que cogemos una plantilla o un form parecido y las ventanas siempre son la misma por lo que cuando el form dice “cerrar window (‘ventana1’)” se encuentra que hay 2 y por eso se cierra también la toolbar del anterior.

SOLUCIÓN:

En caso de forms que se llamen entre ellos renombrar la ventana de uno de ellos para que el nombre sea diferente.

miércoles, 21 de mayo de 2008

No se ejecutan los triggers al cambiar de registro

No se me ejecutan los triggers en Oracle Forms.

Ejecuta trozos de código pero otros no, parece que se los salta.

No salen los alerts pero pasa porque otros cambios que hace el código si se ven.

He intentado post-query, post-record, post-change… y no funciona ningún trigger.

Todo eso nos lleva a pensar ¿Oracle Forms usa caché?

SITUACIÓN:

Tengo un bloque de datos con un código de persona y dependiendo de la primera letra (un substring vamos xD) cambia el valor de un radio button que nos indica el tipo de persona y además nos cambia el nombre de una pestaña (Tab). Para hacer esto recurrimos lógicamente al post-query, que como su nombre indica es el trigger que se ejecutará después de ejecutar la consulta (query) y funcionan bien ambos cambias (tab y radio) mientras vamos cambiando de registro hacia delante pero cuando tiramos hacia atrás solo funciona el del radio button mientras que no funciona el cambio de nombre de la pestaña. Raro raro, lo primero que uno piensa si programaba con Borland C++ para MS-DOS (snif) es que el compilador se salta líneas así que ponemos en el trigger post-query

message (‘Paso por aquí’);

funcion_que_me_cambia_el_radio_button;

message (‘Ala, ya pasé de aquí’);

y ejecutamos: mientras vamos avanzando registros nos sale el mensaje, ejecuta la función y sale el segundo mensaje pero cuando tiramos atrás y nos movemos por los registros que ya hemos visto los mensajes no salen pero si se hacen los cambios de la función. Entonces ¿pasa o no pasa por el trigger? ¿Si pasa porque no salen los mensajes? ¿y si no pasa porque se cambia el radiobutton?

EXPLICACIÓN:

Oracle forms a no ser que le indiquemos lo contrario solo carga un registro y los demás los va consultando a medida que avanzamos con next_Record (sea por código , por teclado o con el ratón) por lo que después de cada uno de ellos ejecuta el trigger post-query pero cuando volvemos atrás estamos consultando los que oracle forms ya ha cargado por lo que no sirven ya los triggers *-query que son los que hacen referencia a la carga de datos y debemos usar los *-record que son los que hacen referencia a la aplicación local por así decirlo, al forms.

SOLUCIÓN:

En el post-query sigue el código para cuando le den a F8 (ejecutar consulta) y vayamos avanzando pero también en el trigger PRE-RECORD para tratar los que ya están cargados. El post no sirve porque nos interesa hacer las operaciones con el registro al que vamos, el que veremos una vez ejecutado el trigger y no nos interesa que lo haga con el anterior puesto que ni lo veremos cuando se hagan los cambios porque ya estaremos en el siguiente.

martes, 20 de mayo de 2008

Como solucionar errores en Oracle Forms

Soy Tomás, informático catalán de 26 años, programando desde los 14 con la pausa alocada típica de la adolescencia superior y profesionalmente desde hace 5 básicamente con PL/SQL y Forms/Reports.

Y una vez presentado os digo la verdad, aunque parezca mucho, no es tanto... que la pausa duró mucho, casi tanto como las resacas, pero los años laborales me han dado un poco de experiencia que es lo que te enseña de verdad porque programar todo el mundo puede hacerlo en un par de días si se pone pero solucionar problemas estúpidos para los que los analistas no encuentran solución y que son bugs o caprichos del programa hay que haber aceptado muchas tocadas de cojones del cliente y cambios inesperados que por simples que sean lo cambian todo.


Es por ello que no voy a poner un manual de oracle forms o la lista de errores copiados de la ayuda si no que a partir de ahora cuando me salga una de estas cosas en vez de olvidarla hasta que me la vuelva a encontrar la escribiré en este blog a modo de recordatorio y ya de paso que sirva de ayuda a alguien más que no se porque hay información de todo menos de oracle forms y reports.

Lógicamente acepto encantado que me conteis los que sepais vosotros para publicarlos y que ayuden a más gente y si conoceis soluciones alternativas pues mejor que mejor :)

Que versión de Oracle Forms usas?