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

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>rest</em>.

Búsquedas nxlquery via querymodel RESTlet API en Nuxeo

Estoy bastante impresionado con el lenguaje de búsquedas de Nuxeo, el nxlquery, que te proporciona una sintaxis sql para las búsquedas muy pero que muy cómoda. Se pueden hacer desde la consola de búsqueda avanzada de Nuxeo o bien desde un pequeño script que invoque una URL expuesta en Nuxeo.

Una pequeña muestra de las consultas que se pueden hacer son las siguientes:

SELECT * FROM Document WHERE dc:title LIKE 'testfile%' ORDER BY dc:description
SELECT * FROM Document WHERE dc:title LIKE 'testfile%' AND ecm:path STARTSWITH '/'
SELECT * FROM Document WHERE dc:created >= DATE '2007-02-15'
SELECT * FROM Document WHERE ecm:primaryType IN ('Folder', 'Note', 'MyType')


y con acceso a todos los tipos de contenido y metadatos personalizados. En esta página del wiki de Nuxeo teneis algunas búsquedas posibles con nxlquery.

http://www.nuxeo.org/xwiki/bin/view/FAQ/NXQLReference

Además es posible exponer una consulta con el RESTLET de búsqueda de Nuxeo. Para ello en el archivo de configuración $JBOSS/server/default/deploy/nuxeo.ear/config/querymodel-contrib.xml

<?xml version="1.0"?>
<component name="org.nuxeo.project.sample.querymodels">

  <extension
    target="org.nuxeo.ecm.core.search.api.client.querymodel.QueryModelService"
    point="model">

    <queryModel name="CUSTOM_TYPE_ONDOMAIN_SEARCH">
      <pattern>
        SELECT * FROM Document WHERE ecm:PrimaryType = ? AND ecm:path STARTSWITH ?        
        AND ecm:isCheckedInVersion = 0 AND ecm:mixinType != 'HiddenInNavigation'
        AND ecm:currentLifeCycleState != 'deleted'
      </pattern>
      <sortable value="true" defaultSortColumn="dc:title" defaultSortAscending="true" />
      <max>100</max>
  </queryModel>

</extension>
</component>


Fijaros que la búsqueda definida va a buscar documentos de un tipo específico por debajo de un path, de modo que va a requerir dos parámetros QP1, y QP2. Reiniciamos el servidor y ponemos en el navegador o invocamos desde una aplicación:

http://nuxeo.zylk.net:8080/nuxeo/restAPI/execQueryModel/CUSTOM_TYPE_ONDOMAIN_SEARCH?QP1=acta&QP2=/default-domain/sections&format=XML&colums=dublincore.title,dublincore.description,mytype.myproperty,url

obteniendo un xml con la información de la búsqueda solicitada. De este modo, podemos consumir búsquedas sobre tipos de contenidos y metadatos personalizados en Nuxeo desde aplicaciones via REST y obtenerlas en formatos como xml,json,rss o atom. Con el parseo de la info correspondiente voy a acabar programando en fortran

http://doc.nuxeo.org/5.1/books/nuxeo-book/html/nuxeo-restlet-api.html
 

Usando el API Web Script de Alfresco

Alfresco dispone de diferentes API's para el desarrollo de extensiones y componentes como Alfresco Foundation API, los Servicios Web, los Web Scripts, o la interfaz JCR de Alfresco. Los Web Scripts proporcionan una API de servicios de contenido accesibles via REST (url) en Alfresco, exponiendo el repositorio para la gestión de documentos y contenidos web, y proporcionando medios de búsqueda personalizados, favoreciendo la interoperabilidad de clientes externos con el gestor documental. Un ejemplo de esto son los conectores de Open Office o MS-Office para Alfresco, que en su parte de servidor utilizan Web Scripts.

Un Web Script esta ligado a un método HTTP y a una URL personalizada con referencias a plantillas Freemaker en el servidor, que nos van a permitir consumir la información en diferentes formatos como HTML, XML, JSON o RSS. En realidad, es más un framework que un API, ya que implementa el patrón MVC (Modelo-Vista-Controlador) basado en Javascript Freemaker y API Foundation. Es decir, vamos a poder consumir recursos documentales desde clientes externos mediante invocaciones via URL a webscripts, que efectuan acciones sobre el repositorio a través de dos APIs, una javascript de servidor que implementa las clases java de Alfresco, o bien a través del API nativo java de Alfresco.


El caso más sencillo es un Web Script que utiliza Javascript Freemaker, entre otras razones porque no se necesitan conocimientos de java, no es necesario compilar ninguna clase ni declarar nada en ningún archivo de contexto, y pueden instalarse de manera dinámica sin reiniciar el servidor ubicando los archivos necesarios en el mismo. Para crear un Web Script necesitamos:

  • Un archivo de descripción de webscript (blogsearch.get.desc.xml)
  • Un template de freemaker (blogsearch.get.html.flt)
  • Un archivo javascript (blogsearch.get.js)

El siguiente script implementa una búsqueda simple via lucene a partir de un término especificado en la url.

El descriptor establece la URL, el formato por defecto de salida (en este ejemplo, es html, pero en general será xml para el consumo externo de recursos documentales), la autenticación requerida (en este caso, de usuario):

blogsearch.get.desc.xml

<webscript>
  <shortname>Search Sample</shortname>
  <description>
    Lucene search sample in Alfresco
  </description>
  <url>/sample/blog/search?q={searchTerm}</url>
  <url>/sample/blog/search.html?q={searchTerm}</url>
  <format default="html">extension</format>
  <authentication>user</authentication>
  <transaction>required</transaction>
</webscript>


Notas:

  • El elemento format especifica como es declarado el tipo de la respuesta en la url. Los valores validos argument (/search?q=tutorial&format=atom), extension: (/search.atom?q=tutorial) o any (cualquiera de las dos formas anteriores). Este será el valor por defecto si el elemento no es especificado.
  • Si no se especifica ningún valor de formato en la URL el valor por defecto es tomado del atributo opcional default. Si este valor no ha sido declarado se asumirá por defecto el formato html.
  • El elemento opcional authentication indica los requerimientos a nivel de autenticación. Los valores validos son none (no se requiere autenticación - por defecto si el elemento no es especificado), guest, user y admin.
  • Los formatos posibles son html, text, xml, atom, rss, json, opensearchdescription, mediawiki y portlet.


El API Javascript implementa la búsqueda via lucene:

blogsearch.get.js

// perform search
var nodes = search.luceneSearch("TEXT:" + args.q);
model.resultset = nodes;


La plantilla de freemaker recoge el resultset y los muestra en html utilizando las variables javascript correspondientes. Para esto es necesario conocer un poquito la sintaxis del lenguaje de plantillas freemaker y las varibles del API de Javascript de Alfresco.

blogsearch.get.html.flt

<html>
  <body>
    <table>

<#list resultset as node>

     <tr>
       <td><img src="${url.context}${node.icon16}"/>
       <td><a href="${url.serviceContext}/api/node/content/${node.nodeRef.storeRef.protocol}/${node.nodeRef.storeRef.identifier}/${node.nodeRef.id}/${node.name?url}">${node.name}</a>
     </tr>

</#list>

    </table>
  </body>
</html>


Estos archivos se disponen en Data Dictionary > Web Scripts, por ejemplo, por debajo de org > alfresco > sample y se instalan a través de la consola de Web Scripts.

http://localhost:8080/alfresco/service/

Refrescamos y voilà, ya hemos creado nuestro primer webscript.

http://localhost:8080/alfresco/service/sample/blog/search?q=alfresco
 


Si en vez de en formato html, lo escribimos en xml en blogsearch.get.xml.ftl (ojo con los convenios), desde un cliente externo podemos parsearlo y mostrarlo convenientemente.

Enlaces:

 

Nuevas funcionalidades para el conector de Sinadura para Alfresco y Nuxeo

Sinadura es una aplicación de escritorio multiplataforma y multilingüe para la firma digital de archivos PDF de la que hemos hablado en numerosas ocasiones como aquí o aquí, y que va camino de la version 3.0, que firmara cualquier tipo de documento.

Hace unas semanas comentabamos que habíamos implementado una integración sencilla via webscript y webservices con el gestor documental Alfresco 3.x, y que cubría acciones sencillas como añadir, actualizar, navegar o descargar documentos. Hemos mejorado y añadido unas nuevas funcionalidades como añadir documentos en un path predeterminado, mover documentos, borrar documentos, crear espacios o realizar búsquedas.

Os dejo algunas capturas de las nuevas funcionalidades. La pantalla de preferencias de Alfresco:

El menú de acciones de Alfresco:

  

También estamos preparando una versión para Nuxeo basado en su API REST, de la que pronto tendreis noticias. Os dejo una captura:

 

Feliz año desde el planeta zylk !!!

Enlaces:

 

Sinadura connector for Nuxeo DM

Sinadura is an open source java-based multiplatform desktop application for signing PDF's, that provides a simple solution for digital signature and electronic invoice processes. This software guarantees the integrity, the identity, and the no repudiation of any PDF document, for example, in payslips, contracts, invoices or certifications.

The legal disquisitions regarding to the storage, custody or preservation of many of these signed documents for companys and public administrations recommend the use of enterprise content management systems such as Alfresco ECM or Nuxeo DM. The ECM systems can help us to manage the full document lifecycle, involving sinadura desktop client in digital signing processes/workflows with this integration. The process of signing is performed on the client side, and therefore, we can use both smartcard (pkcs11) or software certificates (pkcs12) for the common signing features of sinadura (visible stamps, customized background images, TSA timestamps or OCSP validation)

In previous posts (in spanish), we commented the integration of sinadura client with Alfresco ECM repository
, which covered the basic ECM functionality for adding, updating, browsing, downloading and deleting documents from sinadura client. The ECM functionality is now implemented in sinadura client for Nuxeo DM 5.3.x via REST API, including the next repository actions:

 

  • Add to Nuxeo path: This option allows us to add selected PDF documents in sinadura client to a chosen workspace in the Nuxeo repository. The final path  is selected with the help of a sinadura browsing component.
  • Add to Nuxeo default path: The default path is defined with the browsing component in sinadura preferences. Then, the selected pdf's are added directly to this default path.
  • Download from Nuxeo: This option allows us to browse the Nuxeo repository and to download locally a chosen PDF file to sinadura client.
  • Update in Nuxeo: With this option, we can update a file in the repository, which can be previously downloaded from Nuxeo repository (and signed with sinadura).
  • Create Workspaces: We can create new workspaces from sinadura client in the repository.
  • Delete from Nuxeo: We can also delete a document in the repository via this option (always with the necessary permissions).


I let here some of the screenshots of the sinadura connector for Nuxeo. For example, the Nuxeo repository authentication preferences:


 

The default path for adding PDF's in Nuxeo repository is also selected in preferences window:

Updating a signed document in Nuxeo:


We are currently working in sinadura 3.0, which will allow to sign any type of file (not only a PDF file). Please contact us, for more information about the connector, or about digital signing and enterprise content management services.

Liferay portlets for searching, browsing and downloading in Nuxeo

Sometime ago we started to test Nuxeo REST API's from python and java, for example here and here. Last days, Karmele, Gustavo and me developed some Liferay portlets for searching, browsing and downloading documents from Nuxeo DM via its REST API. I put here some details and the screenshots of each portlet.

Portlet 1: Portlet, using browse restlet query for navigating ecm content and proxy-pattern downloading from Liferay portal. The standard browse restlet is used for navigating through workspaces showing the corresponding documents. A proxy-pattern for downloading is used when the Nuxeo server is not available from the outside of your organization, and the portal is used for web layer. In the preferences panel, you must configure the authentication data for the Nuxeo server.

 

The browse portlet for Nuxeo repository:

 

 

The portlet preferences:
 


 

Portlet 2: Portlet for searching full content in Nuxeo repository and downloading from Liferay portal. We customized a Nuxeo restlet query for searching in Nuxeo repository, whose results are shown in a paginated table when many results are obtained. The download is performed by a servlet that consumes the corresponding urls for downloading.
 


 

Portlet 3: Portlet for integrating Nuxeo search services (REST service layer) into the Liferay generic search portlet. This feature is possible using opensearch federated searches in Liferay via Nuxeo REST API services (some time ago commented here). It is also possible to download the documents found in the Nuxeo search.

Mostrando 5 resultados.