Ir al contenido principal

Código para acceder a los Folios de Oracle UCM mediante la API RIDC con Java

En un reciente proyecto me vi en la necesidad de trabajar con el Oracle Universal Content Manager (UCM) mediante a API de RIDC. Abundan en la web ejemplos de como hacer esto, lo cual fue una gran ventaja para mis tareas. No obstante, fue más difícil encontrar en buen ejemplo para acceder a los FOLIOS del UCM, e incluso me encontré con algunos problemas a la hora de pasar los parámetros en forma adecuada.
Es por ello que hoy dejo un breve fragmento de código que muestra como acceder a los servicios de RIDC mediante Java.

Para ello creé un proyecto Java en eclipse, y agregué las librerías oracle.ucm.ridc-11.1.1.jar y oracle.ucm.ridc.was-lib-11.1.1.jar.
Use un Pojo, ConsultaDocumentos, para modelar los documentos. Este Pojo puede ser usado en un contenedor de Vaadin u otro framework para representar los resultados de los documentos contenidos en un FOLIO de Oracle UCM.



Código de ejemplo:

 
public class RIDCBusiness { 
  public static List getSearchResultsByFolio(String folioID, String idConnectionURL, String username) { 
    //idConnectionURL = idc://192.168.110.22:4444 
    //username = weblogic 
    final ArrayList resultado = new ArrayList(); 
    ServiceResponse response = null; 
    try { 
      final IdcClient client = getUCMConnection(idConnectionURL, username); 
      final DataBinder dataBinder = client.createBinder(); 
      dataBinder.putLocal("IdcService", "LOAD_FOLIO_NODE"); 
      dataBinder.putLocal("RevisionSelectionMethod", "LatestReleased"); 
      dataBinder.putLocal("dDocName", folioID); 
      final IdcContext userContext = new IdcContext(username); 
      response = client.sendRequest(userContext, dataBinder); 
      final DataBinder binder = response.getResponseAsBinder(); 
      final DataResultSet resultSet = binder.getResultSet("__DATA_slot"); 
      // loop over the results 
      if (resultSet != null) 
        for (final DataObject dataObject : resultSet.getRows()) 
          resultado.add(new ConsultaDocumentos(dataObject)); 
    } catch (final Exception e) { 
        Logger.getLogger("RIDCBusiness").error("Error en getSearchResultsByFolio", e); 
    } finally { 
      if (response != null) 
         response.close(); 
      } 
      return resultado; 
    } 
 
    public static IdcClient getUCMConnection(String idConnectionURL, String username) throws IdcClientException, IOException { 
        final IdcClientManager clientManager = new IdcClientManager(); 
        final IdcClient client = clientManager.createClient(idConnectionURL); 
        return client; 
    } 
} 
 
public class ConsultaDocumentos implements Serializable { 
    private static final long serialVersionUID = 1L; 
    private final String id; 
    private final String info; 
    private final String tipo; 
    private final String titulo; 
    private final String nombre; 
    private final String fecha; 
    private final String fechaExpiracion; 
    private final String extension; 
    private final String formato; 
    private final String docName; 
 
    public ConsultaDocumentos(DataObject dataObject) { 
        id = dataObject.get("xcsd:dID"); 
        info = dataObject.get("xcsd:dInfo"); 
        tipo = dataObject.get("xcsd:dDocType"); 
        titulo = dataObject.get("xcsd:dDocTitle"); 
        nombre = dataObject.get("xcsd:dOriginalName"); 
        fecha = removeZ(dataObject.get("xcst:createdate"); 
        fechaExpiracion = removeZ(dataObject.get("xcsd:xFechaExpiracion"); 
        extension = dataObject.get("xcsd:dExtension"); 
        formato = dataObject.get("xcsd:dFormat"); 
        docName = dataObject.get("xcsd:dDocName"); 
    } 
 // se omiten los getters y setters 
}

Comentarios

Entradas populares de este blog

El Melange todavía corre

Ese era el estribillo de un capítulo de unas de mis series favoritas de la infancia, Meteoro o Speed Racer. En ese capítulo un auto “fantasma” el X-3, aparecía de imprevisto y dejaba a todos asombrados con su rendimiento y prestaciones y volvía a desaparecer. Traigo ese episodio a colación puesto que recientemente sostuve una amena charla con un querido amigo, en la que el me manifestaba como los Mainframes habían muerto, o mejor dicho, el concepto de la computación distribuida basada en Mainframes había desaparecido. Para variar, yo no estuve de acuerdo, y le dije que por el contrario, el modelo de computación basado en Mainframes está mas vigente que nunca. Estos fueron mis argumentos:

Primeros pasos con Camunda BPM – Modelando un Proceso BPMN 2.0

Tenemos entre manos la tercera publicación de nuestra serie sobre la Plataforma de BPM de Camunda .  El día de hoy vamos, por fin, a empezar a modelar o construir nuestro primer proceso sencillo en notación BPMN 2.0. Para ello vamos a usar el modelador o editor que ya hemos instalado en nuestra primera publicación , y vamos a guardarlo en la sección de recursos del proyecto Maven Java que configuramos en la segunda publicación . Así que, como ya es costumbre, manos a las sobras…

Como configurar jBPM para usar nuestra propia Base de Datos en un sólo paso

Llevo un buen rato trabajando con jBPM en su serie 6.x, y mi opinión sobre este producto en la versión mecionada no ha mejorado para nada. Es una herramienta plena de funciones y caracteristicas avanzadas, pero tambien está llena de Bugs y es realmente inestable, sobre todo en el ambiente de modelamiento.  Así mismo, debo decir que tiene una muy aceptable API REST y que el motor de procesos y la consecuente ejecución de los procesos es estable y bastante rápida. En esta publicación daré inicio a una serie de artículos que hablan sobre ciertas configuraciones comunes e importantes que se hacen con jBPM. Hoy iniciamos con la configuración de jBPM para que use nuestra base de datos favorita. Esto tiene sentido porque el producto viene con la base de datos H2 por omisión, la cual es excelente para pruebas y evaluaciones rápidas de la herramienta, pero es completamente inaceptable en un ambiente de desarrollo, QA o producción cualquiera. Así que manos a l