Posts

Showing posts from July, 2012

ADF 11g: af:query + af:table con datos precargados al iniciar

Image
Al hacer Drag & Drop de una  Named Criteria de una View ( del Data Control de un  Application Module), se puede crear un formulario de búsqueda con una tabla asociada para el manejo de los datos de nuestra base de datos. Drag & Drop para formulario de búsqueda + tabla Cuando se ejecuta la vista se puede observar que por defecto la tabla está vacía puesto que no se ha realizado ninguna búsqueda. Tabla vacía nada más cargar la vista Esto se debe a que es necesario que se realice una búsqueda (aunque sea con los campos vacíos) para que la tabla se rellene. Sin embargo, modificando el binding asociado a la View Criteria sobre la que se basa el af:query se puede lograr precargar una búsqueda para que cuando se cargue la página salgan datos inicialmente. Para conseguirlo únicamente es necesario modificar el atributo InitialQueryOverriden poniendo su valor a true . Modificación del binding a la View Criteria para precargar la búsqueda Con esta configuración, al ejecut

ADF 11g: JDBC Connection vs Data Source

Image
Una de las dudas / problemas que surgen a la hora de desplegar aplicaciones ADF viene ligada con las conexiones a base de datos que se configuran en el Model de la aplicación. En esta entrada voy a intentar aclarar cuál es el modo correcto para configurar las conexiones a BBDD de una aplicación ADF. Cuando se comienza el desarrollo de una aplicación ADF con capa de negocio en base de datos. Lo primero que se hace es crear una conexión de Base de Datos desde las Application Resources. Conexión a BBDD configurada El siguiente paso es la creación de los ADF Business Components a partir de esa conexión a BBDD. ADF BC generados a partir de la conexión Como podrá observarse, también se ha generado un fichero llamado Model.jpx . Este fichero tiene, entre otras cosas, una conexión a BBDD. La conexión configurada en Model.jpx es la conexión de BBDD que utiliza la aplicación por defecto para generar los ADF Business Components . No es la utilizada por la aplicación en R

Refrescar un UI Component externo a una af:region

Image
Un caso muy común en el desarrollo con WebCenter Portal / Spaces es el de refrescar componentes de la página según acciones que se ejecuten en los Task Flow que esta incluye. Enlace a la descarga del ejemplo ¿Cómo refrescar un UI Component según lo que haya ocurrido en un Task Flow? Esta pregunta se responde fácilmente. Eventos Contextuales La mayoría de  Task Flows  de WebCenter, como por ejemplo el de People Connections, disparan eventos según las acciones que se realicen en los mismos. Por ejemplo en People Connections las acciones de aceptar, ignorar o declinar una petición son disparadas. En el siguiente ejemplo se va a simular esta problemática refrescando un af:outputLabel según los eventos que dispare un Task Flow. "Antes de comenzar el ejemplo, recomiendo una lectura del ejemplo de Eventos Contextuales" . En el ejemplo el caso es el siguiente: UI Component que se refresca por PPR de una af:region Tenemos un componente af:outputLabel

ADF 11g: af:progressIndicator y af:statusIndicator

Image
En muchas ocasiones se ejecutan servicios o procesos duros en los que la aplicación parece quedar "congelada". Para evitar que el usuario de la aplicación crea que nuestra aplicación "pasó a mejor vida" ADF nos proporciona dos componentes: Enlace a la descarga del ejemplo Interfaz del ejemplo af:statusIndicator . Es el "simpático" iconito de la O de Oracle que cambia de icono a otro girando en el caso de que haya algún proceso en ejecución de la aplicación. Es posible modificar estos iconos (referencia a como hacerlo más adelante). Icono sin actividad   af:progressIndicator.  Es una barra de progreso típica que indica el estado de una operación. Siempre se puede usar cuando realmente se sabe el estado de la operación que se está realizando como, por ejemplo, insertar numerosas filas a base de datos (sabemos por que row del total vamos). Barra de progreso ¿Cómo usar cada una de ellas? af:statusIndicator Es el más sencillo puesto

ADF 11g: Variables de página

Image
Una duda que suele surgir a la hora de crear la pageDef de una página es la siguiente: Enlace a descarga del ejemplo ¿Para qué sirve el 'executable' variables? Una de las funcionalidades que nos permite es la creación de "variables" asociadas a Data Controls (como cuando hacemos Drag & Drop de una View Object y genera el Iterator ). Pero, por otro lado nos permite la generación de variables del tipo que queramos (por ejemplo java.lang.String). Executable variables de una pageDef ¿Cómo puedo crear una variable? En la propia pageDef lo podemos realizar desde la vista Structure o desde la propia pageDef haciendo click derecho en el propio ejecutable variables. Seleccionar en Insert Inside Variables -> variable para crear una variable. Creación de una variable en el executable variables (I) Dar un nombre lógico y el tipo de datos de la variable. Creación de una variable en el executable variables (II) Generar un binding a dicha variab

ADF 11g: No se puede encontrar o invalida su entidad propietaria

Image
Un error clásico cuando se hace un Create  de una fila para una entidad es: Enlace de descarga del ejemplo " oracle.jbo.InvalidOwnerException: JBO-25030: La entidad de detalle Y con la clave de fila null no se puede encontrar o invalida su entidad propietaria. " Error al realizar una operación  Create  en una tabla  Detalle  sin su  Maestro ¿A que se debe este error? Cuando se tiene un modelo de datos en el que existen entidades "Maestro - Detalle" se hace muy común este problema. El problema reside en la creación de filas en la entidad  Detalle sin que la entidad  Maestra se encuentre en la misma página. Supongamos el siguiente modelo de datos:  Modelo de datos, Tabla Maestro-Detalle. Dado un idioma, tienes los portales asociados Como se puede comprobar, existe una relación de Foreign Key entre PortalesWeb e Idiomas por el campo ID del idioma. Esto lo que supone es que: Tabla Idioma es la maestra. Tabla PortalesWeb es el detalle. Por lo