Creación de archivos de texto en ECM desde IBM BPM

...

Este artículo detalla cómo crear archivos de texto en IBM BPM y almacernarlos directamente en el ECM integrado con el proceso.

Introducción 

Durante el desarrollo de un proceso BPM con integraciones con ECM, es posible que uno de los requerimientos sea, por ejemplo, que los archivos de bitácora de los procesos sean almacenados en el ECM. Para estos casos, CMIS ofrece una operación que sirve para cumplir con esta tarea.

Para este caso en particular se trabajó con las siguientes herramientas:

  • IBM BPM Standard v8.0.1.2
  • Microsoft SharePoint

Creación del Integration Service "CMIS - Create WF Log"

Se creará un nuevo Integration Service, con la siguiente configuración:

Variables

Las variables del servicio involucradas son:

  • fileContents (String) – Variable con el texto del archivo a almacenar.
  • contentStream (ECMContentStream) – Utilizada en la creación del documento en el ECM
  • fileName (String) – Nombre del archivo
  • ecmProperties(List de ECMProperty) – Colección que servirá para indicar la metadata adicional que quiera cargarse para el documento.

IS Variables

Diagrama

IS  Diagram

A continuación, se detallará cada una de las actividades involucradas:

Set File Content 

En este Server Scriptlet, asociado a la variable privada fileContents, se armará el texto del archivo a almacenar en Sharepoint. En este ejemplo en particular, se utilizan diversas variables del objeto wfInstance, propio de la solución utilizada como modelo. El resultado del scriptlet es alojado en la variable fileContents, del tipo String. Este será el texto que tendrá el archivo.

Set File Content

Set Up Properties 

La implementación del siguiente Server Script contendrá el setteo de las variables requeridas para el alta del documento en el ECM.

fileName 

Asignarle el nombre que poseerá el documento. En este ejemplo, el nombre del archivo corresponde a “WFLog_<instanceID>.txt" 

tw.local.fileName = “WFLog_” + tw.system.currentProcessInstanceID.substring(tw.system.currentProcessInstanceID.indexOf(“.”)+1) + “.txt”;

contentStream

Para settear está variable, se debe incluir el siguiente bloque de código: 

var bytesValue = new Packages.java.lang.String(tw.local.fileContents).getBytes(“UTF-8”);
var content64 = Packages.org.apache.commons.codec.binary.Base64.encodeBase64(bytesValue);
tw.local.contentStream = new tw.object.ECMContentStream();
tw.local.contentStream.contentLength = tw.local.fileContents.length;
tw.local.contentStream.mimeType = “text/plain”;
tw.local.contentStream.content = new Packages.java.lang.String(content64,”UTF-8”);

Nota: "UTF-8" puede cambiarse de acuerdo al encoding necesitado.

ecmProperties

El siguiente bloque de código indica cómo deben crearse las propiedades a asignarle al archivo. Dichas propiedades refieren a la metadata configurada para el tipo de documento en el ECM. El orden en el que se popula la colección de propiedades es indiferente. 

tw.local.ecmProperties = new tw.object.listOf.ECMProperty();
tw.local.ecmProperties[0] = new tw.object.ECMProperty();
tw.local.ecmProperties[0].objectTypeId = “WFName”; //Nombre de la propiedad
tw.local.ecmProperties[0].value = tw.local.wfInstance.wfDescription.name;

Create Document

El ultimo paso es crear el archivo en el ECM utilizando una actividad de Content Integration.

En implementation se selecciona el Server al que conectarse. (La información del servidor se configura en “Process App Settings”, solapa “Servers”). Además, debe seleccionarse la operación “Create document”.

Create Document - implementation

En Data Mapping, se completarán las siguientes variables de entrada: 

  • Object type ID: String indicando el tipo de documento, para este ejemplo se utiliza el default de Sharepoint: “cmis:document”
  • Folder ID: ID de la carpeta donde almacenar el archivo. En SharePoint, el ID de la carpeta raíz del repositorio es “-1”.
  • Name: indicar tw.local.fileName
  • Content stream: indicar tw.local.contentStream
  • Properties: indicar tw.local.ecmProperties 

Si se quisiera, podría asignarse el ID del documento creado en el ECM a una variable utilizando Document ID de la sección Output Mapping.

Create Document -data mapping

Completados estos pasos, el servicio está listo para ser invocado y dar de alta documentos de texto en el ECM. 

Troubleshooting

 

  1. “Quiero guardar el archivo en una carpeta que no sea la carpeta raíz. ¿Cómo averiguo el ID?”

    1. La solución que no involucra desarrollo es averiguar en el ECM el ID de la carpeta, siempre que sea la misma y asignarla a una variable de entorno.

    2. Si, en cambio, la carpeta varía, se puede implementar un Integration Service en el cual se obtenga la carpeta en el ECM por su path (Get folder by path) y se devuelva el ID de la carpeta buscada.

  2. “El Servicio falla indicando que la propiedad 'x' no existe”

    1. En esos casos, es posible que el display name de la propiedad que quiere settearse es distinto a su objectTypeId. La solución es averiguar en el ECM cuál es su objectTypeId. 

 


Modificado por última vez en Miércoles, 04 Junio 2014 17:55

Acerca del autor

Federico Luppi

Federico cuenta con más de 4 años de experiencia en el desarrollo de aplicaciones Web bajo plataformas Java EE y 3 años de experiencia en el liderazgo de equipos de desarrollo. Actualmente se desempeña como Líder de Proyecto en el área de operaciones de MicroGestion Software.