viernes, 29 de agosto de 2008

Pasando parámetros a Application Express (APEX)

Este es un tip corto, estuvimos con John Bocachica trabajando en una aplicación en APEX en la cual se requería recibir a través de la url algunos parámetros que llenaran unos campos de un formulario web.

Lo primero que se nos vino a la mente fue usar un paso de parámetros por el método GET estándar (es decir url?param_name=param_value&param2_name=param2_value), pero APEX de hecho utiliza un solo parámetro y si le añadimos otro nos arroja error http 404.

Así que luego de consultar en varios sitios y en la documentación de la herramienta llegamos a la solución que documento en este post.
Para reproducirlo simplemente creamos una aplicación en APEX, con una página sencilla que tenga, por ejemplo, un formulario de dos campos: un textField y un dropdownList, a los que nombraremos en tiempo de edición P1_CAMPO y P1_LIST respectivamente como se muestra en la figura.


Veamos este formulario en ejecución:


Y detallemos la URL de la página: http://apex.oracle.com/pls/otn/f?p=54139:1:3712345573379044:::::

El único parámetro que acepta APEX es este llamado p y entonces cómo le pasamos más parámetros? El secreto está en esos :::: al final del valor del parámetro p ..

Veamos lo que significa cada campo:

f?p=1:2:3:4:5:6:7:8

1. Id de la aplicación a acceder
2. Id de la página a desplegar
3. Id de la sesión del usuario (acá podemos usar por ejemplo "0" y se cambiará automáticamente por una sesión interna de APEX, o podemos inclusive usar una variable como &APP_SESSION.)
4. Aun no sé para qué se usa (cuando encuentre el dato les cuento...o si lo saben me cuentan ;) )
5. Indicador que muestra o esconde la información de debug de APEX (valores: YES o NO)
6. Id de la página cuyo caché de valores de los ítems será reseteado (si se deja vacío no resetea el caché de ninguna página)
7. Array separado por comas con los nombres de los parámetros cuyos valores queremos actualizar de la página.
8. Array separado por comas con los valores de los parámetros a actualizar. El orden debe coincidir como declaramos los campos a actualizar.
Con esta info recopilada simplemente reescribimos nuestra URL para pasar valores a nuestros dos campos así:

http://apex.oracle.com/pls/otn/f?p=54139:1:0::NO::P1_CAMPO,P1_LISTA:Pedro,3



Con esto termina este post espero les sea de utilidad, saludos.






No hay comentarios: