Diferencia entre revisiones de «Integración»

De Thubanpedia
Saltar a: navegación, buscar
(Especificación de servicios genéricos)
(Integración por Servicios Web)
Línea 782: Línea 782:
 
|No
 
|No
 
|
 
|
 +
|-
 +
|}
 +
 +
 +
'''Nombre del Servicio''': getResource
 +
 +
'''Descripción''': Servicio para obtener la imagen de un documento de Thuban.
 +
 +
{| cellpadding="10" cellspacing="0" border="1"
 +
|'''#'''
 +
|'''NOMBRE'''
 +
|'''DESCRIPCIÓN'''
 +
|'''E/S'''
 +
|'''DEFINICIÓN'''
 +
|'''¿OBLIGATORIO?'''
 +
|'''OBSERVACIONES'''
 +
|-
 +
|1
 +
|Authentication
 +
|Entidad compuesta para envío de credenciales de autenticación de usuario.
 +
|E
 +
|String
 +
|No
 +
|Credenciales de Usuario. Obligatorio si no se provee TokenAuthentication
 +
|-
 +
|2
 +
|TokenAuthentication
 +
|Token de autenticación de Thuban para poder utilizar el servicio.
 +
|E
 +
|String
 +
|No
 +
|Token de acceso. Obligatorio si no se provee Authentication.
 +
|-
 +
|3
 +
|documentID
 +
|ID del documento del cual se desea obtener la imagen.
 +
|E
 +
|String
 +
|Sí
 +
|
 +
|-
 +
|4
 +
|codRet
 +
|Devuelve el resultado de la ejecución del servicio.
 +
|S
 +
|String
 +
|Sí
 +
|Valores Posibles: 00, 99
 +
|-
 +
|5
 +
|msg
 +
|Devuelve la descripción del error en caso de codRet = 99
 +
|S
 +
|String
 +
|No
 +
|
 +
|-
 +
|6
 +
|resource
 +
|Imagen del documento indicado en el punto anterior.
 +
|S
 +
|ThubanResource
 +
|No
 +
|No se informa si codRet = 99 o bien, el documento no posee imagen.
 
|-
 
|-
 
|}
 
|}

Revisión de 11:07 22 sep 2015


Integración

Thuban® posee una arquitectura que está orientada a los servicios y se define por interfaces que describen su comportamiento pero no explicitan su mecanismo interno.


Entre sus funciones, Thuban® cuenta con servicios comunes a todo sistema de gestión documental:

- Búsqueda de documentos: permite buscar documentos a través de los campos de indexación.

- Gestión de documentos: permite crear, recuperar, modificar y eliminar documentos.

- Gestión de recursos: permite recuperar, modificar y eliminar recursos asociados a los documentos (archivos).

- Migración: migración transparente de repositorios. Es posible configurar la plataforma para que migre documentos de un sistema a otro a medida que se consultan.

- Reserva de recursos: permite establecer bloqueos de escritura sobre un recurso para evitar problemas de concurrencia al modificar un documento.


La plataforma ofrece formas de integración en distintos niveles que permiten consumir los servicios descriptos de diversas maneras.

Integración Web por URL (Servicios HTTP)

Es el método más rápido de integración porque es el que requiere menos esfuerzo. Los servicios HTTP se crearon para satisfacer la necesidad de integración con otras aplicaciones web que realizan operaciones básicas sobre la plataforma Thuban® y para mostrar resultados contenidos por esas aplicaciones (por ejemplo, en un IFRAME). La aplicación que origina el pedido HTTP envía un conjunto de parámetros vía URL que luego son procesados por Thuban® para realizar las consultas necesarias al repositorio de datos y mostrar los resultados.


Los parámetros sirven para controlar la seguridad ―como por ejemplo, datos del usuario― y accesibilidad a los datos ―información específica del documento que se consulta―; de esta forma, se logra una integración completa, rápida y fácil con cualquier aplicación web que quiera utilizar servicios de gestión documental sin acudir a servicios web.


Este tipo de integración admite dos formas de autenticación:

Autenticación de usuario común: Cuando la aplicación origen invoca la URL de Thuban®, el sistema solicita usuario y contraseña para permitir el acceso. El individuo debe utilizar su propio usuario para acceder a la información.

Autenticación por usuario de aplicación: Como el sistema de origen realiza la autenticación, no se solicita usuario y contraseña al intentar visualizar un documento. Para ello se utiliza un único usuario de aplicación Thuban®. Estos usuarios son especialmente identificados porque realizan controles de seguridad adicionales. Debido a que un mismo usuario de aplicación puede representar un conjunto de usuarios con distintos perfiles de acceso, cada solicitud que se envía de esta manera va acompañada de un hash de seguridad que asegura que fue la aplicación de origen la que realizó la solicitud.


A continuación se describe como utilizar los servicios HTTP para diferentes integraciones.

Servicio de Escaneo vía HTTP

Para invocar la interfaz de escaneo a través de SFE se debe invocar la siguiente URL:

http://<Server>/thuban-web/secure/new.zul?clase=DOC_CLIENTE&scan=true


A continuación se presenta la interfaz de escaneo para la clase documental DOC_CLIENTE. Para habilitar el módulo de escaneo se debe presionar el botón Conectar.

POwerDesk390.png

Para establecer valores para los índices del documento, se debe utilizar una URL estructurada de la siguiente manera:

http://<Server>/thuban-web/secure/new.zul?clase=DOC_CLIENTE&scan=true&indexes=DOC_CLIENTE_CUIT=1234123412345%26DOC_CLIENTE_FECHA=2009-01-01


El parámetro indexes incluye los valores para cada campo, separado por “&”. Debido a que “&” es un carácter reservado, en la confección de una URL se debe escapar utilizando “%” y utilizando el código 26.


Nota: El nombre que se utiliza para cada campo hace referencia al identificador de ese campo en el sistema y no a la etiqueta que muestra la interfaz visual. Por ejemplo, DOC_CLIENTE_CUIT es el nombre del campo y CUIT es la etiqueta que muestra la interfaz de usuario.

Servicio de Búsqueda vía HTTP (Resultado Web)

Para invocar la de búsqueda de documentos a través de HTTP se debe invocar una URL estructurada de la siguiente manera:

http://<Server>/thuban-web/secure/search.zul?clase=DOC_CLIENTE &indexes=DOC_CLIENTE_CUIT=1234123412345%26DOC_CLIENTE_FECHA=2009-01-01&hide=true


El parámetro clase define la clase documental sobre la que se efectúa la búsqueda (es el único parámetro requerido). También se pueden definir los criterios de búsqueda a través de indexes para refinar los resultados. Por último, se puede utilizar hide para ocultar el panel de búsqueda y otorgar más espacio a la tabla de resultados.

Servicio de Búsqueda vía HTTP (Resultado XML)

Para iniciar la búsqueda de documentos a través de HTTP se debe invocar una URL estructurada de la siguiente manera:

http://<server>/thuban-server/http-services/searchService?service=searchService&clase=DOC_CLIENTE&showFields=       DOC_CLIENTE_CUIT%26DOC_CLIENTE_FECHA&includeResources=true&criterias=DOC_CLIENTE_CUIT=20-30081330-6


Esta URL cuenta con cuatro parámetros obligatorios:

clase: La clase documental que se desea buscar.

showFields: Los campos se deben mostrar separados por “&”, pero debido a que "&" es un carácter reservado, en la confección de una URL se debe escapar utilizando “%” y utilizando el código 26.

includeResources: true/false si debe incluir información sobre el archivo físico asociado al documento.

criterias: Los criterios de búsqueda con el siguiente formato CAMPO[operador]VALOR utilizando “&” como separador de criterios. Los operadores posibles son:

o = (Igual)

o <> (Distinto)

o <= (Menor o igual)

o >= (Mayor o igual)

o < (Menor)

o > (Mayor)

o * (Que contenga)


La invocación de esa URL trae como resultado un XML —que se adjunta a continuación— que debe ser procesado por SFE para mostrar la información en su sitio.


<?xml version="1.0" encoding="UTF-8" ?>
<searchResults>
<document id="2009021100000004" docClass="DOC_CLIENTE" name="20303030676">
<field name="DOC_CLIENTE_CUIT" value="20303030676" /> 
<field name="DOC_CLIENTE_FECHA" value="null" /> 
</document>
<resource id="2009021100000004" pages="1" creationDate="2009-02-11" modificationDate="2009-02-11" version="2" /> 
<document id="2009021100000006" docClass="DOC_CLIENTE" name="20303030676">
<field name="DOC_CLIENTE_CUIT" value="20303030676" /> 
<field name="DOC_CLIENTE_FECHA" value="null" /> 
</document>
<resource id="2009021100000006" pages="1" creationDate="2009-02-11" modificationDate="2009-02-11" version="1" /> 
<document id="2009021100000007" docClass="DOC_CLIENTE" name="20303030676">
<field name="DOC_CLIENTE_CUIT" value="20303030676" /> 
<field name="DOC_CLIENTE_FECHA" value="" /> 
</document>
<resource id="2009021100000007" pages="1" creationDate="2009-02-11" modificationDate="2009-02-11" version="1" />
</searchResults>

Servicio de Creación vía HTTP

Para crear un documento a través de servicios HTTP, realice un POST a la siguiente URL:

http://<server>/thuban-web/http-services?service=documentService&clase=<NombreClase>&name=<DocName>&fields=<Campos>&extension=<Extension>


Reemplace la información entre "<>" por los siguientes parámetros:

  • NombreClase: El nombre de la clase documental que desea crear.
  • DocName: El nombre externo del documento.
  • Campos: Un listado de campo-valor siendo “|” (pipe) el separador entre pares e “=” (igual) el separador entre campo y valor. El nombre del campo corresponde con el ID del campo en Thuban Admin. Por ejemplo: NRO_DOC=12121212|ESTADO=APROBADO
  • Extensión: La extensión del archivo que desea subir.


El cuerpo del mensaje debe contener el archivo a subir. El mime type del cuerpo debe ser “application/octet-stream”. A continuación puede ver un ejemplo de uso del servicio para la herramienta SOAPUI.

 <?xml version="1.0" encoding="UTF-8" ?> 
    <con:soapui-project name="Thuban" resourceRoot="${projectDir}" soapui-version="4.0.0" abortOnError="false" runType="SEQUENTIAL" xmlns:con="http://eviware.com/soapui/config">
    <con:settings /> 
    <con:interface xsi:type="con:RestService" wadlVersion="http://wadl.dev.java.net/2009/02" name="Create Document" type="rest" basePath="/thuban-web/http-services"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <con:settings /> 
    <con:definitionCache type="TEXT" rootPart="" /> 
    <con:endpoints>
    <con:endpoint>http://cairo:9669</con:endpoint> 
    </con:endpoints>
    <con:resource name="Create Documento Resource" path="">
    <con:settings /> 
    <con:parameters /> 
    <con:method name="Method 1" method="POST">
    <con:settings /> 
    <con:parameters>
    <con:parameter>
    <con:name>service</con:name> 
    <con:value>documentService</con:value> 
    <con:style>QUERY</con:style> 
    <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> 
    <con:default>documentService</con:default> 
    <con:path xsi:nil="true" /> 
    <con:description xsi:nil="true" /> 
    </con:parameter>
    <con:parameter>
    <con:name>fields</con:name> 
    <con:value>TEXTO1_6_0DEV3=TEST SERVICE</con:value> 
    <con:style>QUERY</con:style> 
    <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> 
    <con:default>TEXTO1_6_0DEV3=TEST SERVICE</con:default> 
    <con:path xsi:nil="true" /> 
    <con:description xsi:nil="true" /> 
    </con:parameter>
    <con:parameter>
    <con:name>extension</con:name> 
    <con:value>TXT</con:value> 
    <con:style>QUERY</con:style> 
    <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> 
    <con:default>TXT</con:default> 
    <con:path xsi:nil="true" /> 
    <con:description xsi:nil="true" /> 
    </con:parameter>
    <con:parameter>
    <con:name>name</con:name> 
    <con:value>DocPrueba</con:value> 
    <con:style>QUERY</con:style> 
    <con:type xmlns:xs="http://www.w3.org/2001/XMLSchema">xs:string</con:type> 
    <con:default>DocPrueba</con:default> 
    <con:path xsi:nil="true" /> 
    <con:description xsi:nil="true" /> 
    </con:parameter>
    <con:parameter>
    <con:name>clase</con:name> 
    <con:value>6cero4</con:value> 
    <con:style>QUERY</con:style> 
    <con:default>6cero4</con:default> 
    </con:parameter>
    </con:parameters>
    <con:representation type="RESPONSE">
    <con:mediaType>text/html</con:mediaType> 
    <con:status>200</con:status> 
    <con:params /> 
    <con:element>html</con:element> 
    </con:representation>
    <con:representation type="REQUEST">
    <con:mediaType>application/octet-stream</con:mediaType> 
    <con:params /> 
    </con:representation>
    <con:representation type="FAULT">
    <con:mediaType>text/html</con:mediaType> 
    <con:status>500 404</con:status> 
    <con:params /> 
    <con:element>html</con:element> 
    </con:representation>
    <con:representation type="RESPONSE">
    <con:mediaType xsi:nil="true" /> 
    <con:status>200</con:status> 
    <con:params /> 
    <con:element>data</con:element> 
    </con:representation>
    <con:request name="Request 1" mediaType="application/octet-stream" postQueryString="false">
    <con:settings>
    <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><entry key="Authorization" value="Basic YWRtaW46" xmlns="http://eviware.com/soapui/config"/></con:setting> 
    </con:settings>
    <con:endpoint>http://cairo:9669</con:endpoint> 
    <con:request>HOLA ARCHIVO</con:request> 
    <con:credentials>
    <con:username /> 
    <con:password /> 
    <con:domain /> 
    </con:credentials>
    <con:jmsConfig JMSDeliveryMode="PERSISTENT" /> 
    <con:jmsPropertyConfig /> 
    <con:parameters>
    <con:entry key="extension" value="TXT" /> 
    <con:entry key="name" value="DocPrueba" /> 
    </con:parameters>
    </con:request>
    </con:method>
    </con:resource>
    </con:interface>
    <con:endpointStrategy xsi:type="con:DefaultEndpointStrategy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <con:endpoint mode="COMPLEMENT" username="admin" domain="">http://cairo:9669</con:endpoint> 
    </con:endpointStrategy>
    <con:properties /> 
    <con:wssContainer /> 
    <con:sensitiveInformation /> 
    </con:soapui-project>


Servicio de creación de documentos en código Java

Crea el documento, indexa los campos indicados en la URL y le adjunta el recurso mencionado. Si no se especifica un NAME y EXTENSIÓN, se crea el documento sin imagen.

public void testCreateDocumentHttpSerive() throws HttpException, IOException {
   HttpClient client= new HttpClient();
   HttpMethodParams params= new HttpMethodParams();    
   PostMethod postMethod= new PostMethod("http://SERVER:PUERTO/thuban-server/http-services    service=DocumentService&clase=NOMBRE%20CLASE%20DOCUMENTAL&fields=CAMPO=VALOR%7CCAMPO2=VALOR2&name=NOMBREDELDOCUMENTO&extension=TIF");
   client.getState().setCredentials(new AuthScope("SERVER", PUERTO, "ThubanRealm"),
               new UsernamePasswordCredentials("USUARIO", "PASSWORD"));  
   RequestEntity entity = new FileRequestEntity(new File("UBICACIÓN DEL ARCHIVO FÍSICO"), "application/stream; charset=ISO-8859-1");
   postMethod.setRequestEntity(entity);
   List authPrefs = new ArrayList(2);
   authPrefs.add(AuthPolicy.BASIC);
   authPrefs.add(AuthPolicy.DIGEST);
   client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs);
   client.getParams().setAuthenticationPreemptive(true);
   postMethod.setDoAuthentication(true);
    postMethod.setParams(params);
   System.out.println(postMethod.getQueryString());
   try {
       int result = client.executeMethod(postMethod);
       // Display status code
       System.out.println("Response status code: " + result);
       System.out.println(postMethod.getResponseBodyAsString());
       assertEquals(result, 200);
   } finally {
       postMethod.releaseConnection();
   }
}

Servicio de Visualización vía HTTP

Para visualizar un documento a través de HTTP se debe invocar una URL que tenga la siguiente estructura:

http://<Server>/thuban-web/secure/display.zul?id=2009021100000004

Servicio de actualización de documentos

  • Para actualizar sólo los valores de los campos, invoque la siguiente URL:
http://ip:puerto/thuban-web/http-services?service=resourceService&id=INDEX_ITEM_ID&fields=CAMPO=VALOR%7CCAMPO=VALOR


  • Para actualizar los campos y el recurso, debe utilizar un POST para invocar y enviar el inputStream del recurso:
http://ip:puerto/thuban-web/http-services?service=resourceService&id=INDEX_ITEM_ID&fields=CAMPO=VALOR%7CCAMPO=VALOR&extension=Extension


  • Para actualizar sólo el recurso asociado, el stream del recurso debe venir por POST. No es recomendable ya que utiliza métodos que están deprecados.
 http://ip:puerto/thuban-web/http-services?service=resourceService&method=updateresource&id=INDEX_ITEM_ID&path=RutaDeSalida

Servicio de actualización de campos en código Java

Permite actualizar los campos de un documento existente. Si especifica la extensión y se pasa el stream de la imagen (ver ejemplo), se actualizan los campos y la imagen del documento indicado por INDEX_ITEM_ID.

public void testUpdateDocumentHttpSerive() throws HttpException, IOException {
   HttpClient client= new HttpClient();
   HttpMethodParams params= new HttpMethodParams();
          
   PostMethod postMethod= new PostMethod("http://SERVER:PUERTO/thuban-server/http-services?service=resourceService&id=INDEX_ITEM_ID&fields=CAMPO=VALOR%7CCAMPO2=VALOR2&extension=TIF");

   client.getState().setCredentials(new AuthScope("SERVER", PUERTO, "ThubanRealm"),
               new UsernamePasswordCredentials("USUARIO", "PASSWORD"));
      
   RequestEntity entity = new FileRequestEntity(new File("UBICACIÓN DEL ARCHIVO FÍSICO"), "application/stream; charset=ISO-8859-1");
   postMethod.setRequestEntity(entity);
          
   List authPrefs = new ArrayList(2);
   authPrefs.add(AuthPolicy.BASIC);
   authPrefs.add(AuthPolicy.DIGEST);
   client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs);
   client.getParams().setAuthenticationPreemptive(true);
   postMethod.setDoAuthentication(true);

   postMethod.setParams(params);
   System.out.println(postMethod.getQueryString());
   
   try {
       int result = client.executeMethod(postMethod);
          
       // Display status code
       System.out.println("Response status code: " + result);
       System.out.println(postMethod.getResponseBodyAsString());
          
       assertEquals(result, 200);
   } finally {
       postMethod.releaseConnection();
   }
}

Servicio de actualización de un recurso asociado en código Java

Permite actualizar el recurso asociado de un documento. Como utiliza un servicio deprecado, no es recomendado.

public void testUpdateResourceHttpSerive() throws HttpException, IOException {
   HttpClient client= new HttpClient();
   HttpMethodParams params= new HttpMethodParams();
          
   PostMethod postMethod= new PostMethod("http://SERVER:PUERTO/thuban-server/http-services?service=resourceService&method=updateresource&id=INDEX_ITEM_ID&path=RUTADESALIDA");

   client.getState().setCredentials(new AuthScope("SERVER", PUERTO, "ThubanRealm"),
               new UsernamePasswordCredentials("USUARIO", "PASSWORD"));
      
   RequestEntity entity = new FileRequestEntity(new File("UBICACIÓN DEL ARCHIVO FÍSICO"), "application/stream; charset=ISO-8859-1");
   postMethod.setRequestEntity(entity);
          
   List authPrefs = new ArrayList(2);
   authPrefs.add(AuthPolicy.BASIC);
   authPrefs.add(AuthPolicy.DIGEST);
   client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs);
   client.getParams().setAuthenticationPreemptive(true);
   postMethod.setDoAuthentication(true);

   postMethod.setParams(params);
   System.out.println(postMethod.getQueryString());
   
   try {
       int result = client.executeMethod(postMethod);
          
       // Display status code
       System.out.println("Response status code: " + result);
       System.out.println(postMethod.getResponseBodyAsString());
          
       assertEquals(result, 200);
   } finally {
       postMethod.releaseConnection();
   }
}

Servicio para obtener el recurso asociado en código Java

Permite obtener el recurso asociado de un documento.

public void testGetResourceHttpSerive() throws HttpException, IOException {
   HttpClient client= new HttpClient();
   HttpMethodParams params= new HttpMethodParams();
          
   GetMethod getMethod= new GetMethod("http://SERVER:PUERTO/thuban-server/http-services?service=resourceService&method=getresource&id=INDEX_ITEM_ID");

   client.getState().setCredentials(new AuthScope("SERVER", PUERTO, "ThubanRealm"),
               new UsernamePasswordCredentials("USUARIO", "PASSWORD"));
             
   List authPrefs = new ArrayList(2);
   authPrefs.add(AuthPolicy.BASIC);
   authPrefs.add(AuthPolicy.DIGEST);
   client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs);
   client.getParams().setAuthenticationPreemptive(true);
   getMethod.setDoAuthentication(true);

   getMethod.setParams(params);
   System.out.println(getMethod.getQueryString());
   
   try {
       int result = client.executeMethod(getMethod);
       FileOutputStream fos = new FileOutputStream("URL DEL ARCHIVO DE SALIDA");
       fos.write(getMethod.getResponseBody());
       fos.flush();
       fos.close();
       
       // Display status code
       System.out.println("Response status code: " + result);
       System.out.println(getMethod.getResponseBodyAsString());
          
       assertEquals(result, 200);
   } finally {
       getMethod.releaseConnection();
   }
}

Integración por Servicios Web

La integración mediante servicios web permite que otras aplicaciones —no necesariamente desarrolladas en Java— puedan obtener acceso a recursos de Thuban® de manera uniforme. Por cuestiones de rendimiento, los servicios web cuentan con una interfaz de comunicación simplificada pero totalmente funcional.

Los servicios web provistos por la aplicación se encuentran en el paquete Server. Si se ingresa la siguiente URL es posible verificar el funcionamiento de los servicios:

http://<server-name>:<port>/thuban-server/services


Si además se ingresa el nombre de un servicio específico, se puede verificar que funcione correctamente.

http://<server-name>:<port>/thuban-server/services/ThubanResourceService 


Si se utiliza el parámetro “?wsdl “ se puede consultar el WSDL asociado al servicio.

http://<server-name>:<port>/thuban-server/services/ThubanResourceService?wsdl

Especificación de servicios genéricos

Nombre del Servicio: createDocument

Descripción: Servicio genérico para crear documentos en Thuban.

# NOMBRE DESCRIPCIÓN E/S DEFINICIÓN ¿OBLIGATORIO? OBSERVACIONES
1 Authentication Entidad compuesta para envio de credenciales de autenticación de usuario. E String No Credenciales de Usuario. Obligatorio si no se provee TokenAuthentication
2 TokenAuthentication Token de autenticación de Thuban para poder utilizar el servicio. E String No Token de acceso. Obligatorio si no se provee Authentication.
3 documentClass ID de la clase documental a la cual se le quiere crear un documento. E String
4 fields Lista de indices con los que se creará el documento E List<DataDescriptor> Se deben de informar al menos los campos obligatorios.
5 resource Imagen del nuevo documento. E ThubanResource No
6 codRet Devuelve el resultado de la ejecución del servicio S String Valores Posibles: 00, 99
7 msg Devuelve la descripción del error en caso de codRet = 99 S String No
8 documentID ID del documento creado. S String No No se informa en caso de codRet 99


Nombre del Servicio: deleteDocument

Descripción: Servicio genérico para eliminar documentos en Thuban.

# NOMBRE DESCRIPCIÓN E/S DEFINICIÓN ¿OBLIGATORIO? OBSERVACIONES
1 Authentication Entidad compuesta para envio de credenciales de autenticación de usuario. E String No Credenciales de Usuario. Obligatorio si no se provee TokenAuthentication
2 TokenAuthentication Token de autenticación de Thuban para poder utilizar el servicio. E String No Token de acceso. Obligatorio si no se provee Authentication.
3 documentID Imagen del nuevo documento. E ThubanResource
4 codRet Devuelve el resultado de la ejecución del servicio S String Valores Posibles: 00, 99
5 msg Devuelve la descripción del error en caso de codRet = 99 S String No


Nombre del Servicio: deleteResource

Descripción: Servicio genérico para eliminar la imagen asociada a un documento en Thuban.

# NOMBRE DESCRIPCIÓN E/S DEFINICIÓN ¿OBLIGATORIO? OBSERVACIONES
1 Authentication Entidad compuesta para envío de credenciales de autenticación de usuario. E String No Credenciales de Usuario. Obligatorio si no se provee TokenAuthentication
2 TokenAuthentication Token de autenticación de Thuban para poder utilizar el servicio. E String No Token de acceso. Obligatorio si no se provee Authentication.
3 documentID Imagen del nuevo documento. E ThubanResource
4 codRet Devuelve el resultado de la ejecución del servicio S String Valores Posibles: 00, 99
5 msg Devuelve la descripción del error en caso de codRet = 99 S String No


Nombre del Servicio: executeStoredProcedure

Descripción: Servicio genérico para ejecutar Stored Procedures de la base de Thuban.

# NOMBRE DESCRIPCIÓN E/S DEFINICIÓN ¿OBLIGATORIO? OBSERVACIONES
1 Authentication Entidad compuesta para envío de credenciales de autenticación de usuario. E String No Credenciales de Usuario. Obligatorio si no se provee TokenAuthentication
2 TokenAuthentication Token de autenticación de Thuban para poder utilizar el servicio. E String No Token de acceso. Obligatorio si no se provee Authentication.
3 spName Nombre del SP que va a ejecutarse. E String
4 inputParamsDef Lista de entidades complejas para la definición de los parámetros que recibe el SP. inputParamsDef No Es obligatorio informarlos si se definieron parámetros en el inputParamsDef.
5 inputParamsValues Lista de entidades complejas para indicar los valores que deben tomar los parámetros definidos en inputParamsDef E DataDescriptor No Es obligatorio informarlos si se definieron parámetros en el inputParamsDef.
6 codRet Devuelve el resultado de la ejecución del servicio. S String Valores Posibles: 00, 99
7 msg Devuelve la descripción del error en caso de codRet = 99 S String No
8 result Lista de entidades complejas que contienen los resultados de la ejecución del SP S DataDescriptor No No se informa en caso de codRet 99


Nombre del Servicio: getDocumentClassFields

Descripción: Servicio para obtener la especificación de campos de una clase documental para un usuario.

# NOMBRE DESCRIPCIÓN E/S DEFINICIÓN ¿OBLIGATORIO? OBSERVACIONES
1 Authentication Entidad compuesta para envío de credenciales de autenticación de usuario. E String No Credenciales de Usuario. Obligatorio si no se provee TokenAuthentication
2 TokenAuthentication Token de autenticación de Thuban para poder utilizar el servicio. E String No Token de acceso. Obligatorio si no se provee Authentication.
3 documentClass ID de clase documental sobre la cuál se desea consultar. E String
4 forUser ID del usuario para el cuál se realiza la consulta. Debe ser un usuario existente en Thuban. String
5 codRet Devuelve el resultado de la ejecución del servicio. S String Valores Posibles: 00, 99
6 msg Devuelve la descripción del error en caso de codRet = 99 S String No
7 classFields Listado de los campos de la clase documental filtrados por privilegios del usuario infromado en el campo forUser S List<ThubanField> No


Nombre del Servicio: getResource

Descripción: Servicio para obtener la imagen de un documento de Thuban.

# NOMBRE DESCRIPCIÓN E/S DEFINICIÓN ¿OBLIGATORIO? OBSERVACIONES
1 Authentication Entidad compuesta para envío de credenciales de autenticación de usuario. E String No Credenciales de Usuario. Obligatorio si no se provee TokenAuthentication
2 TokenAuthentication Token de autenticación de Thuban para poder utilizar el servicio. E String No Token de acceso. Obligatorio si no se provee Authentication.
3 documentID ID del documento del cual se desea obtener la imagen. E String
4 codRet Devuelve el resultado de la ejecución del servicio. S String Valores Posibles: 00, 99
5 msg Devuelve la descripción del error en caso de codRet = 99 S String No
6 resource Imagen del documento indicado en el punto anterior. S ThubanResource No No se informa si codRet = 99 o bien, el documento no posee imagen.

Integración de Front End (Thuban® Development Kit):

La plataforma cuenta con un conjunto de herramientas que permiten integrar componentes de presentación y lógica de negocio:Thuban® Development Kit.

Este paquete cuenta con componentes de presentación desarrollados en las siguientes tecnologías:


- Java Swing: Componente de visualización y manipulación de imágenes.

- Microsoft ActiveX: Componente de visualización y manipulación de imágenes.

- Potix ZK: Componente de búsqueda, visualización y manipulación de documentos.

Integración de Back End (Conectores)

Como se mencionó anteriormente, Thuban® es un gestor de contenidos almacenados en otros sistemas de EDM (Enterprise Document Management). La capa de servicios posee una subcapa denominada Service Locator que le permite invocar dinámicamente distintos conectores para obtener la información de los documentos.

Es responsabilidad de cada implementación del conector transformar la información del sistema nativo en la estructura de datos básica previamente definida. Así, si se desea consumir la información almacenada en otros sistemas desde Thuban®, sólo es necesario utilizar los servicios que se deseen utilizar.

Mientras se respete el contrato predefinido, la información puede provenir de N repositorios distintos y el usuario puede manejarlos desde una única herramienta sin tener noción de la complejidad interna que se está operando.

Configuración de conectores

Thuban Core, el componente principal de la arquitectura, define los contratos de servicios, las estructuras de datos básicas y el concepto de Conector.

Los contratos de servicios son interfaces que dictan el comportamiento de los servicios (el “que”) pero no describen de qué manera se lleva a cabo (el “como”). Los servicios definidos por Thuban son servicios propios de todo sistema de gestión documental. Podemos encontrar entre ellos a los servicios de búsqueda, de gestión de documentos, de gestión de carpetas, de workflow, etc. Las estructuras de datos son aquellas entidades que el sistema utiliza para manejar la información (Documento, Clase Documental, Campos, Vistas, Carpetas). De la misma manera que los servicios, solo se definen que datos mínimos deben contener, pero no como los mismos son almacenados.

En Thuban, un conector es el conjunto de implementaciones de los servicios provistos por la solución para un sistema en particular. El conector describe de qué manera esos servicios se implementan internamente (el “ como”). Así el conector Thuban es la implementación propia de los servicios definidos por Thuban Core, pero no la única, pudiéndose construir conectores adicionales para software de terceros. De esta manera, se separa la lógica de implementación de la lógica de negocio y es posible situar a Thuban® como solución de integración de diversos sistemas de gestión de contenidos y/o repositorios de datos.

Para configurar Conectores diríjase a HOW TO: Configuración de Conectores

Migración Transparente de otros Sistemas

El esquema más común de integración es el que se define para la migración transparente de información. Según este esquema, la información asociada con los documentos se va migrando a medida que se realizan sucesivas consultas al recurso asociado. Entonces, la información se muda al nuevo sistema y se elimina del viejo de manera simultánea.

Integración de autenticación y autorización de usuarios

Pre-autenticación por Token

El mecanismo de pre-autenticación se utiliza para integrar el sistema a soluciones donde otro sistema resuelve la autenticación de usuarios. En este caso, para evitar que Thuban® solicite el ingreso de usuario y contraseña al querer acceder a un recurso determinado, se utilizar un Token de acceso brindado por la aplicación para el usuario indicado. Para ello es necesario previo al acceso que un usuario con los privilegios necesarios para generar Token solicite un token de acceso para sí mismo o bien para un tercero. Luego con el Token provisto por Thuban® (cuya cantidad de usos y ventana de caducidad son configurables) se puede acceder a Thuban® simplemente anexando el Token a la URL de acceso o bien a la llamada de WebService.

URL para solicitud de Token:

http://IP:Puerto/thuban-web/http-services?service=adminService&method=createUserToken 


o bien si se desea generar un token para terceros

http://IP:Puerto/thuban-web/http-services?service=adminService&method=createUserTokenForUser&user=USER 


donde:

o IP = IP o ServerName de la instalación de Thuban®.

o Puerto = Puerto donde escucha Thuban®

o USER = ID de Usuario para el que se desea generar un token de acceso. Debe se enviado en mayúsculas.


Estas URL solicitaran el ingreso de usuario y contraseña para poder generar el token. Si, en cambio, ya se cuenta con Token de acceso de usuario de aplicación para la generación de Tokens, simplemente modificando la URL agregando al final &token=TOKEN, donde TOKEN es el Token de acceso brindado por Thuban®, se evita el login y se generar el sin ningún paso de autenticación extra.

Entonces, por ejemplo, si se desea generar un token de acceso para el usuario USER1 contando previamente con un token de aplicación y suponiendo que la IP del server es 192.168.0.3 y el puerto 8080 la URL quedaría de la siguiente forma:

http://192.168.0.3:8080/thuban-web/http-services?service=adminService&method=createUserTokenForUser&user=USER1&token=xOir4xDkMmsotVtZI9uLXfgds6Dva%2B%2FO%2F17RXugJyjA%3D


De forma similar se puede lograr esto por código utilizando las interfaces para solicitudes http de cada lenguaje, se adjunta ejemplo en Java.

El Token de acceso generado puede ser utilizado tanto para la invocación a WebServices de la plataforma como para poder acceder a Thuban®, como por ejemplo a un documento especifico de la siguiente forma:

http://192.168.0.3:8080/thuban-web/secure/display.zul?id=idThuban&token=xOir4xDkMmsotVtZI9uLXfgds6Dva%2B%2FO%2F17RXugJyjA%3D

Pre-autenticación (Siteminder, WebSeal)

El mecanismo de pre-autenticación se utiliza para integrar el sistema a soluciones donde otro sistema que actúa de Reversed Proxy (WebSeal, Siteminder,etc) resuelve la autenticación de usuarios. En este caso, cada requerimiento HTTP a Thuban® es interceptada por dicho servidor y si el usuario es válido, reenvía el requerimiento a Thuban® con el nombre de usuario como encabezado HTTP.


Para activar el filtro de pre-autenticación es necesario agregar el siguiente bean en el archivo user-application-context.xml:

<bean id="preAuthenticatedFilter" class="com.latintech.thuban.security.filter.ThubanPreAuthenticatedProcessingFilter"> 
  <property name="authenticationManager" ref="authenticationManager" /> 
  <property name="principalRequestHeader" value="SM_USER"/> 
  <property name="active" value="true"/> 
</bean> 


principalRequestHeader es el nombre del encabezado HTTP donde viaja el nombre del usuario. En SiteMinder se utiliza SM_USER y en WebSeal, IV_USER.

Integración LDAP

La plataforma permite integrarse con LDAP de manera transparente para autenticación y autorización de usuarios. Para ello cuenta con las siguientes características:

1. Login a un dominio LDAP.

2. Creación, actualización y eliminación automática de usuarios.

3. Sincronización de grupos de usuario.


Login a un dominio LDAP

Para habilitar el login integrado con el dominio LDAP es necesario configurar los siguientes parámetros del archivo context.properties:

ldap.host: la URL del servidor LDAP. Por ejemplo: ldap://vmware-2003-2:389

ldap.base: El nombre base del dominio. Por ejemplo: dc\=lat,dc\=ar. En este caso utilizamos "\" para escapar el carácter "=".


Además, se debe configurar en el archivo security.properties:

ldap.root.username: Usuario de LDAP utilizado para realizar el login contra el dominio. En caso de que se utilicen las características mencionadas anteriormente, el usuario también consultará los atributos de usuario y membresía de grupos para realizar las asignaciones correspondientes.

ldap.root.password: Password del Usuario LDAP.


Creación, actualización y eliminación automática de usuarios

Para habilitar la creación, actualización y eliminación automática de usuarios es necesario establecer el parámetro ldap.enableUserSync= true en el archivo context.properties. De esta manera, cuando un usuario que no se encuentra registrado en Thuban® realice un login contra el mismo (desde cualquiera de sus aplicaciones), si el usuario existe en el dominio, será creado en el sistema junto con la información asociada (nombre, apellido, email, sector, etc).


Además del parámetro que mencionamos anteriormente, es necesario configurar los siguientes parámetros en el mismo archivo context.properties :

ldap.name: Con el nombre del dominio al cual se conectan los usuarios.

Idap.user.attributeId: El atributo LDAP que identifica el nombre de login del usuario. En active directory, el campo es sAMAccountName.

ldap.user.attributeName: El atributo LDAP que identifica el nombre del usuario. En active directory, el campo es name.

ldap.user.attributeDistinguishedName: El atributo LDAP que identifica unívocamente el usuario. En active directory, el campo es distinguishedName.

ldap.user.attributeMemberOf: El atributo LDAP utilizado para relacionar usuarios con grupos. En active directory, el campo es memberOf.

ldap.user.attributeEmail: El atributo LDAP utilizado para almacenar la dirección de correo electrónico de la persona. Este campo no es obligatorio para que la integración funcione.

ldap.user.attributeArea: El atributo LDAP utilizado para almacenar el sector al que pertenece la persona. Este campo no es obligatorio para que la integración funcione.


De la misma manera que la creación, la actualización de datos del usuario y eliminación (deshabilitado) se realiza cada vez que el usuario ingresa en cualquiera de las aplicaciones.


Sincronización de grupos de usuario

La sincronización de grupos permite que la pertenencia de usuarios a grupos (perfiles de Thuban®) se realice automáticamente en base a los grupos a los cuales se encuentra asignado el usuario en LDAP. Cuando el usuario realiza un login a cualquiera de las aplicaciones, el sistema recupera los grupos a los cuales pertenece en LDAP y los sincroniza contra los grupos que tiene asignados en Thuban® (se puede modificar la asignación de grupos en Thuban® pero el LDAP es siempre de sólo lectura). Para ello, se utiliza un grupo en LDAP que identificará todos los grupos de LDAP que deben sincronizarse automáticamente.

Además, cada grupo de Thuban® debe estar marcado como grupo de active directory en Thuban® Admin. Los grupos tanto de LDAP como de Thuban® que no estén marcados de esta manera no serán tenidos en cuenta por esta funcionalidad. Para habilitar el login integrado con el dominio LDAP es necesario configurar los siguientes parámetros del archivo context.properties:


ldap.enableGroupSync: Establecer el valor true.

ldap.rootGroup: Nombre del grupo raíz de LDAP al cual se agregan los grupos que deben sincronizarse.

Integración CAS

La plataforma permite integrarse con CAS de manera transparente para autenticación de usuarios. Se deben llevar a cabo los siguientes pasos:


1. Configurar en context.properties las URLs de los servicios y las URLs del servidor CAS.

2. Agregar la configuración de CAS al archivo user-application-context.xml.


Configuración de context.properties

Para habilitar el login integrado con CAS es necesario configurar los siguientes parámetros del archivo context.properties:


- cas.thubanweb.service: la URL del servicio de Thuban® Power Desk. Por lo general: http(s)://<server>:<port>/<Contexto>/j_spring_cas_security_check

Ejemplo: https://server:8443/PowerDesk/j_spring_cas_security_check 


- cas.thubanserver.service: la URL del servicio de Thuban® Server. Por lo general: http(s)://<server>:<port>/<Contexto>/j_spring_cas_security_check

Ejemplo: https://server:8443/Server/j_spring_cas_security_check 


- cas.server: la URL del servidor CAS.

Ejemplo: https://localhost:8443/cas-server-webapp-3.3.1/


- cas.server.login: la URL de login del servidor CAS.

Ejemplo: https://localhost:8443/cas-server-webapp-3.3.1/login

Agregar la configuración de CAS al archivo user-application-context.xml

Para agregar la configuración de CAS sólo es necesario utilizar el siguiente import y ubicar el archivo cas-integration.xml en la carpeta de contexto.

<import resource="file:${thuban.context}cas-integration.xml"/>


El contenido del archivo CAS es el siguiente:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:aop="http://www.springframework.org/schema/aop"		
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
  <bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource"> <value> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter,casSingleSignOutFilter,casProcessingFilter,securityContextHolderAwareRequestFilter,exceptionTranslationFilter,zkEventExceptionFilter,filterInvocationInterceptor </value> </property> </bean> 
<bean id="exceptionTranslationFilter" class="org.springframework.security.ui.ExceptionTranslationFilter"> <property name="authenticationEntryPoint"> <bean id="casProcessingFilterEntryPoint" class="org.springframework.security.ui.cas.CasProcessingFilterEntryPoint">
                                       <property name="loginUrl" value="${cas.server.login}"/>
                                       <property name="serviceProperties" ref="serviceProperties"/>
</bean> </property> </bean> 
  <bean id="casAuthenticationProvider" class="org.springframework.security.providers.cas.CasAuthenticationProvider">
      <property name="userDetailsService" ref="userDetailsService"/>
      <property name="serviceProperties" ref="serviceProperties"/>
      <property name="ticketValidator">
          <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
              <constructor-arg index="0" value="${cas.server}"/>
          </bean>
      </property>
      <property name="key" value="my_password_for_this_auth_provider_only"/>
  </bean>
<bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager"> <property name="providers"> <list> <ref local="casAuthenticationProvider"/> </list> </property>   </bean> 
  <bean id="casSingleSignOutFilter" class="org.jasig.cas.client.session.SingleSignOutFilter"/>
   <bean id="casProcessingFilter" class="org.springframework.security.ui.cas.CasProcessingFilter">
      <property name="authenticationManager" ref="authenticationManager"/>
      <property name="authenticationFailureUrl" value="/403.jsp"/>
      <property name="alwaysUseDefaultTargetUrl" value="false"/>
      <property name="defaultTargetUrl" value="/"/>
  </bean>
    <bean id="filterInvocationInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager"/> <property name="accessDecisionManager"> <bean class="org.springframework.security.vote.AffirmativeBased"> <property name="allowIfAllAbstainDecisions" value="false"/> <property name="decisionVoters"> <list> <bean class="org.springframework.security.vote.AuthenticatedVoter"/> </list> </property> </bean>  </property> <property name="objectDefinitionSource"> <value> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=IS_AUTHENTICATED_REMEMBERED </value> </property> </bean>  </beans>