jueves, 7 de febrero de 2013

Runtime LOV para parámetros de Task Flow

Tanto los Task Flow ofrecidos OOTB por WebCenter Portal/Spaces como los que se desarrollan Custom a medida suelen tener parámetros de entrada para configurar el funcionamiento de los mismos.

Enlace de descarga del ejemplo

En muchas ocasiones, es bastante incómodo tener que ir a visitar la documentación oficial para saber exáctamente que valores se deben poner en los parámetros de entrada de un componente.

Por ejemplo: El Task Flow Search contiene numerosos parámetros de entrada. Entre ellos el de los servicios sobre los que se quieren obtener resultados.
Por defecto encontramos esta ventana para configurar sus parámetros:

Parámetros por defecto del Task Flow Search

Como se puede observar, por ejemplo el parámetro de "" exige el conocimiento de los identificadores de servicios de WebCenter por lo que deben ser consultados en la documentación oficial.

Sin embargo, con el ejemplo que os traigo se puede realizar una pequeña modificación a los parámetros de entrada de cualquier Task Flow para que se haga más amigable la elección de la configuración.

Parámetro Services to be Included modificado con un selector

¿Cómo se logra sobreescribir los parámetros de entrada de los Task Flow?.
La respuesta es sencilla. Extendiendo las capacidades que ofrece Oracle Composer. Hay 3 posibilidades que hay para modificar el comportamiento por defecto de una parámetro de entrada:
  • Lista estática: Aparecera un combo en el que se puede seleccionar un valor de una lista con valores estáticos configurados. También se pueden definir de manera global para poder ser reusados en otros parámetros de entrada.
  • Lista dinámica de valores (LOV). El enumerado procede de un manage bean que devuelve un java.util.List<SelectItem>. También se pueden definir de manera global para poder ser reusados en otros parámetros de entrada.
  • Selectores (pickers): Son Task Flow Custom que se desarrollan para realizar interfaces mas complejos de selección del valor o valores que va a contener el parámetro de entrada del Task Flow.
Para extender Oracle Composer seguir los siguientes pasos:
  • Crear en la carpeta META-INF un archivo llamado pe_ext.xml.
    Archivo pe_ext.xml para extender Oracle Composer
  • Registrar los distintos Task Flow que queremos sobreescribir.
    Task Flow registrados para sobreescribir sus parámetros de entrada
    La ruta del Task Flow viene determinada por: [su ruta de paquetes / carpetas]+[nombre-fichero.xml]#[task-flow-id]

    Por ejemplo para saber como encontrar los Task Flow de producto seguir estos dos pasos:
    • Localizar el Task Flow. En caso de uno Custom sabemos en que carpeta se encuentra. Sin embargo, para uno de producto usar el siguiente enlace: Tabla de rutas de los Task Flows de WebCenter.
      Tabla de la documentación oficial de Oracle de las librerías y rutas de Task Flow
    • Para saber el identificador del Task Flow solo hay que abrir la definición del mismo y tomar el identificador.
      Identificador del Task Flow
      Para los Task Flow de producto hay que configurar el proyecto para Show Libraries y navegar en la librería que contiene el Task Flow que se esta buscando.
      Task Flow de Search buscado a través de las librerías
  • Aprovechar el registro del Task Flow para registrar al mismo tiempo qué parámetros se desean sobreescribir. El nombre de los parámetros debe coincidir con el nombre configurado en la definición del Task Flow
    [Imagen con los nombres de los input param]
  • Según la tipología comentada anteriormente el registro del enumerado cambia.
    • Lista estática: Es una lista directa de nombre/valor.
      Declaración de una lista estática para un parámetro del Task Flow
    • Lista dinámica: Puede referenciar directamente un manage-bean definido en adfc-config.xml. Debe devolver una List<SelectItem>
      Declaración de una lista dinámica para un parámetro del Task Flow
    • Selector (picker): Hay que configurar la ruta del Task Flow que implementa el selector.
      Declaración de un selector basado en Task Flow para un parámetro de un Task Flow
  • En el caso de usar un selector (picker), es decir, un Task Flow Custom hay que tener en cuenta los siguientes detalles a la hora de implementarlo:
    • Deben declararse dos parámetros de entrada. El nombre de los parámetros debe ser exactamente el mismo que el de la imagen/explicación, al igual que su tipo.
      Parámetros de Oracle Composer obligatorios para el selector
      •  inParamVal: Contiene el valor actual configurado en el parámetro.
      • outParam: Es un mapa de valores donde Composer almacena cierta información. Se usa para volcar la información seleccionada en nuestro selector.
    •  El Task Flow debe al menos tener un activity return.
      Return activity para el Task Flow selector
    • Durante la implementación de código. En la inicialización cargar los valores que ya estaban previamente seleccionados de inParamVal en una lista interna o algun bean manejable.
      Código referente a recoger el valor ya configurado previamente para el parámetro
      Proporcionar botones para poder salir del popup lanzador por Oracle Composer y volcar en el mapa outParam los nuevos valores seleccionados.
      Código reference al volcado de la nueva información seleccionada para el parámetro

Recomendaciones: Como recomendación personal. Me gusta tener en un proyecto separado aparte toda la sobreescritura correspondiente a parámetros de entrada de los Task Flow de producto de WebCenter. Los Task Flow Custom desarrollados podrían llevarlo de serie dentro de sí mismos.

El ejemplo: En el ejemplo os dejo las 3 posibilidades que hay (no muestro como declarar listas globales, leer documentación para ello).
Con respecto al ejemplo del selector (picker), he desarrollado un selector basado en un af:selectManyShuttle a través del cual el usuario puede seleccionar qué servicios quiere que se configuren para el Task Flow de producto Search. Para verlo, obviamenete acceder a la página Home del portal como administrador. Acceder a Oracle Composer y modificar el parámetro de selección de servicios.
Por otro lado, hay un Custom Task Flow interno en el proyecto de Portal que tiene dos parámetros de entrada. Uno de ellos recoge la información de una lista estática y el otro la recoge de un Manage Bean.

Referencias:
 Enlace de descarga (Ejemplo desarrollado en JDeveloper 11.1.1.6) 

No hay comentarios:

Publicar un comentario