[ Blog ]
[ Wiki ]
[ Slideshare ]
[ Twitter ]

Bloggers recientes

Cesar Capillas Mensajes: 110
Estrellas: 7
Fecha: 18/05/13
Gustavo Fernandez Mensajes: 44
Estrellas: 7
Fecha: 10/05/13
Patricia Yagüe Mensajes: 2
Estrellas: 0
Fecha: 2/04/12

Archivo

Tags

noBlogo - El blog de zylk.net

Entradas con etiqueta <em>Portlet</em>.

Snippets for CMIS content viewer portlet, a Liferay plugin to query and render CMIS objects from an Alfresco CMIS repository

Siguiendo con el artíclo que escribió cesar sobre el visualizador de contenidos CMIS usando groovy vamos a exponer dos ejemplos de uso que nos han parecido interesantes.

El primero consiste en mostrar un listado de todos los pdfs de una carpeta del gestor documental. Una lista con su nombre descripción y un enlace para la descarga.

Lo primero que habría que definir es la query CMIS que se va a utlizar

SELECT * FROM cmis:document WHERE cmis:contentStreamMimeType LIKE 'application/pdf'

y lo segundo el script de groovy que se va a encargar de la presentación de los objetos devueltos por la query CMIS

html.append("<table style=\"width: 640px;\">");
  html.append("<tr>");
      html.append("<th style=\"width:5%;\"></th>");
      html.append("<th style=\"width:25%;\">Nombre</th>");
      html.append("<th style=\"width:20%;\">Creado por</th>");
      html.append("<th style=\"width:20%;\">Modificado por</th>");
  html.append("</tr>");

  for (CMISObject doc : listaObjetos) {
    html.append("<tr>");
    html.append("<td><img alt=\"PDF\" src=\"/html/themes/_unstyled/images/file_system/small/pdf.png\" ></td>");
    html.append("<td><a href=\"#\">" + doc.getName() + "</a></td>");
    html.append("<td>" + doc.getCreatedBy() + "</td>");
    html.append("<td>" + doc.getLastModifiedBy() + "</td>");
    //html.append("<td>" + doc.getType().getDescription() + "</td>");
    html.append("</tr>");
  };
 
html.append("</table>");

 

 

 

El segundo ejemplo consiste en lista un conjunto de contenidos custom, es decir en el gestor de contenidos se define un modelo documental por ejemplo una noticia, que tiene una serie de propiedades personalizadas. La idea es presentar una lista de esas noticias mostrando los datos personalizados. Además en se va a usar el sistema variables para las querys de CMIS para ver como un dato de la sesión de liferay se puede usar para filtrar (en tiempo de ejecución) los datos que visualiza el usuario en el portal. En este caso solo se van a mostrar las noticias que el mismo ha creado.

Lo primero que habría que definir es la query CMIS que se va a utlizar

SELECT * FROM zylk-new:noticia WHERE zylk-new:status LIKE 'Published' AND cmis:createdBy LIKE '[$SCREENNAME$]'

y lo segundo el script de groovy que se va a encargar de la presentación de los objetos devueltos por la query CMIS

for (CMISObject obj : listaObjetos) {
    html.append("<h2>" + obj.getProperty("zylk-new:title").getValueAsString() + "</h2>");
    html.append("<br />");
    html.append(obj.getProperty("zylk-new:description").getValueAsString());
    html.append("<br />");
    html.append("<hr />");

};

 

para más información sobre el portlet contacta con nosotros

Portlet de sincronizacion flexible y programada de usuarios de LDAP en comunidades de Liferay Portal EE

Durante los últimos dos meses un equipo mixto de zylk y Bilbomatica ha estado desarrollando, conjuntamente con personal de la UPV/EHU (Gabriel Maqueda y Alberto Soto), un portlet para la sincronización de usuarios en las comunidades de Liferay(version 6 EE). El escenario es el de una organización o universidad con miles de usuarios potenciales, administrados y centralizados en un sistema de directorio activo o LDAP corporativo, que necesita asignar  de una manera flexible, ágil y programada un conjunto de usuarios en las diferentes comunidades de un portal Liferay.

Los requisitos que se pretendía cubrir eran los siguientes:

  1. Poder delegar en los administradores de las comunidades la sincronización de los usuarios que pertenezcan a las mismas, siendo el origen de la sincronización el LDAP corporativo de la UPV/EHU.
  2. Permitir que los administradores de las comunidades puedan, sin tener conocimientos de la estructura del LDAP ni de la sintaxis de las querys, definir filtros para realizar la sincronización de dichos usuarios
  3. Permitir la planificación de las sincronizaciones con periodicidad variable y seleccionable por el propio administrador de la comunidad.
  4. Enviar informes cada vez que se ejecute una sincronización a una lista de usuarios definidos por el propio administrador.
  5. Traducción al euskera, tanto del interfaz como del asistente para las querys del LDAP, así como del informe resultante tras la sincronización de los usuarios de comunidades.

Nos planteamos primero resolver la duda técnica que teníamos antes de empezar el proyecto

  • Usar o no el planificador de tareas que Liferay integra, basado en quartz.

La conclusión fue que se podría hacer uso del planificador de tareas de Liferay con su modelo, lo cual permitía no tener que instanciar dos planificadores y que el propio portal sea capaz de gestionar parte de las tareas de manera transparente. Para ello el porltet se desplegó implementando el scheduler de Liferay con una periodicidad diaria y en la implementación del scheduler es donde se realiza la lógica de qué tareas de sincronización se deben ejecutar cada día.

Una vez decidida la arquitectura de la solución procedimos a su implementación. Desde un punto de vista funcional las características del desarrollo son las siguientes:

  • Altas en comunidad
  • Bajas en comunidad.
  • Importar del LDAP


El portlet permite personalizar los informes de la siguiente forma:

  • Seleccionar el idioma en que se generarán los informes. Los informes se podrán obtener tanto en castellano como en euskera.
  • Seleccionar el momento preciso en el que se va a realizar el informe o informes dependiendo del modo en que este se configure.
  • Obtener informes personalizados atendiendo a características y a valores concretos.
  • Gestionar y añadir destinatarios. Estos destinatarios recibirán los informes a través de su correo electrónico.
  • Enviar el mismo informe a múltiples destinatarios.
  • Seleccionar los datos que mostrará el informe.

En cuanto a la gestión de la expresión de LDAP de la cual se obtienen los usuarios que se van a sincronizar, el portlet dispone de un editor, desde donde el administrador de la comunidad puede seleccionar una característica y un valor. Además el usuario dispone de operadores lógicos ( AND, OR & NOT ), para poder realizar expresiones más complejas.
Cada comunidad dispone de una tarea que puede configurar para la sincronización como se muestra en la siguiente imagen:

 

El portlet está accesible desde el panel de control de cada comunidad, para los usuarios con rol de administrador de la comunidad.

La configuración se realiza desde la siguiente pantalla:

Además se puede definir la query de LDAP que nos devolverá los usuarios que se vayan a sincronizar:

También se pueden gestionar los destinatarios de las notificaciones:

Como temas destacables habría que resaltar:

 

  • La gestión de los atributos del LDAP es fácilmente extendible para que se pueda utilizar en un conjunto amplio de estructuras de LDAP. En el caso de la UPV/EHU el LDAP está basado en atributos, pero se podría usar en una estructura jerárquica. En zylk lo hemos probado con nuestro LDAP con resultados satisfactorios.
  • En una evolución de este desarrollo, se podría ampliar la parte de edición de receptores del informe, de manera que se pudieran añadir nuevos receptores a partir de los usuarios existentes en el portal. Así pues, la selección del idioma del informe se realizaría de manera transparente para el usuario del portlet y a partir de la configuración personal de idioma seleccionada por el usuario.
  • Se intentó crear un hook para que el portlet se integrara como una nueva acción en el portlet de comunidades pero no funcionó correctamente, así que se descartó esa posibilidad. Nos faltó mirar los listas blancas de portlets que se pueden añadir en tiempo de ejecución para ver si esa opción era viable.
Firma digital de PDF con CryptoApplet en la Document Library via Liferay Portlet

Una de las herramientas interesantes de firma digital con la que venimos trabajando desde hace tiempo, en el marco de los proyectos de firma electrónica desde el planeta zylk, es el CryptoApplet, una aplicación java con características de firma avanzada (PDF, CMS/PKCS#7, XadES-X-L en formato Digidoc...) desarrollada en la Universitat Jaume I.

La aplicación (el applet) permite realizar firmas en una aplicación web en el formato definido en la configuración. El applet puede ejecutarse en los sistemas operativos MS Windows y Linux, y con los navegadores IE (via CryptoAPI) o Firefox (via PKCS#11). Esto puede ser extensible a navegadores como Chrome, ya que utilizan las librerías de Firefox (NSS) y a otros sistemas operativos como Mac OS X via OpenSC.

Los procesos de firma digital forman parte de muchas de nuestras aplicaciones cotidianas y se incorporan en diferentes flujos de trabajo de la empresa, integrándose con aplicaciones a medida, con herramientas de planificación de recursos empresariales (ERP), de facturación, o de gestión documental (ECM) en diferentes aproximaciones.

En este artículo, vamos a tratar una aproximación a una solución de almacenamiento de documentos PDF que se firman digitalmente en el repositorio de ficheros de un portal empresarial como Liferay Portal. Hemos implementado un portlet de subida de documentos PDF en una determinada ruta de la DL (Document Library) integrado con el CryptoApplet. Las modificaciones sobre el applet han sido las siguientes:
 

  1. Ampliación del listado de certificados raíces e intermedios para la validación del certificado  con propiedad 'digitalSignature' con el que se firman los PDF.
  2. Desarrollo de otro applet para la selección local del fichero a firmar.
  3. Configuración específica para la imagen que acompaña el PDF firmado.



Os dejo aquí unas capturas del portlet de firma y subida de documentos a la DL:



El CryptoApplet permite configurar los dispositivos hardware para la lectura de certificados tanto de forma automática como manual, en nuestro caso, tarjetas criptográficas controladas mediante PCSC con OpenSC. Permite también la carga manual de dispositivos así como certificados en formato P12.
 



Finamente podemos comprobar la firma del documento subido a la librería de documentos:


Además del portlet de firma de PDF's, hemos implementado otros portlets en Liferay Portal en donde el objeto firmado es un formulario HTML, lo que permite, verificar la identidad de la persona que esta aportando los datos en un formulario de un determinado proceso (por ejemplo, la constancia de una reclamación en una institución, solicitudes de pedidos a terceros... ), y desde el punto de vista del usuario la integridad de los datos del mismo.

En próximos artículos publicaremos una matriz de compatibilidades para el uso del crytoapplet en diferentes sistemas operativos, navegadores y almacenes de llaves (NSS, NSS/Share, Carga directa, CAPI)

En breve habilitaremos una demo para estos componentes en nuestro portal. Para mas información, no dude en contactar con nosotros.

Mostrando 3 resultados.