martes, 27 de septiembre de 2011

UCM: Filtrar metadatos del formulario de Check-in de una Carpeta

Hola.

Hoy os traigo una entrada relacionada con WebCenter Content (Oracle UCM).

En esta ocasión indicaré los pasos para poder filtrar los metadatos que son mostrados al usuario en el caso de que cree una carpeta en nuestro repositorio de contenidos.

Los pasos a seguir son los siguientes:
  • Acceder a Administration > Admin Applets > Configuration Manager que es donde se establecen los metadatos, perfiles, reglas etc... que usa Oracle UCM.

    Configuration Manager
  • Navegar a la pestaña Rules y darle a Add para añadir una nueva regla. Rellenando los siguientes campos:

    Regla configurada
    • Name: Nombre de la regla
    • Descripción: Es de buena costumbre especificar de qué se trata la regla :).
    • Seleccionar la opción Is global rule with priority para indicar que es una regla global.
    • Activar la opción Use rule activation condition para indicar en qué caso se desea que la carpeta no muestre los metadatos en los formularios de Check-in.
    • Añadir dando a Edit la siguiente regla de activación:

      • En la pestaña Conditions añadir una nueva regla (Add).

        Creación de una condición
      • En la pestaña Clauses seleccionar la siguiente expresión: Folders equals 0 y añadirla para que genere la expresión.

        Clausula para verificar que es una carpeta
    • En el caso de querer que sólo se aplique a una carpeta concreta. Podemos seleccionar el xCollectionId de la carpeta como Value.
    • En la pestaña Fields añadir aquellos metadatos que deseamos que sean de tipo hidden y, por lo tanto, no serán mostrados en los formularios de Check-in.

      Campos que no se desean en el formulario de Check-in
  • Como podremos comprobar. Los metadatos propios de Idioma y Orden desaparecen a la hora de realizar Check-in de una carpeta.

    Antes de aplicar la regla recién creada

    Después de aplicar la regla recién creada
Ejemplo desarrollado en WebCenter Content 11g (Oracle UCM 11g).

Agradecimientos a: Luis Villa y Fransico Javier Ruiz por su aportación.


Un saludo a todos :).

martes, 20 de septiembre de 2011

Integración WebCenter - UCM (PS3): Obtener conexión RIDC mediante Java

Hola a todos.

Algo que no he encontrado documentado por la red (por lo que puede que cambie en futuras versiones) es cómo conseguir mediante API de WebCenter la conexión RIDC a nuestro servidor de contenidos UCM.

Por ello, indagando cómo WebCenter Spaces atacaba a los servidores de contenido configurados en la EnterpriseManager o cómo atacar a los propios configurados en JDeveloper me encontré con la siguiente clase:

oracle.webcenter.content.stellent.StellentUtils;

Gracias a esta clase podemos obtener la conexión UCM por el nombre configurado desde la EnterpriseManager o en nuestro JDeveloper mediante la llamada:

StellentUtils.getIdcClient("NOMBRE_CONEXION");

Aquí os dejo un pequeño fragmento de lo que sería un método que devolviese una conexión RIDC a nuestro servidor de contenidos:

Acceso RIDC mediante StellentUtils
Por otro lado siempre tenemos la opción de usar el API JCR para acceder a nuestra conexión y a partir de ahí obtener un cliente de acceso RIDC. Nos apoyaremos en la clase ADFConnectionsManager para obtener el repositorio configurado en nuestro contexto ADF.

Conexión RIDC mediante JCR


Por último comentar que podemos obviar las opciones configuradas y atacar directamente al servidor de aplicaciones mediante RIDC estableciendo la conexión con el API directamente.

Conexión directa RIDC mediante API
Existen más maneras de conseguir las conexiones configuradas en nuestro portal de WebCenter dado que estas conexiones son registradas en un archivo connections.xml y pueden ser accedidas mediante JNDI.

Referencias:

Un saludo a todos :).

domingo, 18 de septiembre de 2011

ADF BC: Valor procedente de una Secuencia

Hola.

Hoy os traigo tres formas distintas de establecer el valor de un atributo de una Entity Object al valor de una secuencia de base de datos.

Cambiando el tipo de dato del atributo a DBSequence.

Esta solución consiste en cambiar el tipo de dato del atributo de nuestra Entity Object a DBSequence.
Al realizar este cambio podemos observar en la parte inferior de la pantalla de propiedades se ha habilitado la posibilidad de configurar el nombre de la secuencia de base de datos que deseamos utilizar para dicho atributo.

Atributo de entidad con Type: DBSequence
No genera el valor final de la secuencia hasta que se realiza commit. Por ello si se contribuyen tablas asociadas a la del valor autogenerado pueden encontrarse valores negativos temporales hasta que se realice el commit de los datos.

Programáticamente en la creación de la fila

Esta solución consiste en sobrescribir el método create de una fila y forzar la llamada a la secuencia de base de datos para establecer el valor del campo deseado.
Para ello se debe generar la clase Java que representa la entidad incluyendo el Create Method.

Generación de la clase Java que define la Entidad
Y seguidamente incluir en el código del método create la llamada a la secuencia de base de datos deseada y asignarle el valor al campo correspondiente de la entidad.

Método create de la Entity

Finalmente es necesario actualizar el atributo de la entidad para que refresque después de la inserción.

Refresco después de inserción
Esta opción genera un valor siempre que se comience una operación de inserción en base de datos por lo que si se cancela la operación de inserción, ese valor será un valor perdido puesto que en la próxima inserción se generará el siguiente valor.

Mediante una Groovy Expression

Para esta solución hay que generar primero la clase que define la Entidad (como hicimos en la solución anterior). Y crear un método que obtiene el valor de la secuencia.

Método que genera el valor de la DBSequence

Seguidamente editar las propiedades del atributo de la entidad para que obtenga su valor procedente de dicho método mediante una Groovy Expression.

Groovy expression que invoca a la DBSequence
Personalmente nunca he usado esta opción.

Ejemplo desarrollado en JDeveloper 11.1.1.4.

Un saludo :).