Usted está aquí:Inicio/MG Developers/Blog/Creación de archivos de texto en ECM desde IBM BPM

Publicaciones recientes

Por Qué Elegirnos

  • Más de 400 proyectos puestos en producción durante los últimos 15 años demuestran el compromiso con nuestros clientes, certifican nuestra metodología y reflejan la capacidad de nuestro equipo de profesionales.

  • En MicroGestion existe un compromiso genuino con la calidad, la formación continua de nuestros profesionales y la mejora continua de nuestros procesos son la evidencia de dicho compromiso.

  • Creemos que los siguientes rasgos son esenciales para el ejercicio de nuestra actividad:

    » Entusiasmo, como requisito para llevar a cabo un proceso creativo.
    » Proactividad, como engranaje de la dinámica de grupos.
    » Responsabilidad, como condición fundamental para asumir compromisos en cada nivel de la empresa.
    » Trabajo en grupo, como mecánica de trabajo elegida para lograr sinergia.

    Asimismo nuestra capacidad de ejecución se fundamenta en el respeto de los siguiente valores:

    » Flexibilidad, necesaria para buscar el mejor camino en cada proyecto.
    » Compromiso, para formar equipos con conocimiento de dominio y orientación al logro.
    » Solvencia, que nos permite diseñar la mejora alternativa tecnológicas para cada solución.

  • En MicroGestion las personas son el factor más importante para el éxito de los proyectos; la conformación y gestión del capital humano se lleva a cabo teniendo en cuenta los siguientes lineamientos:

    » Determinando el conjunto correcto de personas para cada proyecto.
    » Desarrollando un ambiente donde existan oportunidades de aprendizaje.
    » Propiciando la confianza y el respeto dentro del equipo.
    » Permitiendo el desacuerdo y previendo una manera de resolverlo.
    » Preguntando, no inquiriendo.
    » Reconociendo los logros.

25 Abr

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
Valora este artículo
(2 votos)
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.

Sitio Web: www.microgestion.com/index.php/mg-developers/blog/author/991-federicoluppi
5 comentarios
  • Federico Luppi

    Hola Paloma,
    Deberias ir populando el listado de ecmProperties:

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

    Donde "Propiedad" es el nombre de la propiedad que queres darle un valor. Si tenés más de una, vas agregando más indices al listado:

    tw.local.ecmProperties = new tw.object.listOf.ECMProperty();
    tw.local.ecmProperties[0] = new tw.object.ECMProperty();
    tw.local.ecmProperties[0].objectTypeId = “Propiedad1";
    tw.local.ecmProperties[0].value = valor1;

    tw.local.ecmProperties[1] = new tw.object.ECMProperty();
    tw.local.ecmProperties[1].objectTypeId = “Propiedad2”;
    tw.local.ecmProperties[1].value = valor2;

    Es importante que los nombres de las propiedades coincidan a como estén definidos en Alfresco, sino vas a obtener un error en el servicio indicando que no se encuentra una propiedad.

    Saludos

    Federico Luppi Lunes, 04 Mayo 2015 20:45 Enlace al Comentario
  • Federico Luppi

    Hola Francisco, lo primero que veo en el código que pasaste, es que no está definido el encoding en la linea:

    var bytesValue = new Packages.java.lang.String(value).getBytes();

    Deberías pasar "UTF-8" o bien, "ISO-8859-1" si el archivo que estas convirtiendo en bytes tiene letras acentuadas u otros caracteres especiales. Lo mismo aplica para:

    tw.local.contentStream.content = new Packages.java.lang.String(content64);

    Allí deberías pasar como 2do parámetro el encoding.

    Lo segundo que veo, es que deberías indicar como application/pdf el mimeType, ya que como mencionaste, vas a almacenar archivos PDF.

    Saludos

    Federico Luppi Lunes, 04 Mayo 2015 20:38 Enlace al Comentario
  • Paloma

    como puedo incluirles meta-datos a un documento que subo para alfresco utilizando cmis?

    Paloma Miércoles, 08 Abril 2015 18:43 Enlace al Comentario
  • Fernando Francisco de Oliveira

    Hola, necesito para transferir el contenido de campos, desde una base de datos SQL Server, imagen tipo, que contiene los archivos PDF para la ECM de IBM.

    Traté con el siguiente código, pero después de la grabación de la ECM, el archivo vuelve corrupto.

    ¿Alguna idea de cómo manejar el contenido que no es de tipo String?
    Debido a que los contenidos del campo ya devuelve algo y no cadena binaria.

    var value = tw.local.listaDocsTed[0].DOCUMENTO;

    var bytesValue = new Packages.java.lang.String(value).getBytes();
    //var bytesValue = new Packages.org.apache.commons.codec.binary.Base64.decodeBase64( value );

    var content64 = Packages.org.apache.commons.codec.binary.Base64.encodeBase64(bytesValue);

    tw.local.contentStream = new tw.object.ECMContentStream();
    tw.local.contentStream.contentLength = value.length;
    tw.local.contentStream.mimeType = "application/binary";
    tw.local.contentStream.content = new Packages.java.lang.String(content64);
    tw.local.contentStream.fileName = tw.local.name;

    Fernando Francisco de Oliveira Miércoles, 11 Marzo 2015 16:51 Enlace al Comentario
  • Fernando Francisco de Oliveira

    Hola, necesito para transferir el contenido de campos, desde una base de datos SQL Server, imagen tipo, que contiene los archivos PDF para la ECM de IBM.

    Traté con el siguiente código, pero después de la grabación de la ECM, el archivo vuelve corrupto.

    ¿Alguna idea de cómo manejar el contenido que no es de tipo String?
    Debido a que los contenidos del campo ya devuelve algo y no cadena binaria.

    Fernando Francisco de Oliveira Miércoles, 11 Marzo 2015 16:50 Enlace al Comentario
Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el Código HTML. Tu dirección de correo NO será publicada.

Comuníquese con nosotros telefónicamente +54 011 4382-0878 o vía correo electrónico Esta dirección de correo electrónico está protegida contra spambots. Usted necesita tener Javascript activado para poder verla.