<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
  <title>zylk.net</title>
  <link rel="alternate" href="" />
  <subtitle>zylk.net</subtitle>
  <entry>
    <title>First steps on a digital signature android app integrated with alfresco</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=186025" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=186025</id>
    <updated>2012-04-03T16:51:32Z</updated>
    <published>2012-04-03T11:16:21Z</published>
    <summary type="html">&lt;p&gt;
	We continue developing features for &lt;a href="http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/signing-pdf-documents-with-sinadura-mobile" target="_blank"&gt;sinadura android client&lt;/a&gt;. Last week we added browsing and downloading documents from an Alfresco repository.&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=6f9bdc03-c046-4711-9d1c-5d5c86c34d5f&amp;amp;groupId=10102&amp;amp;t=1333451840480" style="width: 240px; height: 400px; border-width: 1px; border-style: solid; margin-left: 10px; margin-right: 10px;" /&gt;&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=51d36460-dda9-40e0-94c4-689bc865108c&amp;amp;groupId=10102&amp;amp;t=1333452053573" style="width: 240px; height: 400px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	So now we can, browse repository, download a remote PDF to the mobile client, sign it with our p12 certificate with timestamp, and update the document in the repo.&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=0de4d4e9-78f1-4095-b19a-8a5dd79346e7&amp;amp;groupId=10102&amp;amp;t=1333451840482" style="width: 240px; height: 400px; border-width: 1px; border-style: solid; margin-left: 10px; margin-right: 10px;" /&gt;&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=bcb4c3f7-be5c-4b06-a208-2fc2b47603e5&amp;amp;groupId=10102&amp;amp;t=1333451840484" style="width: 240px; height: 400px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	Another step/part in Alfresco integration is the validation module for checking signatures, that we showed some weeks ago, using Alfresco as a Digital Signature Validation Service.&lt;/p&gt;
&lt;p&gt;
	&lt;span class="Object" id="OBJ_PREFIX_DWT2219"&gt;&lt;a href="../../../web/guest/web-2-0/blog/-/blogs/alfresco-ecm-working-as-a-simple-digital-signing-service" target="_blank"&gt;http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/alfresco-ecm-working-as-a-simple-digital-signing-service&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2012-04-03T11:16:21Z</dc:date>
  </entry>
  <entry>
    <title>Creando y gestionando de manera dinámica propiedades de tipo constraint en Alfresco</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=185960" />
    <author>
      <name>Patricia Yagüe</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=185960</id>
    <updated>2012-04-02T07:29:07Z</updated>
    <published>2012-04-02T06:19:41Z</published>
    <summary type="html">&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%09A%3Alink%20%7B%20so-language%3A%20zxx%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;Bas&amp;aacute;ndonos en este &lt;a href="http://blogs.alfresco.com/wp/jbarmash/2008/08/08/dynamic-data-driven-drop-downs-for-list-properties/"&gt;art&amp;iacute;culo&lt;/a&gt; del blog de Alfresco relativo a propiedades din&amp;aacute;micas en tipos de contenido, hemos desarrollado un sencillo componente para utilizar y gestionar listas din&amp;aacute;micas en uno de nuestros modelos de contenido utilizados en zylk.net.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;En nuestro caso, tenemos un modelo de contenido para gestionar incidencias o tickets, con un tipo base bug:incidencia, del cual tenemos el siguiente extracto:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;type name=&amp;quot;bug:incidencia&amp;quot;&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;title&amp;gt;Incidencia&amp;lt;/title&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;parent&amp;gt;cm:folder&amp;lt;/parent&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;properties&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;property name=&amp;quot;bug:incidencia_asignar&amp;quot;&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;title&amp;gt;Asignar a&amp;lt;/title&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;type&amp;gt;d:text&amp;lt;/type&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;constraints&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;constraint ref=&amp;quot;bug:AsignarIssue&amp;quot; /&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/constraints&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; &amp;lt;property name=&amp;quot;bug:incidencia_estado&amp;quot;&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;title&amp;gt;Estado&amp;lt;/title&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;type&amp;gt;d:text&amp;lt;/type&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;constraints&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;constraint ref=&amp;quot;bug:EstadosIssue&amp;quot; /&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/constraints&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt; &amp;lt;property name=&amp;quot;bug:incidencia_prioridad&amp;quot;&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;title&amp;gt;Prioridad&amp;lt;/title&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;type&amp;gt;d:text&amp;lt;/type&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;constraints&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;constraint ref=&amp;quot;bug:PrioridadesIssue&amp;quot; /&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/constraints&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;/type&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;Para las tres propiedades anteriores se utilizan un conjunto de constrains que se definen de manera dinamica a continuaci&amp;oacute;n, a partir de una query de lucene sobre el repositorio. Es decir, gestionamos las propiedades en el repositorio (y no en un archivo xml del modelo), y las consumimos mediante querys de lucene. &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;Para asignar incidencia a usuario (person):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp;&amp;lt;constraint name=&amp;quot;bug:AsignarIssue&amp;quot;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type=&amp;quot;zylk.net.constraints.SearchBasedListConstraint&amp;quot; &amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;parameter name=&amp;quot;query&amp;quot;&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;value&amp;gt;TYPE:&amp;quot;{http://www.alfresco.org/model/content/1.0}person&amp;quot;&amp;lt;/value&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/parameter&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp;&amp;lt;/constraint&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&lt;span style="font-size: medium; font-family: 'Liberation Serif', serif; "&gt;Para definir los estados de la incidencia (categor&amp;iacute;as):&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;constraint name=&amp;quot;bug:EstadosIssue&amp;quot;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type=&amp;quot;zylk.net.constraints.SearchBasedListConstraint&amp;quot; &amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;parameter name=&amp;quot;query&amp;quot;&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;value&amp;gt;PATH:&amp;quot;/cm:generalclassifiable/cm:Aplicaciones/cm:Bugtracker/cm:Estados//.&amp;quot;&amp;lt;/value&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/parameter&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp;&amp;lt;/constraint&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;Para establecer la prioridad de la incidencia (folders):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;constraint name=&amp;quot;bug:PrioridadesIssue&amp;quot;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type=&amp;quot;zylk.net.constraints.SearchBasedListConstraint&amp;quot; &amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;parameter name=&amp;quot;query&amp;quot;&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;value&amp;gt;PATH:&amp;quot;/app:company_home/app:dictionary/cm:Aplicaciones/cm:Bugtracker/cm:Prioridades//.&amp;quot;&amp;lt;/value&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/parameter&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;/constraint&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;El caso de uso es el siguiente:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0cm;"&gt;
			&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;Tenemos un tipo de contenido con una propiedad definida que es variable &lt;/font&gt;&lt;/font&gt;&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;&lt;b&gt;bug:EstadosIssue &lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;y necesita de una administraci&amp;oacute;n propia, porque el administrador requiere a&amp;ntilde;adir nuevos valores a esa constraint con cierta frecuencia. Esta problem&amp;aacute;tica se puede gestionar con categorias en Alfresco (pero solo el administrador puede acceder a trav&amp;eacute;s de las interfaces de Alfresco Explorer y Share).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0cm;"&gt;
			&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;Tenemos un tipo de contenido con una propiedad definida que es variable &lt;/font&gt;&lt;/font&gt;&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;&lt;b&gt;bug:PrioridadesIssue &lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;y necesita de una administraci&amp;oacute;n propia y donde no s&amp;oacute;lo por los administradores sino un grupo de usuarios va a a&amp;ntilde;adir valores con cierta frecuencia. Esta problem&amp;aacute;tica se puede gestionar con una estructura de carpetas virtual creada por ejemplo en Data Dictionary (con permisos de edicion para el conjunto de usuarios editores)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%09A%3Alink%20%7B%20so-language%3A%20zxx%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;&lt;span style="font-weight: normal"&gt;La clase que implementar&amp;aacute; la carga de valores extiende de &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;&lt;span style="font-weight: normal"&gt;ListOfValuesConstraint (ver &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;a href="http://wiki.alfresco.com/wiki/Content_Model_Constraints#Writing_Further_Constraints"&gt;&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;&lt;span style="font-weight: normal"&gt;wiki&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt;&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;&lt;span style="font-weight: normal"&gt;)&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;
&lt;strong&gt;public class SearchBasedListConstraint extends ListOfValuesConstraint implements Serializable&lt;/strong&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm"&gt;
	&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;haremos uso del ServiceRegistry para poder llamar a los servicios que necesitamos (SearchService, NodeService...)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;
&lt;strong&gt;private static ServiceRegistry registry;
public ServiceRegistry getServiceRegistry()
{
return registry;
}
public void setServiceRegistry(ServiceRegistry registry)
{
SearchBasedListConstraint.registry = registry;
}

&lt;/strong&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm"&gt;
	&lt;span style="font-family: 'times new roman', times, serif; font-size: 16px; "&gt;tendremos un m&amp;eacute;todo que realizar&amp;aacute; una b&amp;uacute;squeda Lucene con una query que pasaremos como par&amp;aacute;metro desde el modelo de contenido.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;
&lt;strong&gt;protected List&amp;lt;String&amp;gt; getResults()
{
&amp;nbsp; &amp;nbsp;getServiceRegistry().getAuthenticationService().authenticate(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());

&amp;nbsp; &amp;nbsp;List&amp;lt;String&amp;gt; allowedValues = new ArrayList&amp;lt;String&amp;gt;();
&amp;nbsp; &amp;nbsp;for (ResultSetRow row : resultSet)
&amp;nbsp; &amp;nbsp;{
&amp;nbsp; &amp;nbsp; &amp;nbsp;if(nodeSvc.getType(row.getNodeRef()).equals(ContentModel.TYPE_PERSON)){
&amp;nbsp; &amp;nbsp; &amp;nbsp;allowedValues.add((String)nodeSvc.getProperty(row.getNodeRef(), ContentModel.PROP_FIRSTNAME) + &amp;quot; &amp;quot;
&amp;nbsp; &amp;nbsp; &amp;nbsp; + (String)nodeSvc.getProperty(row.getNodeRef(), ContentModel.PROP_LASTNAME));
&amp;nbsp; &amp;nbsp; &amp;nbsp; }else{
&amp;nbsp; &amp;nbsp; &amp;nbsp;allowedValues.add((String)nodeSvc.getProperty(row.getNodeRef(), ContentModel.PROP_NAME));
&amp;nbsp; &amp;nbsp; }
&amp;nbsp; &amp;nbsp;} 
&amp;nbsp; &amp;nbsp;if (allowedValues.size() == 0)
&amp;nbsp; &amp;nbsp;&amp;nbsp;allowedValues.add(&amp;quot;&amp;quot;);
return allowedValues;
}&lt;/strong&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm"&gt;
	&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;tambi&amp;eacute;n es necesario sobreescribir el m&amp;eacute;todo getAllowedValues para que cargue los valores obtenidos en la b&amp;uacute;squeda:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;
&lt;strong&gt;@Override
public List&amp;lt;String&amp;gt; getAllowedValues()
{
List&amp;lt;String&amp;gt; allowedValues = getResults();
super.setAllowedValues(allowedValues);
return allowedValues;
}

&lt;/strong&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm"&gt;
	&lt;font face="Liberation Serif, serif"&gt;&lt;font size="3"&gt;y por &amp;uacute;ltimo, tendremos que tener definido el bean en el contexto:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;(bug-model-context.xml)&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;bean id=&amp;quot;SearchBasedListConstraintInitializer&amp;quot;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;class=&amp;quot;zylk.net.constraints.SearchBasedListConstraint&amp;quot;&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;property name=&amp;quot;serviceRegistry&amp;quot;&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;ref bean=&amp;quot;ServiceRegistry&amp;quot;/&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;/property&amp;gt;&amp;nbsp;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div id="cke_pastebin"&gt;
	&lt;strong&gt;&lt;tt&gt;&amp;lt;/bean&amp;gt;&lt;/tt&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;span style="font-size:16px;"&gt;&lt;span style="font-family: times new roman,times,serif;"&gt;PS: Para desplegar la clase java hemos creado un jar y lo hemos copiado en $ALF_HOME$/tomcat/webapps/alfresco/WEB-INF/lib. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;span style="font-size:16px;"&gt;&lt;span style="font-family: times new roman,times,serif;"&gt;Ejemplos:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;span style="font-size:16px;"&gt;&lt;span style="font-family: times new roman,times,serif;"&gt;Constraint para usuarios:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&lt;span style="font-size: 16px;"&gt;&lt;span style="font-family: times new roman,times,serif;"&gt;&lt;font color="#000000"&gt;&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=6f95d38b-7ff5-410f-9fe8-588b06ca31f6&amp;amp;groupId=10102&amp;amp;t=1333348304776" style="width: 408px; height: 212px;" /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=afbbc6df-6b5c-4b97-be27-498a32edff40&amp;amp;groupId=10102&amp;amp;t=1333348313641" style="width: 408px; height: 187px;" /&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	&lt;span style="font-size:16px;"&gt;&lt;span style="font-family: times new roman,times,serif;"&gt;Constraint de categor&amp;iacute;as:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&lt;span style="font-size: 16px;"&gt;&lt;span style="font-family: times new roman,times,serif;"&gt;&lt;font color="#000000"&gt;&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=156fe83a-8344-4c2a-8d98-b8dfafad74d6&amp;amp;groupId=10102&amp;amp;t=1333348464682" style="width: 600px; height: 182px; " /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=949d7424-bf5c-4c71-9087-11775fcc739c&amp;amp;groupId=10102&amp;amp;t=1333348471089" style="width: 400px; height: 150px; " /&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&lt;span style="font-size:16px;"&gt;&lt;span style="font-family: times new roman,times,serif;"&gt;Constraint de carpetas:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&lt;span style="font-size: 16px;"&gt;&lt;span style="font-family: times new roman,times,serif;"&gt;&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=2d870551-a6d6-40d1-bbbe-b4276d46c4dd&amp;amp;groupId=10102&amp;amp;t=1333348483760" style="width: 600px; height: 132px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0cm;"&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=3798c1e0-77ed-4d62-91fd-e567d852178a&amp;amp;groupId=10102&amp;amp;t=1333348477579" style="width: 400px; height: 159px; " /&gt;&lt;/p&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p align="LEFT" style="margin-bottom: 0cm;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;</summary>
    <dc:creator>Patricia Yagüe</dc:creator>
    <dc:date>2012-04-02T06:19:41Z</dc:date>
  </entry>
  <entry>
    <title>Desarrollando aplicaciones J2EE sobre Alfresco IV – Aplicativo final</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=185706" />
    <author>
      <name>Irune Prado</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=185706</id>
    <updated>2012-03-27T14:34:29Z</updated>
    <published>2012-03-27T12:57:36Z</published>
    <summary type="html">&lt;p&gt;
	 &lt;/p&gt;
&lt;p align="LEFT" style="margin-top: 0.42cm; page-break-after: avoid"&gt;
	Como colofón a la entrega de 'Desarrollando aplicaciones J2EE sobre Alfresco' [&lt;a href="http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/desarrollando-aplicaciones-j2ee-sobre-alfresco-i-los-basicos"&gt;1&lt;/a&gt;] [&lt;a href="http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/desarrollando-aplicaciones-j2ee-sobre-alfresco-ii-pequenos-consejos"&gt;2&lt;/a&gt;] [&lt;a href="http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/desarrollando-aplicaciones-j2ee-sobre-alfresco-iii-campos-tipo-datetime"&gt;3&lt;/a&gt;] , vamos a comentar el caso de éxito de la creación de un aplicativo final para uno de nuestros clientes.&lt;/p&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	En su antigua vertiente, el cliente hacía uso del software propietario Lotus Notes, sistema cliente/servidor de colaboración y correo electrónico.&lt;/p&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	El principal uso que daban a esta aplicación consistía en:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0cm"&gt;
			Cliente de correo&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0cm"&gt;
			Gestor de conocimiento, albergando los registros entrantes y salientes de la oficina, así como la generación de expedientes asociados a estos.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0cm"&gt;
			Almacenamiento de correos electrónicos (con sus correspondientes adjuntos) relacionados con los registros y expedientes en el gestor de conocimiento.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	Con la colaboración de &lt;a href="http://www.irontec.com/"&gt;Irontec&lt;/a&gt; se remplazó dicho software por una combinación basada en software libre; Zimbra 7.1.1 y una aplicación J2EE a medida bajo Alfresco Community 3.4.0.&lt;/p&gt;
&lt;p style="margin-bottom: 0cm"&gt;
	 &lt;/p&gt;
&lt;h2 class="western"&gt;
	Aplicación a medida&lt;/h2&gt;
&lt;h4 class="western"&gt;
	Alfresco Community 3.4d&lt;/h4&gt;
&lt;p&gt;
	Desde Zylk.net tenemos una amplia experiencia con este gestor documental, y aunque nuestra primera aproximación fue desarrollar la aplicación sobre el share de Alfresco, optamos por trabajar sobre un terreno conocido, J2EE, mientras nos familiarizábamos con las tecnologías de Alfresco Share; YUI, Surf, Freemarker, JS avanzado, ...&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;h4 class="western"&gt;
	Aplicación web J2EE&lt;/h4&gt;
&lt;p&gt;
	La aplicación web, consta de 2 interfaces para dar servicio a un zimlet y a las peticiones síncronas y asíncronas de la aplicación web.&lt;/p&gt;
&lt;p&gt;
	Desde el core de la aplicación tendremos el módulo Alfresco, que se compondrá de una paquetería para las operaciones CMIS (&lt;a href="http://chemistry.apache.org/java/opencmis.html"&gt;OpenCMIS&lt;/a&gt;) y para aquellas operaciones que requieran del uso de los webscripts a medida, un paquete para la gestión de conexiones HTTP (&lt;a href="http://hc.apache.org/index.html"&gt;Apache HTTP Commons&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;
	Desde Alfresco haremos uso, desde el binding Atompub, del servicio CMIS que se nos ofrece.&lt;/p&gt;
&lt;p&gt;
	Como comentamos en anteriores entradas, dado que ciertas funcionalidades no las veíamos cubiertas desde este interfaz, &lt;a href="http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/desarrollando-aplicaciones-j2ee-sobre-alfresco-i-los-basicos"&gt;optamos por crearnos webscripts Alfresco a medida&lt;/a&gt;.&lt;/p&gt;
&lt;p style="text-align: center; "&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=ac5cd93d-9be8-47c2-b8cf-927ea6bfce19&amp;amp;groupId=10102&amp;amp;t=1332853471084" style="width: 300px; height: 491px; " /&gt;&lt;/p&gt;
&lt;p&gt;
	 &lt;/p&gt;
&lt;p&gt;
	El mapa funcional de la aplicación se podría definir en:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;p&gt;
			&lt;b&gt;Registros&lt;/b&gt;&lt;/p&gt;
		&lt;ul&gt;
			&lt;li&gt;
				&lt;p&gt;
					Listado de registros E/S disponibles en el sistema, paginados y ordenados, con un buscador simple y otro avanzado, para poder realizar una búsqueda por metadatos.&lt;/p&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;p&gt;
					Alta de registro de entrada / salida&lt;/p&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;p&gt;
					Detalle de registro E/S&lt;/p&gt;
				&lt;ul&gt;
					&lt;li&gt;
						&lt;p&gt;
							Características generales&lt;/p&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;p&gt;
							Datos de origen/destino&lt;/p&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;p&gt;
							Estado de archivado; revisor, responsable de archivo y registros asociados&lt;/p&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;p&gt;
							Archivos e Emails relacionados.&lt;/p&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
			&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;p&gt;
			&lt;b&gt;Expedientes&lt;/b&gt;&lt;/p&gt;
		&lt;ul&gt;
			&lt;li&gt;
				&lt;p&gt;
					Listado de expedientes disponibles en el sistema, paginados y ordenados, con un buscador simple y otro avanzado, para poder realizar una búsqueda por metadatos.&lt;/p&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;p&gt;
					Detalle del expediente&lt;/p&gt;
				&lt;ul&gt;
					&lt;li&gt;
						&lt;p&gt;
							Características generales&lt;/p&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;p&gt;
							Registros asociados&lt;/p&gt;
					&lt;/li&gt;
					&lt;li&gt;
						&lt;p&gt;
							Archivos e Emails relacionados&lt;/p&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
			&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	 &lt;/p&gt;
&lt;p&gt;
	Os dejamos unas cuantas imágenes de la aplicación.&lt;/p&gt;
&lt;p style="text-align: center; "&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=e927718e-1089-444b-97fe-fb36206fd654&amp;amp;groupId=10102&amp;amp;t=1332853583858" style="width: 600px; height: 405px; " /&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;em&gt;Creación de un nuevo registro&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;
	 &lt;/p&gt;
&lt;p style="text-align: center; "&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=f498d6a1-4392-46e2-be20-6c4dc5a3d7ef&amp;amp;groupId=10102&amp;amp;t=1332853648875" style="width: 600px; height: 299px; " /&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm"&gt;
	&lt;em&gt;Resultados y buscador simple de registros&lt;/em&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm;"&gt;
	 &lt;/p&gt;
&lt;p style="margin-top: 0.21cm; text-align: center; "&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=4cd4f06b-433e-4d8f-8efa-d368f3efac90&amp;amp;groupId=10102&amp;amp;t=1332853770763" style="width: 600px; height: 276px; " /&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm"&gt;
	&lt;em&gt;Búsqueda avanzada de registros&lt;/em&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm;"&gt;
	 &lt;/p&gt;
&lt;p style="margin-top: 0.21cm; text-align: center; "&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=61b4c487-bcec-49a4-8cb7-c635286ce573&amp;amp;groupId=10102&amp;amp;t=1332853819857" style="width: 600px; height: 223px; " /&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm"&gt;
	&lt;em&gt;Asociación entre un registro y expediente&lt;/em&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm;"&gt;
	 &lt;/p&gt;
&lt;p style="margin-top: 0.21cm; text-align: center; "&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=60bd6896-a728-42fe-92f5-815544ac7c6e&amp;amp;groupId=10102&amp;amp;t=1332853905233" style="width: 600px; height: 219px;" /&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm"&gt;
	&lt;em&gt;Petaña de revisión en el detalle de un registro&lt;/em&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm;"&gt;
	 &lt;/p&gt;
&lt;p style="margin-top: 0.21cm; text-align: center; "&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=6dc33b96-c960-41c5-b2b7-19f7fb32acf6&amp;amp;groupId=10102&amp;amp;t=1332853988165" style="width: 600px; height: 189px; " /&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm"&gt;
	&lt;em&gt;Registros asociados a un expediente&lt;/em&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm;"&gt;
	 &lt;/p&gt;
&lt;p style="margin-top: 0.21cm; text-align: center; "&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=d1831c54-e690-449f-be43-7681d86f8d1c&amp;amp;groupId=10102&amp;amp;t=1332854083568" style="width: 600px; height: 335px; " /&gt;&lt;/p&gt;
&lt;p style="margin-top: 0.21cm"&gt;
	&lt;span style="font-family:arial,helvetica,sans-serif;"&gt;&lt;em&gt;Pestaña 'Documentos de interés' en el detalle de un expediente, en donde se pueden ver documentos e emails adjuntos&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class="western" style="page-break-before: always"&gt;
	Zimlet&lt;/h2&gt;
&lt;p&gt;
	Para la integración del gestor de correo con el gestor documental, desarrollamos junto con &lt;a href="http://www.irontec.com/"&gt;Irontec&lt;/a&gt; un componente zimlet para Zimbra y mediante una capa intermedia en nuestra aplicación J2EE relacionamos el zimlet y Alfresco.&lt;/p&gt;
&lt;p style="text-align: center; "&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=9bd2dc2e-8eb7-4b5a-9fec-99c785c3263c&amp;amp;groupId=10102&amp;amp;t=1332858136404" style="width: 600px; height: 363px; " /&gt;&lt;/p&gt;
&lt;h2 class="western"&gt;
	Migración de datos&lt;/h2&gt;
&lt;p&gt;
	Para la migración de datos desde un sistema Lotus ↔ Alfresco, hicimos uso de la librería &lt;a href="http://en.wikipedia.org/wiki/DIIOP"&gt;DIIOP&lt;/a&gt; (Domino Internet Inter-Orb Protocol) que nos ofrece el mismo producto, para comunicar aplicaciones Java con el servicio de datos Lotus Domino.&lt;/p&gt;
&lt;p style="text-align: center; "&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=98e0aec4-4c2a-4356-9b7b-7bd7d95f792b&amp;amp;groupId=10102&amp;amp;t=1332858187338" style="width: 411px; height: 200px; " /&gt;&lt;/p&gt;
&lt;p&gt;
	Si como ocurrió en nuestro caso, desconocéis el modelo de datos empleado en la aplicación y este ha sufrido variaciones en el transcurso de su uso, el proceso de migración os resultará algo cansino, ya que sólo podréis conocer el contenido de los documentos (objeto genérico de Lotus) con una iteración de propiedades.&lt;/p&gt;
&lt;p&gt;
	Sin embargo, la &lt;a href="http://notes.helsinki.fi/help/help8_designer.nsf/b3266a3c17f9bb7085256b870069c0a9/bc180d07d8e5f7678525731b004a9789?OpenDocument"&gt;API DIIOP&lt;/a&gt; es muy utilizable, y apenas tendréis problemas en la parte técnica.&lt;/p&gt;
&lt;p&gt;
	Tras las 38 horas que tardó todo el proceso de migración, conseguimos migrar 27.605 documentos con un peso total aproximado de 20Gb.&lt;/p&gt;</summary>
    <dc:creator>Irune Prado</dc:creator>
    <dc:date>2012-03-27T12:57:36Z</dc:date>
  </entry>
  <entry>
    <title>Signing PDF documents with Sinadura Mobile</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=185524" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=185524</id>
    <updated>2012-04-03T11:30:59Z</updated>
    <published>2012-03-26T10:13:01Z</published>
    <summary type="html">&lt;p style="text-align: justify;"&gt;
	Last week we finished the implementation of a mobile client for android devices in &lt;a href="http://www.sinadura.net"&gt;sinadura&lt;/a&gt; project (still in beta). We have implemented some of the main features of sinadura Desktop application for PDF documents, like TSA signatures with p12 certificates. Other interesting features are related with the share possibilities of the mobile client with external services like Gmail, Google Docs or Dropbox.&lt;/p&gt;
&lt;table cellpadding="3" cellspacing="3"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td&gt;
				&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=a4fe4c19-74ed-417d-a15f-085064eb2a23&amp;amp;groupId=10102&amp;amp;t=1332757531758" style="width: 192px; height: 320px; border-width: 1px; border-style: solid; margin-left: 10px; margin-right: 10px;" /&gt;&lt;/td&gt;
			&lt;td&gt;
				&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=203ead46-4016-4ad2-bfb9-6fc4fdb4cdc1&amp;amp;groupId=10102&amp;amp;t=1332757545026" style="width: 192px; height: 320px; border-width: 1px; border-style: solid;" /&gt;&lt;/td&gt;
			&lt;td&gt;
				&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=185b3072-fd69-4a16-906b-a263fdfdf56f&amp;amp;groupId=10102&amp;amp;t=1332757555735" style="width: 192px; height: 320px; border-width: 1px; border-style: solid; margin-left: 10px; margin-right: 10px;" /&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
	 &lt;/p&gt;
&lt;p&gt;
	The next steps are related with the validation of signatures, the cmis integration with Alfresco respositories, the implemetation of XaDES signatures or even a sync service for the client with a CMIS repository.&lt;br /&gt;
	 &lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;a href="http://www.slideshare.net/zylk/sinadura-mobile" target="_blank"&gt;http://www.slideshare.net/zylk/sinadura-mobile&lt;/a&gt;&lt;/p&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2012-03-26T10:13:01Z</dc:date>
  </entry>
  <entry>
    <title>Formando un perfil "Community manager"</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=185411" />
    <author>
      <name>Kristina Patxo</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=185411</id>
    <updated>2012-03-23T11:06:23Z</updated>
    <published>2012-03-21T16:07:04Z</published>
    <summary type="html">&lt;p&gt;
	La pasada semana parte del equipo de Zylk acudió a un curso de&amp;nbsp; "Funciones del comunity manager en la empresa" organizado por &lt;a href="http://www.euskadinnova.net/es/enpresa-digitala/index.aspx"&gt;Enpresa digitala&lt;/a&gt; e impartido por&amp;nbsp; Miguel Fernández Arrieta de la&lt;a href="http://www.mondragon.edu/prest/"&gt; Universidad de Mondragón.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	Miguel nos dió a conocer, los valores de las redes sociales y para que se utilizan, como por ejemplo: el twitter, facebook, youtube,linkedin...etc...&lt;/p&gt;
&lt;p&gt;
	Ahora os cuento un poco mi experiencia en primera persona, ya que acudí al curso.&lt;/p&gt;
&lt;p&gt;
	En este curso nos enseñaron como cuidar la identidad digital de la empresa. Para todo esto, Miguel comenzó&amp;nbsp; informándonos a cerca de la&amp;nbsp; importancia en darnos de alta en "alertas de google", y de esta manera ver en todo momento las publicaciones que se realicen con nuestro nombre.&lt;/p&gt;
&lt;p&gt;
	Esto mejorarará la relación de la empresa con las personas y a su vez la propia relación interna.&lt;/p&gt;
&lt;p&gt;
	Nos dió a conocer como utilizar un cliente web, en este caso llamado "hootsuite" con el que&amp;nbsp; podremos controlar y gestionar, los movimientos en el twitter, facebook y todas las páginas de las redes sociales en las que la empresa se encuentre logeado. Comentaros, que esta herramienta me pareció bastante interesante.&lt;/p&gt;
&lt;p&gt;
	Si realizamos algún otro curso en relación a esto, no dudaré en contároslo. :-)&lt;/p&gt;</summary>
    <dc:creator>Kristina Patxo</dc:creator>
    <dc:date>2012-03-21T16:07:04Z</dc:date>
  </entry>
  <entry>
    <title>En el CeBIT 2012</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=184933" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=184933</id>
    <updated>2012-03-11T10:55:41Z</updated>
    <published>2012-03-10T17:56:11Z</published>
    <summary type="html">&lt;p style="text-align: justify;"&gt;
	La semana pasada estuvimos en &lt;a href="http://www.cebit.de/home" target="_blank"&gt;CeBIT 2012&lt;/a&gt; en una acci&amp;oacute;n de internacionalizaci&amp;oacute;n de las empresas vascas de software libre promocionada por ESLE. Durante los d&amp;iacute;as de la exposici&amp;oacute;n pudimos observar las tendencias del sector TIC, as&amp;iacute; como la visi&amp;oacute;n y comercializaci&amp;oacute;n de las empresas, institutos de investigaci&amp;oacute;n y gobiernos de referencia. Un total de 4200 empresas y 70 paises representados. Por parte de ESLE, &lt;a href="http://www.irontec.com" target="_blank"&gt;Irontec&lt;/a&gt;, &lt;a href="http://www.codesyntax.com" target="_blank"&gt;Codesyntax&lt;/a&gt; y &lt;a href="http://www.zylk.net" target="_blank"&gt;Zylk.net&lt;/a&gt; se reunieron con diferentes empresas y asociaciones presentando una muestra de soluciones de software libre de &lt;a href="http://www.irontec.com/voip.html" target="_blank"&gt;voz sobre IP&lt;/a&gt;, &lt;a href="http://www.codesyntax.com/es/servicios/informacion-geografica" target="_blank"&gt;informaci&amp;oacute;n geogr&amp;aacute;fica&lt;/a&gt;, portales corporativos &lt;a href="http://www.zylk.net" target="_blank"&gt;[1]&lt;/a&gt; &lt;a href="http://www.irontec.com/internet.html" target="_blank"&gt;[2]&lt;/a&gt; &lt;a href="http://www.codesyntax.com/es/servicios/portales-web" target="_blank"&gt;[3]&lt;/a&gt; y &lt;a href="http://www.sinadura.net" target="_blank"&gt;firma digital&lt;/a&gt;, entre otras.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=6f0591ce-33ec-43bc-b655-6d5edd55a554&amp;amp;groupId=10102&amp;amp;t=1331463223693" style="width: 550px; height: 413px;" /&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;br /&gt;
	Brasil era el pa&amp;iacute;s invitado a esta cita alemana de Hannover. Acudieron a la inaguraci&amp;oacute;n las jefas de estado de Alemania y Brasil, conscientes de la importancia de la cita para establecer v&amp;iacute;nculos entre empresas europeas y pa&amp;iacute;ses emergentes en un contexto cada vez mas global e internacional. Casi todos los pa&amp;iacute;ses, emergentes o no, presentaron una muestra de su sector y de su tecnolog&amp;iacute;a. Con tristeza pudimos observar la poca presencia de la expedici&amp;oacute;n espa&amp;ntilde;ola con apenas 20 empresas en toda la feria.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=a1021572-23e0-47d5-bb14-7552590be5be&amp;amp;groupId=10102&amp;amp;t=1331463243123" style="height: 413px; width: 550px;" /&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;br /&gt;
	El software libre tambi&amp;eacute;n estuvo representado a trav&amp;eacute;s empresas, partners de producto y asociaciones que promueven y apoyan el software libre. Tuvimos ocasi&amp;oacute;n de conversar con gente que trabaja en tecnolog&amp;iacute;as del software libre como Liferay, Alfresco, Plone o SugarCRM, y con asociaciones como la Free Software Foundation Europea (FSFE), entre muchos otros, que nos contaron de primera mano sus novedades. Con las empresas que trabajaban en tecnolog&amp;iacute;as similares a las nuestras pudimos intercambiar orientaciones e impresiones de nuestras soluciones y quien sabe si alguna colaboraci&amp;oacute;n en el futuro.&lt;/p&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2012-03-10T17:56:11Z</dc:date>
  </entry>
  <entry>
    <title>Alfresco ECM working as a simple Digital Signing Service</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=184225" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=184225</id>
    <updated>2012-03-04T11:14:53Z</updated>
    <published>2012-03-04T11:03:45Z</published>
    <summary type="html">&lt;p&gt;
	Recently, we have developed an Alfresco ECM module, for signature validation of documents with the help of Sinadura libraries. &lt;a href="http://www.sinadura.net" target="_blank"&gt;Sinadura&lt;/a&gt; is an open source java suite for signing and validating any type of documents, with advanced signature properties.&lt;br /&gt;
	&lt;br /&gt;
	The module allows the possibility of checking the validity of signatures, timestamps, and corresponding chain certificates. All the signature information is represented with an aspect with the following metadata properties (in spanish):&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=8a425fd4-d8e6-47d1-b20e-1196cf73c66d&amp;amp;groupId=10102&amp;amp;t=1330859682741" style="width: 600px; height: 606px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;br /&gt;
	So now, we can store and preserve in our CMIS repository all of those important signed documents of our organization, and automatically check the validity of their signature properties with the help of an Alfresco content rule.&lt;br /&gt;
	&lt;br /&gt;
	The module is used in the core of a signature BPM process, where desktop, web and smartphone clients are involved and working against Alfresco Repository.&lt;br /&gt;
	&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2012-03-04T11:03:45Z</dc:date>
  </entry>
  <entry>
    <title>Accediendo a repositorios de maven securizados</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=183070" />
    <author>
      <name>Gustavo Fernandez</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=183070</id>
    <updated>2012-02-23T16:29:46Z</updated>
    <published>2012-02-20T10:47:03Z</published>
    <summary type="html">&lt;p&gt;
	Hace unos meses en &lt;a href="http://www.zylk.net"&gt;zylk.net&lt;/a&gt; cambiamos toda la arquitectura de servicios a una estructura centralizada y virtualizada. Donde antes hab&amp;iacute;a urls de tipo&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&amp;nbsp;mantis.zylk.net&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;sugarcrm.zylk.net&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;zimbra.zylk.net&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;nexus.zylk.net&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;etc...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	&lt;br /&gt;
	ahora hay un punto com&amp;uacute;n de acceso, securizado por https &lt;strong&gt;services.zylk.net/mantis|nexus|zimbra&lt;/strong&gt;, uno de los servicios que se ofrec&amp;iacute;a y ofrece a terceros es un &lt;strong&gt;respositorio maven&lt;/strong&gt; servido por el producto &lt;a href="http://www.sonatype.org/nexus/" target="_blank"&gt;nexus de sontartype&lt;/a&gt;. Se usa principalmente para el desarrollo de los productos de la suite de &lt;a href="http://www.sinadura.net" target="_blank"&gt;sinadura&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
	La semana pasada empezamos a desarrollar una nueva versi&amp;oacute;n de &lt;a href="http://www.sinadura.net/products-and-services/sinadura-desktop/overview" target="_blank"&gt;firmador de ficheros&lt;/a&gt;, en la que vamos a incorporar el proyecto de &lt;a href="http://commons.apache.org/vfs/" target="_blank"&gt;apache-vfs&lt;/a&gt; para poder firmar documentos en remoto, &lt;strong&gt;webdav, ftp, etc..&lt;/strong&gt; cuando empezamos con el desarrollo nos encontramos con un peque&amp;ntilde;o problema de comunicaci&amp;oacute;n con el repositior de maven ya que los certificados de &lt;strong&gt;services.zylk.net&lt;/strong&gt; no son confiables para la jvm. Para solventarlo basta con ejecutar el siguiente comando desde una terminal&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;
sudo keytool -import -alias services.zylk.net -file Escritorio/services.zylk.net -keystore /usr/lib/jvm/java-6-sun/jre/lib/security/cacert&lt;/pre&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
	El cacert por defecto tiene el password &lt;strong&gt;&amp;quot;changeit&amp;quot;.&lt;/strong&gt; Dejo aqui el certificado &lt;a href="http://www.zylk.net/c/document_library/get_file?uuid=d011f206-e71b-4e7d-b684-2fb21cf2a47d&amp;amp;groupId=10102" target="_blank"&gt;services.zylk.net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
	Para poder reconocer el problema es &amp;uacute;til usar el siguiente &lt;strong&gt;flag de la maquina virtual en maven&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;
-Djavax.net.debug=ssl&lt;/pre&gt;
&lt;br /&gt;</summary>
    <dc:creator>Gustavo Fernandez</dc:creator>
    <dc:date>2012-02-20T10:47:03Z</dc:date>
  </entry>
  <entry>
    <title>Carga avanzada de properties desde java con control de cache y de encoding</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=182977" />
    <author>
      <name>Gustavo Fernandez</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=182977</id>
    <updated>2012-02-16T15:39:48Z</updated>
    <published>2012-02-16T13:31:34Z</published>
    <summary type="html">&lt;p&gt;
	En el último mes en varios proyectos hemos tenido que solventar varios problemas relacionados con la carga de &lt;strong&gt;properties de idioma o configuracion desde java&lt;/strong&gt;, las distintas problemáticas era&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;
		Cargar un ResourceBundle desde un path de filesystem y no desde el classloader&lt;/li&gt;
	&lt;li&gt;
		Cargar properties codificados en UTF8 sin que estos hayan sido pasados por el native2ascii&lt;/li&gt;
	&lt;li&gt;
		Gestionar el ciclo de vida de los properties para que estén cacheados pero que se recarguen cada x-tiempo&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
	Buscando alternativas para resolver estos problemas &lt;strong&gt;encontré un artículo relacionado con el tema, que ahora no encuentro, en el que se explicaba que en la jdk 1.6 se puede crear un controlador "custom"&lt;/strong&gt; para la carga de los &lt;strong&gt;ResourceBundels&lt;/strong&gt;, para ello basta con extender la siguiente clase java&lt;/p&gt;
&lt;p&gt;
	&lt;strong&gt;ResourceBundle.Control&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	desde la que precisamente se pueden controlar los &lt;strong&gt;tres temas comentados&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;
	A continuación se muestra una &lt;strong&gt;implementación de ejemplo que carga los ficheros de filesystem&lt;/strong&gt; y &lt;strong&gt;gestiona el tiempo&lt;/strong&gt; que cada properties permanece en la cache. También &lt;a href="http://jdevelopment.nl/internationalization-jsf-utf8-encoded-properties-files/" target="_blank"&gt;en este link&lt;/a&gt; se puede ver el código de carga para el &lt;strong&gt;tema del UTF8&lt;/strong&gt;&lt;br /&gt;
	 &lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=1ce8dc5e-fe7d-480a-907c-36b4e1286d7b&amp;amp;groupId=10102&amp;amp;t=1329398936341" style="width: 537px; height: 480px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;br /&gt;
	Espero que este breve ejemplo os sirva, basta con cambiar las carga habitual del properties de&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;ResourceBundle.getBundle(name, new Locale("es", "ES"));&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	a&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;ResourceBundle.getBundle(name, new Locale("es", "ES"), new ZylkControl());&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	La ejecución de este ejemplo demuestra que&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;
		Los ficheros se cargan directamente de filesystem&lt;/li&gt;
	&lt;li&gt;
		Solo se accede a la lectura del fichero si el time-to-live así lo indica&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
	Dejo también el código fuente de la clase de ejemplo &lt;a href="http://www.zylk.net/c/document_library/get_file?uuid=96e9e4f1-46ba-4ac1-8c6b-c628b23f3a14&amp;amp;groupId=10102" target="_blank"&gt;linkada en el post&lt;/a&gt;&lt;/p&gt;</summary>
    <dc:creator>Gustavo Fernandez</dc:creator>
    <dc:date>2012-02-16T13:31:34Z</dc:date>
  </entry>
  <entry>
    <title>Portlet de sincronizacion flexible y programada de usuarios de LDAP en comunidades de Liferay Portal EE</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=182318" />
    <author>
      <name>Daniel Sánchez</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=182318</id>
    <updated>2012-01-25T10:10:33Z</updated>
    <published>2012-01-25T10:09:05Z</published>
    <summary type="html">&lt;p&gt;
	Durante los &amp;uacute;ltimos dos meses un equipo mixto de &lt;a href="http://www.zylk.net" target="_blank"&gt;zylk&lt;/a&gt; y &lt;a href="http://www.bilbomatica.es/es" target="_blank"&gt;Bilbomatica&lt;/a&gt; ha estado desarrollando, conjuntamente con personal de la &lt;a href="http://www.ehu.es/p200-home/es" target="_blank"&gt;UPV/EHU&lt;/a&gt; (&lt;strong&gt;Gabriel Maqueda y Alberto Soto&lt;/strong&gt;), un portlet para la sincronizaci&amp;oacute;n de usuarios en las comunidades de &lt;a href="http://www.liferay.com/es/"&gt;Liferay(version 6 EE)&lt;/a&gt;. El escenario es el de una &lt;strong&gt;organizaci&amp;oacute;n o universidad con miles de usuarios potenciales&lt;/strong&gt;, administrados y centralizados en un sistema de &lt;strong&gt;directorio activo o LDAP corporativo&lt;/strong&gt;, que necesita asignar&amp;nbsp; de una manera flexible, &amp;aacute;gil y programada un conjunto de usuarios en las diferentes &lt;strong&gt;comunidades de un portal Liferay&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;
	Los &lt;strong&gt;requisitos&lt;/strong&gt; que se pretend&amp;iacute;a cubrir eran los siguientes:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;
		Poder &lt;strong&gt;delegar en los administradores&lt;/strong&gt; de las comunidades la sincronizaci&amp;oacute;n de los usuarios que pertenezcan a las mismas, siendo el origen de la sincronizaci&amp;oacute;n el LDAP corporativo de la UPV/EHU.&lt;/li&gt;
	&lt;li&gt;
		Permitir que los administradores de las comunidades puedan, sin tener conocimientos de la estructura del LDAP ni de la sintaxis de las querys, &lt;strong&gt;definir filtros para realizar la sincronizaci&amp;oacute;n&lt;/strong&gt; de dichos usuarios&lt;/li&gt;
	&lt;li&gt;
		Permitir la planificaci&amp;oacute;n de las sincronizaciones con &lt;strong&gt;periodicidad variable y seleccionable&lt;/strong&gt; por el propio administrador de la comunidad.&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;Enviar informes&lt;/strong&gt; cada vez que se ejecute una sincronizaci&amp;oacute;n a una lista de usuarios definidos por el propio administrador.&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;Traducci&amp;oacute;n al euskera, tanto del interfaz como del asistente para las querys del LDAP&lt;/strong&gt;, as&amp;iacute; como del informe resultante tras la sincronizaci&amp;oacute;n de los usuarios de comunidades.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
	Nos planteamos primero resolver la duda t&amp;eacute;cnica que ten&amp;iacute;amos antes de empezar el proyecto&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Usar o no el &lt;strong&gt;planificador de tareas que Liferay integra, basado en &lt;a href="http://quartz-scheduler.org/" target="_blank"&gt;quartz&lt;/a&gt;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	La &lt;strong&gt;conclusi&amp;oacute;n&lt;/strong&gt; fue que se podr&amp;iacute;a hacer uso del planificador de tareas de Liferay con su modelo, lo cual permit&amp;iacute;a &lt;strong&gt;no tener que instanciar dos planificadores&lt;/strong&gt; y que el propio portal sea capaz de gestionar parte de las tareas de manera transparente. Para ello el porltet se despleg&amp;oacute; implementando el scheduler de Liferay con una periodicidad diaria y en la implementaci&amp;oacute;n del scheduler es donde se realiza la l&amp;oacute;gica de qu&amp;eacute; tareas de sincronizaci&amp;oacute;n se deben ejecutar cada d&amp;iacute;a.&lt;/p&gt;
&lt;p&gt;
	Una vez decidida la arquitectura de la &lt;strong&gt;soluci&amp;oacute;n&lt;/strong&gt; procedimos a su implementaci&amp;oacute;n. Desde un punto de vista funcional las &lt;strong&gt;caracter&amp;iacute;sticas del desarrollo&lt;/strong&gt; son las siguientes:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Altas en comunidad&lt;/li&gt;
	&lt;li&gt;
		Bajas en comunidad.&lt;/li&gt;
	&lt;li&gt;
		Importar del LDAP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	&lt;br /&gt;
	El portlet permite personalizar los informes de la siguiente forma:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Seleccionar el idioma en que se generar&amp;aacute;n los informes. Los informes se podr&amp;aacute;n obtener tanto en castellano como en euskera.&lt;/li&gt;
	&lt;li&gt;
		Seleccionar el momento preciso en el que se va a realizar el informe o informes dependiendo del modo en que este se configure.&lt;/li&gt;
	&lt;li&gt;
		Obtener informes personalizados atendiendo a caracter&amp;iacute;sticas y a valores concretos.&lt;/li&gt;
	&lt;li&gt;
		Gestionar y a&amp;ntilde;adir destinatarios. Estos destinatarios recibir&amp;aacute;n los informes a trav&amp;eacute;s de su correo electr&amp;oacute;nico.&lt;/li&gt;
	&lt;li&gt;
		Enviar el mismo informe a m&amp;uacute;ltiples destinatarios.&lt;/li&gt;
	&lt;li&gt;
		Seleccionar los datos que mostrar&amp;aacute; el informe.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	En cuanto a la gesti&amp;oacute;n de la &lt;strong&gt;expresi&amp;oacute;n de LDAP&lt;/strong&gt; 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&amp;iacute;stica y un valor. Adem&amp;aacute;s el usuario dispone de &lt;strong&gt;operadores l&amp;oacute;gicos ( AND, OR &amp;amp; NOT )&lt;/strong&gt;, para poder realizar expresiones m&amp;aacute;s complejas.&lt;br /&gt;
	Cada comunidad dispone de una tarea que puede configurar para la sincronizaci&amp;oacute;n como se muestra en la siguiente imagen:&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=bc3b7fae-5ebb-4d4c-aa13-06cd5f8ccb85&amp;amp;groupId=10102&amp;amp;t=1327485858412" style="width: 640px; height: 335px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
	El portlet &lt;strong&gt;est&amp;aacute; accesible desde el panel de control de cada comunidad&lt;/strong&gt;, para los usuarios con rol de administrador de la comunidad.&lt;br /&gt;
	&lt;br /&gt;
	La configuraci&amp;oacute;n se realiza desde la siguiente pantalla:&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=03b8b1bb-72ee-4c96-9a86-64b95f921351&amp;amp;groupId=10102&amp;amp;t=1327485925943" style="width: 640px; height: 418px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	Adem&amp;aacute;s se puede &lt;strong&gt;definir la query de LDAP que nos devolver&amp;aacute; los usuarios que se vayan a sincronizar:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=fa96baeb-1a3e-42dd-ac2f-c6ec1b02235f&amp;amp;groupId=10102&amp;amp;t=1327485989350" style="width: 640px; height: 293px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	Tambi&amp;eacute;n se pueden gestionar los &lt;strong&gt;destinatarios de las notificaciones:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=35c2cdcf-8553-42a9-b0ce-1496e99d676f&amp;amp;groupId=10102&amp;amp;t=1327486035019" style="width: 640px; height: 312px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	Como&lt;strong&gt; temas destacables&lt;/strong&gt; habr&amp;iacute;a que resaltar:&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		La &lt;strong&gt;gesti&amp;oacute;n de los atributos del LDAP es f&amp;aacute;cilmente extendible para que se pueda utilizar en un conjunto amplio de estructuras de LDAP&lt;/strong&gt;. En el caso de la UPV/EHU el LDAP est&amp;aacute; basado en atributos, pero se podr&amp;iacute;a usar en una estructura jer&amp;aacute;rquica. En zylk lo hemos probado con nuestro LDAP con resultados satisfactorios.&lt;/li&gt;
	&lt;li&gt;
		En una evoluci&amp;oacute;n de este desarrollo, se podr&amp;iacute;a ampliar la parte de edici&amp;oacute;n de receptores del informe, de manera que se pudieran &lt;strong&gt;a&amp;ntilde;adir nuevos receptores a partir de los usuarios existentes en el portal&lt;/strong&gt;. As&amp;iacute; pues, la selecci&amp;oacute;n del idioma del informe se realizar&amp;iacute;a de manera transparente para el usuario del portlet y a partir de la configuraci&amp;oacute;n personal de idioma seleccionada por el usuario.&lt;/li&gt;
	&lt;li&gt;
		Se intent&amp;oacute; &lt;strong&gt;crear un hook para que el portlet se integrara como una nueva acci&amp;oacute;n en el portlet de comunidades&lt;/strong&gt; pero no funcion&amp;oacute; correctamente, as&amp;iacute; que se descart&amp;oacute; esa posibilidad. Nos falt&amp;oacute; mirar los listas blancas de portlets que se pueden a&amp;ntilde;adir en tiempo de ejecuci&amp;oacute;n para ver si esa opci&amp;oacute;n era viable.&lt;/li&gt;
&lt;/ul&gt;</summary>
    <dc:creator>Daniel Sánchez</dc:creator>
    <dc:date>2012-01-25T10:09:05Z</dc:date>
  </entry>
  <entry>
    <title>ubuntu 10.04 LTS y algunos problemas con los applets</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=182004" />
    <author>
      <name>Gustavo Fernandez</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=182004</id>
    <updated>2012-01-16T09:05:46Z</updated>
    <published>2012-01-16T08:54:00Z</published>
    <summary type="html">&lt;p&gt;
	Lunes por la ma&amp;ntilde;ana y no se que ha pasado pero en el firefox de mi ubuntu, y en el de todos los de la empresa (usamos la 10.04 &lt;a href="https://wiki.ubuntu.com/LTS" target="_blank"&gt;LTS&lt;/a&gt;), los applets han dejado de funciona. No he encontrado mucha informaci&amp;oacute;n al respecto por internet pero he lincado a mano la librer&amp;iacute;a y parece que todo vuelve a funcionar correctamente. Lo dejo aqui escrito por si puede servir a alguien m&amp;aacute;s.&lt;/p&gt;
&lt;p&gt;
	&lt;strong&gt;ln -s /usr/lib/jvm/java-6-sun/jre/lib/i386/libnpjp2.so&amp;nbsp;&amp;nbsp; $HOME/.mozilla/plugins/libnpjp2.so&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	Algo tiene que ver con el plugin de java &lt;strong&gt;(sun-java6-plugin)&lt;/strong&gt; porque usando el &lt;a href="http://es.wikipedia.org/wiki/IcedTea" target="_blank"&gt;&lt;strong&gt;icedTea&lt;/strong&gt;&lt;/a&gt; los applets funciona, el problema es que el icedTea usa una implementaci&amp;oacute;n de java que no es la de sun y en algunos temas de firma no funciona todo lo bien que me gustar&amp;iacute;a...&lt;/p&gt;
&lt;p&gt;
	Seguir&amp;eacute; investigando un poco m&amp;aacute;s sobre el tema durante la semana, pero justo hoy necesitaba que los applets funcionaran para poder seguir con un proyecto, as&amp;iacute; que temporalmente me voy a quedar con la soluci&amp;oacute;n del link manual...&lt;/p&gt;</summary>
    <dc:creator>Gustavo Fernandez</dc:creator>
    <dc:date>2012-01-16T08:54:00Z</dc:date>
  </entry>
  <entry>
    <title>Desarrollando aplicaciones J2EE sobre Alfresco III - campos tipo datetime</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=181954" />
    <author>
      <name>Irune Prado</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=181954</id>
    <updated>2012-01-13T10:38:40Z</updated>
    <published>2012-01-13T07:19:08Z</published>
    <summary type="html">&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
	 &lt;/p&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal"&gt;
	&lt;span style="background: transparent"&gt;Además de las &lt;a href="http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/desarrollando-aplicaciones-j2ee-sobre-alfresco-ii-pequenos-consejos"&gt;particularidades sorteadas durante el desarrollo&lt;/a&gt; bajo Alfresco Community 3.4d, un curioso problema con el que nos encontramos fue el uso del tipo CMIS 'd:datetime'.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal"&gt;
	&lt;span style="background: transparent"&gt;Por defecto, el analizador de tipo 'datetime' para Lucene de Alfresco tiene una implementación en donde sólo se contempla el 'date', dejando a un lado el 'time'. Como consecuencia de esto, las búsquedas 'ORDER BY cmis:creationDate' no conseguían resultados reales.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal"&gt;
	&lt;span style="background: transparent"&gt;En la &lt;a href="http://wiki.alfresco.com/wiki/CMIS_Query_Language#Configuring_DateTime_resolution"&gt;wiki nos recomiendan configurar un analizador tipo Datetime&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table border="1" cellpadding="4" cellspacing="0" style="width: 541px; height: 55px;"&gt;
	&lt;colgroup&gt;
		&lt;col width="256*" /&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td height="54" valign="TOP" width="100%"&gt;
				&lt;pre class="western"&gt;
				#d_dictionary.datatype.d_datetime.analyzer=org.alfresco.repo.search.impl.lucene.analysis.DateAnalyser
d_dictionary.datatype.d_datetime.analyzer=org.alfresco.repo.search.impl.lucene.analysis.DateTimeAnalyser&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
	 &lt;/p&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal"&gt;
	Tras reconstruir los índices todo funciona como debería. Lamentablemente, tener este tipo de analizador nos modificó el comportamiento de las búsquedas por fecha, no permitiendo encontrar objetos mediante el uso de predicados CMIS-SQL tipo:&lt;/p&gt;
&lt;table border="1" cellpadding="4" cellspacing="0" style="width: 378px; height: 103px;"&gt;
	&lt;colgroup&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td valign="TOP" width="100%"&gt;
				&lt;pre class="western"&gt;
				SELECT * FROM eu:registro WHERE cmis:creationDate &amp;gt; '2011-01-10T09:09:55.965Z'

SELECT * FROM eu:registro WHERE cmis:creationDate &amp;gt; '2011-01-10T09:09:55.965Z' 
AND cmis:creationDate &amp;lt; '2011-01-12T09:09:55.965Z'

SELECT * FROM eu:registro WHERE cmis:creationDate&amp;gt;TIMESTAMP'2010-09-23T16:56:49.925+02:00' 
&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="margin-bottom: 0.5cm;"&gt;
	 &lt;/p&gt;
&lt;p style="margin-bottom: 0.5cm"&gt;
	&lt;span style="font-weight: normal"&gt;Tras probar varias sugerencias leídas en la comunidad Alfresco [&lt;a href="http://wiki.alfresco.com/wiki/CMIS_Query_Language#datetime_literals"&gt;1&lt;/a&gt;] [&lt;a href="http://jajatips.blogspot.com/2010/08/search-content-by-dates-using-cmis.html"&gt;2&lt;/a&gt;] [&lt;a href="http://chemistry.apache.org/java/0.4.0/maven/apidocs/org/apache/chemistry/opencmis/client/api/QueryStatement.html#setDateTime%28int,%20java.util.Calendar...%29%3C"&gt;3&lt;/a&gt;] y no conseguir solución decidimos cambiar de estrategia.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin-bottom: 0.5cm"&gt;
	&lt;span style="font-weight: normal"&gt;Decidimos abandonar el uso del tipo 'd:datetime' a favor de 'd:long' para almacenar las fecha como &lt;a href="http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html#getTimeInMillis%28%29"&gt;TimeMiliseconds&lt;/a&gt; desde la fecha base de un calendario J2EE , denominado época (1 January 1970 00:00:00 GMT)&lt;/span&gt;&lt;/p&gt;
&lt;table border="1" cellpadding="4" cellspacing="0" style="width: 295px; height: 69px;"&gt;
	&lt;colgroup&gt;
	&lt;/colgroup&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td height="48" valign="TOP" width="100%"&gt;
				&lt;pre class="western"&gt;
				&amp;lt;property name="eu:FechaInicioTimeMiliSeconds"&amp;gt;
    &amp;lt;title&amp;gt;Fecha de inicio miliseconds&amp;lt;/title&amp;gt;
    &amp;lt;type&amp;gt;d:long&amp;lt;/type&amp;gt;
&amp;lt;/property&amp;gt;&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
	 &lt;/p&gt;
&lt;table border="1" cellpadding="4" cellspacing="0" style="width: 272px; height: 52px;"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td valign="TOP" width="100%"&gt;
				&lt;pre class="western"&gt;
				metadatos.put(
  METADATA_FECHA_REGISTRO_MILISECONDS,
  Formatters.convertTimeToMiliseconds(io.getFechaRegistro())
);&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal"&gt;
	&lt;br /&gt;
	Y ya lo tendríamos todo casi solucionado, si no fuera porque en la implementación CMIS de Alfresco el tipo d:long de CMIS no se interpretaba como tal, si no como un entero tipo d:integer que al intentar recibir un 'timemiliseconds' nos generaba la excepción.&lt;/p&gt;
&lt;table border="1" cellpadding="4" cellspacing="0" style="width: 400px; height: 52px;"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td valign="TOP" width="100%"&gt;
				&lt;pre class="western"&gt;
				Caused by: java.lang.NumberFormatException: For input string: "1320361200000"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:461)
&lt;/pre&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
	 &lt;/p&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal"&gt;
	Con un cambio de 'd:long' a 'd:string' todo solucionado!&lt;/p&gt;</summary>
    <dc:creator>Irune Prado</dc:creator>
    <dc:date>2012-01-13T07:19:08Z</dc:date>
  </entry>
  <entry>
    <title>Usando hadoop para intercambio masivo de ficheros en un contexto de big data</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=181803" />
    <author>
      <name>Gustavo Fernandez</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=181803</id>
    <updated>2012-01-05T11:30:16Z</updated>
    <published>2012-01-05T11:25:28Z</published>
    <summary type="html">&lt;p&gt;
	Durante los &amp;uacute;ltimos tres meses en &lt;a href="http://www.zylk.net" target="_blank"&gt;&lt;strong&gt;zylk&lt;/strong&gt;&lt;/a&gt; hemos estado desarrollando, conjuntamente con personal de &lt;a href="http://www.ejie.net" target="_blank"&gt;EJIE&lt;/a&gt; (&lt;strong&gt;Oscar Guadilla&lt;/strong&gt; en la definici&amp;oacute;n de la arquitectura y gesti&amp;oacute;n del proyecto, &lt;strong&gt;Carlos Gonzalez de Zarate&lt;/strong&gt; y &lt;strong&gt;Roberto Tajada&lt;/strong&gt; en la parte de platea integraci&amp;oacute;n y &lt;strong&gt;Juan Uralde&lt;/strong&gt; en la parte de xlnets) , una aplicaci&amp;oacute;n horizontal para el intercambio temporal de ficheros. La problem&amp;aacute;tica que se quer&amp;iacute;a resolver era la siguiente:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;
		Disponer de un sistema para que las distintas aplicaciones, situadas en los distintos entornos (extra, intra, inter etc..), &lt;strong&gt;pudieran intercambiar ficheros&lt;/strong&gt;.&lt;/li&gt;
	&lt;li&gt;
		Disponer de un sistema de trazas/auditoria, consultable en tiempo real capaz de almacenar la informaci&amp;oacute;n de &lt;strong&gt;millones de transacciones&lt;/strong&gt;.&lt;/li&gt;
	&lt;li&gt;
		Disponer de un sistema de &lt;strong&gt;eventos&lt;/strong&gt; que permitiera la comunicaci&amp;oacute;n as&amp;iacute;ncrona entre las distintas aplicaciones (en lo que a intercambio de ficheros hace referencia)&lt;/li&gt;
	&lt;li&gt;
		Disponer de una librer&amp;iacute;a de cliente, para navegadores, que &lt;strong&gt;mejorara la experiencia de usuario a la hora de gestionar ficheros&lt;/strong&gt; en aplicaciones web.&lt;/li&gt;
	&lt;li&gt;
		Disponer de un&lt;strong&gt; API java que sirviera tanto para jdk 1.4, como para jdk 1.5&lt;/strong&gt;+&lt;/li&gt;
	&lt;li&gt;
		Disponer de un &lt;strong&gt;API batch&lt;/strong&gt;.&lt;/li&gt;
	&lt;li&gt;
		Disponer de un &lt;strong&gt;API WebService&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
	El proyecto se dividi&amp;oacute; en dos partes.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Una primera en la que se hicieron las pruebas pertinentes para &lt;strong&gt;seleccionar las tecnolog&amp;iacute;as y los patrones&lt;/strong&gt; necesarios para el desarrollo. (&lt;strong&gt;Tres semanas de trabajo&lt;/strong&gt;)&lt;/li&gt;
	&lt;li&gt;
		Una segunda en la que se realiz&amp;oacute; la &lt;strong&gt;implementaci&amp;oacute;n de la soluci&amp;oacute;n y se depuraron&lt;/strong&gt; todos los aspectos que no se hab&amp;iacute;an tenido en cuenta en la fase de an&amp;aacute;lisis/pruebas (&lt;strong&gt;Nueve semanas de trabajo&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	A continuaci&amp;oacute;n se muestra un gr&amp;aacute;fico de los distintos componentes que conforman las soluci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=45686a54-9ef6-490a-9874-7092501a9653&amp;amp;groupId=10102&amp;amp;t=1325761771871" style="width: 640px; height: 603px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	Y los distintos m&amp;eacute;todos que se pensaba crear y exponer en cada canal. Como eje principal de la soluci&amp;oacute;n se opt&amp;oacute; por usar hdfs (&lt;a href="http://hadoop.apache.org/hdfs/" target="_blank"&gt;hadoop distributed file system1&lt;/a&gt;).&lt;br /&gt;
	La idea original era crear una API java recubriendo el API original de hadoop para exponer los siguientes m&amp;eacute;todos:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		move&lt;/li&gt;
	&lt;li&gt;
		info&lt;/li&gt;
	&lt;li&gt;
		copy&lt;/li&gt;
	&lt;li&gt;
		list&lt;/li&gt;
	&lt;li&gt;
		put&lt;/li&gt;
	&lt;li&gt;
		get&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	La primera pega que nos encontramos fue que el API de &lt;a href="http://hadoop.apache.org/" target="_blank"&gt;HADOOP&lt;/a&gt; solo se puede ejecutar con j&lt;strong&gt;ava 1.5+ lo que nos oblig&amp;oacute; a crear un nuevo canal de comunicaci&amp;oacute;n para exponer el API java 1.4&lt;/strong&gt;. Para ello expusimos los m&amp;eacute;todos por medio de un API REST y creamos un cliente compatible con java 1.4 para dichos m&amp;eacute;todos.&amp;nbsp; Tanto el API para java 1.4 como el de 1.5 se instancian usando una &lt;strong&gt;factor&amp;iacute;a abstracta que permite cambiar del API 1.4 al API 1.5 con tan solo cambiar las implementaciones&lt;/strong&gt; ya que creemos que en un futuro pr&amp;oacute;ximo todas las aplicaciones correr&amp;aacute;n con java 1.5+&lt;br /&gt;
	A continuaci&amp;oacute;n mostramos un &lt;strong&gt;diagrama&lt;/strong&gt; de como se han creado las implementaciones y las interfaces relacionadas con el proyecto.&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=e95df4fc-5d6e-48d1-8b63-de84f25db57f&amp;amp;groupId=10102&amp;amp;t=1325761973381" style="width: 640px; height: 500px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
	Una vez tuvimos el core creado y consensuado nos centramos en el resto de las partes, a saber&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Sistema de trazas.&lt;/li&gt;
	&lt;li&gt;
		Eventos (platea integraci&amp;oacute;n).&lt;/li&gt;
	&lt;li&gt;
		API WS.&lt;/li&gt;
	&lt;li&gt;
		Widget para upload.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	&lt;br /&gt;
	A continuaci&amp;oacute;n presentamos un&lt;strong&gt; gr&amp;aacute;fico que resume todos los canales de comunicaci&amp;oacute;n entre los distintos APIs&lt;/strong&gt; y componentes.&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=487f98d4-49b5-4584-925a-c245f956383d&amp;amp;groupId=10102&amp;amp;t=1325762052231" style="width: 640px; height: 477px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
	Donde se pude ver que al core se le han a&amp;ntilde;adido las funcionalidades de &lt;strong&gt;trazas, metadatos y seguridad basada en xlnets&lt;/strong&gt;.&lt;br /&gt;
	&lt;br /&gt;
	Para el sistema de &lt;strong&gt;trazas&lt;/strong&gt; se han utilizado colas &lt;a href="http://es.wikipedia.org/wiki/Java_Message_Service" target="_blank"&gt;JMS&lt;/a&gt; con un MDB que publica los mensajes en una base de datos noSQL como &lt;a href="http://www.mongodb.org/" target="_blank"&gt;mongo-db&lt;/a&gt;. Se opt&amp;oacute; por esta soluci&amp;oacute;n porque despu&amp;eacute;s de hacer pruebas de rendimiento se consegu&amp;iacute;an un rendimiento entre 5-10 veces superior que en tablas relacionales. Hay que decir de todas formas que en este caso el concepto de noSQL encajaba a la perfecci&amp;oacute;n con el problema que se quer&amp;iacute;a solventar al igual que los conceptos de listas finitas, orden natural inverso etc..&lt;br /&gt;
	&lt;br /&gt;
	Para la parte de&lt;strong&gt; metadatos&lt;/strong&gt; se ha optado por almacenar los mismos serializados en &lt;a href="http://es.wikipedia.org/wiki/JSON" target="_blank"&gt;json&lt;/a&gt; en el propio hadoop, por un tema de auto-consistencia del filesystem. Aunque creemos que a esta parte habr&amp;iacute;a que darle todav&amp;iacute;a una vuelta m&amp;aacute;s e ir a un &lt;strong&gt;modelo de tabl&amp;oacute;n basado&lt;/strong&gt; en &lt;a href="http://hbase.apache.org/" target="_blank"&gt;HBASE&lt;/a&gt;, por ejemplo. Si se hiciera esto se estudiar&amp;iacute;a tambi&amp;eacute;n la posibilidad de cambiar el sistema de trazas a HBASE tambi&amp;eacute;n.&lt;br /&gt;
	&lt;br /&gt;
	Para el componente de &lt;strong&gt;upload&lt;/strong&gt; se ha usado &lt;a href="http://swfupload.org/" target="_blank"&gt;SWFUPLOAD&lt;/a&gt;, ya que se intent&amp;oacute; usar los blobs de javascript que permiten no usar flash, pero internet-explorer en su versi&amp;oacute;n 8 no los implementa todav&amp;iacute;a. Hay que destacar que para poder usar SWFUPLOAD en un entorno seguro que use las cookies para mantener la sesi&amp;oacute;n hay que sortear unos peque&amp;ntilde;os &lt;strong&gt;problemas de flash con las cookies&lt;/strong&gt; &amp;hellip; pero eso es otra historia.&lt;br /&gt;
	&lt;br /&gt;
	Para la parte de &lt;strong&gt;seguridad&lt;/strong&gt;, simplemente se han &lt;strong&gt;usado las librer&amp;iacute;as de xlnets&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;
	Para la parte de &lt;strong&gt;eventos&lt;/strong&gt; se uso &lt;strong&gt;platea integraci&amp;oacute;n&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;
	Otra de las partes que se us&amp;oacute;, fue el &lt;a href="http://es.wikipedia.org/wiki/MapReduce" target="_blank"&gt;map-and-reduce&lt;/a&gt; para el expurgo de ficheros, para lo que &lt;a href="http://hadoop.apache.org/mapreduce/" target="_blank"&gt;hadoop evidentemente nos sirvi&amp;oacute;&lt;/a&gt;.&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	Creo que esto es m&amp;aacute;s o menos todo, la verdad es que la soluci&amp;oacute;n final es bastante potente y creemos que puede evolucionar satisfactoriamente y cubrir las necesidades para las que se ha dise&amp;ntilde;ado.&lt;/p&gt;</summary>
    <dc:creator>Gustavo Fernandez</dc:creator>
    <dc:date>2012-01-05T11:25:28Z</dc:date>
  </entry>
  <entry>
    <title>Desarrollando aplicaciones J2EE sobre Alfresco II - pequeños consejos</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=181753" />
    <author>
      <name>Irune Prado</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=181753</id>
    <updated>2012-01-02T12:19:00Z</updated>
    <published>2012-01-02T10:01:52Z</published>
    <summary type="html">&lt;p style="margin-bottom: 0cm"&gt;
	&lt;span style="background: transparent"&gt;Siguiendo el post de &lt;a href="http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/desarrollando-aplicaciones-j2ee-sobre-alfresco-i-los-basicos"&gt;básicos para el desarrollo de aplicaciones J2EE sobre Alfresco&lt;/a&gt;, os dejamos una lista de pequeños consejos para el desarrollo con Alfresco, y en concreto para búsquedas con OpenCMIS.&lt;/span&gt;&lt;/p&gt;
&lt;h1 class="western"&gt;
	Búsquedas con OpenCMIS&lt;/h1&gt;
&lt;p&gt;
	Para realizar las búsquedas, podemos seguir el consejo que os dimos en el post de básicos de Alfresco y usar la utilidad &lt;a href="http://chemistry.apache.org/java/0.5.0/maven/apidocs/org/apache/chemistry/opencmis/client/api/QueryStatement.html"&gt;QueryStatement&lt;/a&gt; que nos ofrece la librería de &lt;a href="http://chemistry.apache.org/java/opencmis.html"&gt;OpenCMIS&lt;/a&gt;, o podéis construirlas a mano.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm;"&gt;
			&lt;b&gt;Comparadores CMIS-SQL&lt;/b&gt;&lt;/p&gt;
		&lt;ul&gt;
			&lt;li&gt;
				&lt;p style="margin-bottom: 0.5cm;"&gt;
					&lt;span style="font-weight: normal;"&gt;Si se requiere el uso de comparaciones case-sensitive, hacer uso del predicado CONTAINS() de CMIS-SQL para establecer cláusulas &lt;a href="http://wiki.alfresco.com/wiki/Full_Text_Search_Query_Syntax"&gt;Full Text Search&lt;/a&gt;, en vez de el comparador básico provisto por CMIS-SQL =' '. Ejemplo:&lt;/span&gt;&lt;/p&gt;
				&lt;table border="1" cellpadding="4" cellspacing="0" style="width: 264px; height: 69px;"&gt;
					&lt;colgroup&gt;
					&lt;/colgroup&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td valign="TOP" width="100%"&gt;
								&lt;pre class="western"&gt;
								SELECT * FROM eu:registro as r join cm:titled as t on r.cmis:objectId=t.cmis:objectId 
join cmis:folder as f on r.cmis:objectId = f.cmis:objectId 
WHERE &lt;b&gt;CONTAINS(t,'cm:title:\'*convenio*\'')&lt;/b&gt; 
ORDER BY r.cmis:lastModificationDate DESC &lt;/pre&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
					Para las búsquedas de campos marcados como constraints, el predicado '=' de CMIS-SQL funciona como si utilizáramos el predicado LIKE. Es por eso que por ejemplo; buscando&lt;/p&gt;
				&lt;table border="1" cellpadding="4" cellspacing="0" style="width: 361px; height: 19px;"&gt;
					&lt;colgroup&gt;
						&lt;col width="256*" /&gt;
					&lt;/colgroup&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td valign="TOP" width="100%"&gt;
								&lt;pre class="western"&gt;
								SELECT eu:EstadoArchivo FROM eu:registro  WHERE eu:EstadoArchivo='Expedientar'&lt;/pre&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
				&lt;p style="margin-bottom: 0.5cm;"&gt;
					&lt;span style="font-weight: normal;"&gt;Bajo el modelo&lt;/span&gt;&lt;/p&gt;
				&lt;table border="1" cellpadding="4" cellspacing="0" style="width: 225px; height: 288px;"&gt;
					&lt;colgroup&gt;
					&lt;/colgroup&gt;
					&lt;tbody&gt;
						&lt;tr&gt;
							&lt;td valign="TOP" width="100%"&gt;
								&lt;pre class="western"&gt;
								&amp;lt;property name="eu:EstadoArchivo"&amp;gt;
	&amp;lt;title&amp;gt;Estado Archivo&amp;lt;/title&amp;gt;
	&amp;lt;type&amp;gt;d:text&amp;lt;/type&amp;gt;
	&amp;lt;constraints&amp;gt;
		&amp;lt;constraint ref="eu:listaEstadosArchivo" /&amp;gt;
	&amp;lt;/constraints&amp;gt;
&amp;lt;/property&amp;gt;

&amp;lt;constraint name="eu:listaEstadosArchivo" type="LIST"&amp;gt;
	&amp;lt;parameter name="allowedValues"&amp;gt;
		&amp;lt;list&amp;gt;
			&amp;lt;value&amp;gt;Pendiente revisar&amp;lt;/value&amp;gt;
			&amp;lt;value&amp;gt;Expedientar&amp;lt;/value&amp;gt;
			&amp;lt;value&amp;gt;No expedientar&amp;lt;/value&amp;gt;
		&amp;lt;/list&amp;gt;
	&amp;lt;/parameter&amp;gt;
&amp;lt;/constraint&lt;/pre&gt;
							&lt;/td&gt;
						&lt;/tr&gt;
					&lt;/tbody&gt;
				&lt;/table&gt;
			&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal; margin-left: 40px;"&gt;
	Se encuentran tanto los valores de 'Expedientar' como 'No expedientar'.&lt;/p&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal; margin-left: 40px;"&gt;
	En nuestro caso arreglamos el problema cambiando el valor de 'Expedientar' por 'Si expedientar'&lt;/p&gt;
&lt;dl&gt;
	&lt;dd&gt;
		&lt;table border="1" cellpadding="4" cellspacing="0" style="width: 562px; height: 22px;"&gt;
			&lt;tbody&gt;
				&lt;tr&gt;
					&lt;td height="27" valign="TOP" width="100%"&gt;
						&lt;pre class="western"&gt;
						SELECT eu:EstadoArchivo FROM eu:registro WHERE eu:EstadoArchivo='Sí Expedientar'&lt;/pre&gt;
					&lt;/td&gt;
				&lt;/tr&gt;
			&lt;/tbody&gt;
		&lt;/table&gt;
	&lt;/dd&gt;
&lt;/dl&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm"&gt;
			&lt;b&gt;Uso del predicado IN_TREE&lt;/b&gt;&lt;/p&gt;
		&lt;p style="margin-bottom: 0.5cm; font-weight: normal"&gt;
			Para agilizar las búsquedas, el uso del predicado IN_TREE resulta de gran ayuda, ya que nos asegura buscar objetos dentro del árbol de un nodo determinado.&amp;nbsp; Ejemplo:&lt;/p&gt;
		&lt;table align="left" border="1" cellpadding="4" cellspacing="0" style="width: 578px; height: 86px;"&gt;
			&lt;colgroup&gt;
			&lt;/colgroup&gt;
			&lt;tbody&gt;
				&lt;tr&gt;
					&lt;td valign="TOP" width="100%"&gt;
						&lt;pre class="western"&gt;
						SELECT * FROM eu:registro as r 
join cm:titled as t on r.cmis:objectId=t.cmis:objectId 
join cmis:folder as f on r.cmis:objectId = f.cmis:objectId 
WHERE &lt;b&gt;IN_TREE(f, 'workspace://SpacesStore/8d18d03a-8fe6-4ede-bfcd-5f6435d78b9e')&lt;/b&gt; ORDER 
BY r.cmis:lastModificationDate DESC&lt;/pre&gt;
					&lt;/td&gt;
				&lt;/tr&gt;
			&lt;/tbody&gt;
		&lt;/table&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm; margin-top: 0.5cm;"&gt;
			 &lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm; margin-top: 0.5cm;"&gt;
			 &lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm; margin-top: 0.5cm;"&gt;
			 &lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm; margin-top:0.5cm;"&gt;
			&lt;b&gt;Métodos de paginación&lt;/b&gt;&lt;/p&gt;
		&lt;p style="margin-bottom: 0.5cm"&gt;
			&lt;span style="font-weight: normal"&gt;La interfaz &lt;a href="http://chemistry.apache.org/java/0.4.0/maven/apidocs/org/apache/chemistry/opencmis/client/api/ItemIterable.html"&gt;ItemIterable&lt;/a&gt; que nos ofrece OpenCMIS nos da todo lo necesario para realizar una paginación en servidor, gracias al los métodos skipTo(posición) y getPage().&lt;/span&gt;&lt;/p&gt;
		&lt;p style="margin-bottom: 0.5cm; font-weight: normal"&gt;
			Con esto la búsqueda paginada nos quedaría algo tal que&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;div align="RIGHT"&gt;
	&lt;table align="left" border="1" cellpadding="4" cellspacing="0" style="width: 564px; height: 355px;"&gt;
		&lt;tbody&gt;
			&lt;tr&gt;
				&lt;td valign="TOP" width="607"&gt;
					&lt;pre class="western"&gt;
					public ItemIterable&amp;lt;QueryResult&amp;gt; doQuery(String query, int delta, int page) {		

log.trace("doQuery | delta: " + delta + " | page: " + page);
Session session = this.getSession(this.username);

OperationContext contexto = session.createOperationContext();

if (delta != -1){
  contexto.setMaxItemsPerPage(delta);
}
		
log.debug("doQuery | " + query);
ItemIterable&amp;lt;QueryResult&amp;gt; results = session.query(query, false, contexto);
log.trace("doQuery | nº resultados: " + results.getTotalNumItems());

if (page &amp;gt; 1){
  log.trace("skip to " + (page*delta-delta));
  results = &lt;b&gt;results.skipTo(page*delta-delta);&lt;/b&gt;
}
  return &lt;b&gt;results.getPage();&lt;/b&gt;
}&lt;/pre&gt;
				&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
&lt;/div&gt;
&lt;h1 class="western"&gt;
	 &lt;/h1&gt;
&lt;h1 class="western"&gt;
	 &lt;/h1&gt;
&lt;h1 class="western"&gt;
	 &lt;/h1&gt;
&lt;h1 class="western"&gt;
	 &lt;/h1&gt;
&lt;h1 class="western"&gt;
	 &lt;/h1&gt;
&lt;h1 class="western"&gt;
	 &lt;/h1&gt;
&lt;h1 class="western"&gt;
	 &lt;/h1&gt;
&lt;h1 class="western"&gt;
	Otros consejos&lt;/h1&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm;"&gt;
			&lt;b&gt;Uso de caracteres especiales&lt;/b&gt;&lt;/p&gt;
		&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
			A la hora de crear ficheros / directorios en Alfresco, es conveniente recordar que existen ciertos caracteres que no son válidos. Sin embargo, es útil saber que no tenemos porqué deshacernos del nombre original de lo que queremos guardar (a pesar de que incluya alguno de estos caracteres), ya que podemos hacer uso del metadato 'Title', para insertar estos caracteres, y luego recuperarlos desde nuestra aplicación.&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=139b107c-c788-449d-ba02-cfe9438edabf&amp;amp;groupId=10102&amp;amp;t=1325499207576" style="width: 598px; height: 129px;" /&gt;&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;</summary>
    <dc:creator>Irune Prado</dc:creator>
    <dc:date>2012-01-02T10:01:52Z</dc:date>
  </entry>
  <entry>
    <title>Construir URLs para edición online y acceso a CIFS en Alfresco</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=181551" />
    <author>
      <name>Patricia Yagüe</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=181551</id>
    <updated>2011-12-26T10:17:50Z</updated>
    <published>2011-12-26T08:43:51Z</published>
    <summary type="html">&lt;p&gt;
	En un &lt;a href="http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/edicion-online-de-documentos-de-office-y-openoffice-en-alfresco-via-webdav" target="_blank"&gt;post&lt;/a&gt; anterior hemos visto como podíamos editar documentos de office y openoffice online con una url de tipo dav://. Para construir esas urls y mostrarlas en la vista del repositorio en Alfresco Share hemos modificado los ficheros:&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;$ALF_HOME$/tomcat/webapps/share/components/documentlibrary/repo-documentlist.js&lt;br /&gt;
	$ALF_HOME$/tomcat/webapps/share/components/documentlibrary/repo-documentlist-min.js&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	Para los documentos, hemos de filtrar previamente para que sólo sea visible para documentos de tipo office u openoffice:&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;var webdavPath = "dav://" + window.location.host + "/alfresco"+ record.webdavUrl;&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;/**&lt;br /&gt;
	* Url WebDav para Edición Online&lt;br /&gt;
	**/&lt;br /&gt;
	&lt;br /&gt;
	//Comprobar que el documento (record) sea del mimetype especifico&lt;br /&gt;
	&lt;br /&gt;
	desc += '&amp;lt;div class="detail"&amp;gt;';&lt;br /&gt;
	desc += '&amp;lt;span class="url"&amp;gt;&amp;lt;em&amp;gt;Editar online: &amp;lt;/em&amp;gt;&amp;lt;a href="'+webdavPath+'"&amp;gt;';&lt;br /&gt;
	desc += '&amp;lt;img src="http://www.zylk.net/alfresco/images/icons/edit_online.gif" style="border-width:0px; padding-left:3px;" alt="Editar online"&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;';&lt;br /&gt;
	desc += '&amp;lt;/div&amp;gt;';&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	Resultado en Share:&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=9e318af5-d4f7-46a8-9841-18a45ae6c785&amp;amp;groupId=10102&amp;amp;t=1324889409315" style="width: 624px; height: 221px;" /&gt;&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=9e318af5-d4f7-46a8-9841-18a45ae6c785&amp;amp;groupId=10102&amp;amp;t=1324889409315" style="width: 624px; height: 221px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;br /&gt;
	Además, otra opción para la edición online es mostrar la url de CIFS en los detalles de las carpetas:&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;var cifsPath = "smb://WORKGROUP;"+Alfresco.constants.USERNAME+"@"+window.location.host+"/alfresco"+encodeURIComponent($combine(locn.path, locn.file)).replace(/%2F/g,"/");&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;if (type == "folder"){&lt;br /&gt;
	&lt;br /&gt;
	....&lt;br /&gt;
	&lt;br /&gt;
	desc += '&amp;lt;div class="detail"&amp;gt;';&lt;br /&gt;
	desc += '&amp;lt;span class="url"&amp;gt;&amp;lt;a href="'+cifsPath+'"&amp;gt;Ver en CIFS&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;';&lt;br /&gt;
	desc += '&amp;lt;/div&amp;gt;';&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;
	}&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	Resultado:&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=1bd73765-bdfc-4019-9471-df989d7a7498&amp;amp;groupId=10102&amp;amp;t=1324889425354" style="width: 640px; height: 460px;" /&gt;&lt;br /&gt;
	&lt;br /&gt;
	 &lt;/p&gt;</summary>
    <dc:creator>Patricia Yagüe</dc:creator>
    <dc:date>2011-12-26T08:43:51Z</dc:date>
  </entry>
  <entry>
    <title>Desarrollando aplicaciones J2EE sobre Alfresco I - los básicos</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=181544" />
    <author>
      <name>Irune Prado</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=181544</id>
    <updated>2012-01-02T10:35:59Z</updated>
    <published>2011-12-26T08:38:46Z</published>
    <summary type="html">&lt;p&gt;
	 &lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%09A%3Alink%20%7B%20so-language%3A%20zxx%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
	&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;Si estáis pensando en empezar una aplicación J2EE sobre Alfresco, os dejamos unos cuantos consejos e ideas que hemos adoptado en un recién finalizado proyecto.&lt;/span&gt;&lt;/p&gt;
&lt;style type="text/css"&gt;
&lt;!--{cke_protected}{C}%3C!%2D%2D%0A%09%09%40page%20%7B%20margin%3A%202cm%20%7D%0A%09%09P%20%7B%20margin-bottom%3A%200.21cm%20%7D%0A%09%09A%3Alink%20%7B%20so-language%3A%20zxx%20%7D%0A%09%2D%2D%3E--&gt;&lt;/style&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm;"&gt;
			&lt;b&gt;OpenCMIS y para todo lo demás Webscripts&lt;/b&gt;&lt;/p&gt;
		&lt;p style="margin-bottom: 0.5cm;"&gt;
			&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;&lt;span style="font-weight: normal;"&gt;Tomamos la determinación de que intentaríamos adaptarnos a lo que CMIS nos diera (&lt;a href="http://chemistry.apache.org/java/opencmis.html"&gt;OpenCMIS para Java&lt;/a&gt; , en nuestro caso v0.4) , y que para aquellas partes que no se pudieran cubrir con la implementación del estándar, desarrollaríamos servicios personalizados mediante webscripts. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
		&lt;p style="margin-bottom: 0.5cm;"&gt;
			&lt;span style="font-weight: normal;"&gt;&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;Con el proyecto finalizado, &lt;/span&gt;&lt;/span&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;la implementación CMIS de Alfresco junto con OpenCMIS nos ha provisto de todo lo necesario para nuestro desarrollo con las siguientes pequeñas excepciones en forma de webscript:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
		&lt;ul&gt;
			&lt;li&gt;
				&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
					&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;Notificaciones Email; Webscript para la generación de notificaciones vía email dada cierta casuística, debido a que el sistemas de reglas y acciones para el envío de notificaciones proporcionada por Alfresco desde su interfaz no se ajustaba a nuestras necesidades.&lt;/span&gt;&lt;/p&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
					&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;Categorías; Obtención de las subcategorías que pertenezcan a las categorías establecidas en el modelo de desarrollo.&lt;/span&gt;&lt;/p&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
					Asociaciones; Con la versión 0.4 de OpenCMIS no pudimos hacer gran cosa a la hora de trabajar con asociaciones. Aunque el establecimiento de estas sí fue posible, no pudimos realizar búsquedas sobre estos campos, por lo que acabamos adoptando la medida de crear un webscript para relacionar objetos tipo folder ↔ folder y folder ↔ person.&lt;/p&gt;
			&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm;"&gt;
			&lt;b&gt;Herramientas para el desarrollo de webscripts&lt;/b&gt;&lt;/p&gt;
		&lt;ul&gt;
			&lt;li&gt;
				&lt;p style="margin-bottom: 0.5cm; font-weight: normal; text-decoration: none;"&gt;
					&lt;strong&gt;&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;Consola Javascript&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
				&lt;p style="margin-bottom: 0.5cm; font-weight: normal; text-decoration: none;"&gt;
					&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;Las ventajas de usar la consola ya lo hemos comentado en &lt;a href="http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/la-consola-javascript-de-alfresco-share"&gt;previas entradas&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;
				&lt;p style="margin-bottom: 0.5cm; font-weight: normal; text-decoration: none;"&gt;
					&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;Si como nosotros, tenéis la necesidad de crear webscripts, la consola Javascript de Alfresco Share os permitirá probar la parte servidora de Javascript.&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=369db8a4-dd75-4d37-bd14-62adbfa3be80&amp;amp;groupId=10102&amp;amp;t=1324893960694" style="width: 520px; height: 340px;" /&gt;&lt;/span&gt;&lt;/p&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;Eclipse Freemarker plugin&lt;/span&gt;&lt;/b&gt;
				&lt;ul&gt;
					&lt;li&gt;
						&lt;p style="margin-bottom: 0.5cm;"&gt;
							&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;Crear plantillas &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://freemarker.sourceforge.net/"&gt;Freemarker&lt;/a&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt; puede resultar cansino si no se tiene una forma de validar la sintaxis básica. Es por ello que el freemarker.jar del plugin &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.jboss.org/tools/download/"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;JBoss Tools Project&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt; os será de gran utilidad. Contiene syntax-highlight, así como autocompletado de su API.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
						&lt;p style="margin-bottom: 0.5cm; font-weight: normal; text-decoration: none;"&gt;
							&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;En nuestro caso lo instalamos desde el Marketplace de Eclipse sin problemas.&lt;/span&gt;&lt;/p&gt;
						&lt;p style="margin-bottom: 0.5cm; font-weight: normal; text-decoration: none; text-align: center;"&gt;
							&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=1d1dd868-b551-48a1-a5fe-b8182a814ca0&amp;amp;groupId=10102&amp;amp;t=1324889442267" style="width: 488px; height: 163px;" /&gt;&lt;/p&gt;
					&lt;/li&gt;
				&lt;/ul&gt;
			&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm;"&gt;
			&lt;b&gt;Uso de paquetería OpenCMIS&lt;/b&gt;&lt;/p&gt;
		&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
			Antes de empezar el proyecto es conveniente conocer la paquetería que tenemos a nuestra disposición, para así evitar trabajo de más. En nuestro caso, encontramos de utilidad los siguientes objetos:&lt;/p&gt;
		&lt;ul&gt;
			&lt;li&gt;
				&lt;p style="margin-bottom: 0.5cm;"&gt;
					&lt;span style="font-weight: normal;"&gt;&lt;a href="http://chemistry.apache.org/java/0.4.0/maven/apidocs/org/apache/chemistry/opencmis/commons/PropertyIds.html"&gt;PropertyIds&lt;/a&gt;; Listado de propiedades de objetos OpenCMIS (cmis:name, cmis:objectId, &lt;/span&gt;cmis:createdBy…)&lt;/p&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;p style="margin-bottom: 0.5cm;"&gt;
					&lt;span style="font-weight: normal;"&gt;Interfaz &lt;/span&gt;&lt;b&gt;&lt;a href="http://chemistry.apache.org/java/0.4.0/maven/apidocs/org/apache/chemistry/opencmis/client/api/CmisObjectProperties.html"&gt;CmisObjectProperties&lt;/a&gt; &lt;/b&gt;&lt;span style="font-weight: normal;"&gt;con los métodos básicos de objetos OpenCMIS (getName(), getProperties(), getProperty(String), getCreatedBy(), getId(), …)&lt;/span&gt;&lt;/p&gt;
			&lt;/li&gt;
			&lt;li&gt;
				&lt;p style="margin-bottom: 0.5cm;"&gt;
					&lt;span style="font-weight: normal;"&gt;Uso de QueryStatements; El hermano de los PreparedStatements de JDBC&lt;/span&gt;&lt;b&gt; &lt;a href="http://chemistry.apache.org/java/0.5.0/maven/apidocs/org/apache/chemistry/opencmis/client/api/QueryStatement.html"&gt;http://chemistry.apache.org/java/0.5.0/maven/apidocs/org/apache/chemistry/opencmis/client/api/QueryStatement.html&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
			&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;
		&lt;p style="margin-bottom: 0.5cm;"&gt;
			&lt;b&gt;&lt;a href="http://chemistry.apache.org/cmis-workbench.html"&gt;CMIS Workbench&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
		&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
			Un amigo necesario para entender cómo se almacena la información bajo CMIS y realizar búsquedas mediante CMIS-SQL.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal; text-align: center;"&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=d9db4616-4f2b-4eac-a2dd-7ef7d12d2c12&amp;amp;groupId=10102&amp;amp;t=1324889442267" style="width: 577px; height: 398px;" /&gt;&lt;br /&gt;
	 &lt;/p&gt;
&lt;p style="margin-bottom: 0.5cm; font-weight: normal;"&gt;
	&lt;span style="background: none repeat scroll 0% 0% transparent;"&gt;Si vosotros también tenéis vuestros 'básicos', compartirlos con nosotros ;)&lt;/span&gt;&lt;/p&gt;</summary>
    <dc:creator>Irune Prado</dc:creator>
    <dc:date>2011-12-26T08:38:46Z</dc:date>
  </entry>
  <entry>
    <title>Feliz navidad y prospero 2012</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=181513" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=181513</id>
    <updated>2011-12-24T10:29:05Z</updated>
    <published>2011-12-24T10:25:48Z</published>
    <summary type="html">&lt;p style="text-align: center;"&gt;
	&lt;strong&gt;&lt;span style="font-size: 14px;"&gt;&lt;font style="font-family: lucida console,sans-serif;"&gt;&amp;iexcl;Desde el equipo de zylk.net os deseamos que pas&amp;eacute;is unas felices fiestas!&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
	Zylkeko lantaldetik gabon zoriontsuak opa dizkizuegu!&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=be409393-1e6a-46b9-b61d-e8626e1544db&amp;amp;groupId=10102&amp;amp;t=1324722322066" style="width: 640px; height: 451px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
	P.S: Gracias Silvia por la composici&amp;oacute;n&lt;/p&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2011-12-24T10:25:48Z</dc:date>
  </entry>
  <entry>
    <title>Edicion online de documentos de Office y Openoffice en Alfresco via webdav</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=181338" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=181338</id>
    <updated>2011-12-19T07:13:02Z</updated>
    <published>2011-12-19T06:55:23Z</published>
    <summary type="html">&lt;p style="text-align: justify;"&gt;
	Una de las funcionalidades m&amp;aacute;s deseadas en Alfresco y en todo gestor documental es la denominada edici&amp;oacute;n online de documentos desde su interfaz web. Esto es la posibilidad de abrir, editar y guardar un documento de office desde Alfresco Share sin la descarga y el guardado local del mismo. Esta funcionalidad la hemos implementado en zylk.net a trav&amp;eacute;s del stack &lt;strong&gt;Alfresco + Firefox + OpenOffice&lt;/strong&gt; mediante la definici&amp;oacute;n y asignaci&amp;oacute;n de OpenOffice como cliente de webdav a ciertos enlaces creados en la interfaz de Alfresco Share. Estos enlaces son del tipo &lt;strong&gt;dav://&lt;/strong&gt; y los hemos generado en las vistas del navegador de documentos y carpetas para los archivos con extensi&amp;oacute;n de OpenOffice y M$ Office, tal que as&amp;iacute;:&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=1315aeef-017f-4eef-acd0-56d4785b7e98&amp;amp;groupId=10102&amp;amp;t=1324278353966" style="width: 640px; height: 169px;" /&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;br /&gt;
	Desde Firefox podemos asociar un protocolo a una aplicaci&amp;oacute;n externa en &lt;strong&gt;about:config&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;span class="Object" id="OBJ_PREFIX_DWT57"&gt;&lt;a href="http://kb.mozillazine.org/Register_protocol#Firefox_versions_up_to_3.0" target="_blank"&gt;http://kb.mozillazine.org/Register_protocol#Firefox_versions_up_to_3.0&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;strong&gt;network.protocol-handler.app.dav --&amp;gt; /usr/bin/soffice&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;network.protocol-handler.external.dav --&amp;gt; true&lt;/strong&gt;&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;network.protocol-handler.expose-all --&amp;gt; true&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align: justify;"&gt;
	Esto permite abrir directamente OpenOffice y editar el documento pinchando en el link creado. Otra opci&amp;oacute;n para abrir esos enlaces es usar extensiones de Firefox como launchy:&lt;br /&gt;
	&lt;br style="font-weight: bold;" /&gt;
	&lt;span style="font-weight: bold;"&gt;&lt;span class="Object" id="OBJ_PREFIX_DWT61"&gt;&lt;a href="http://gemal.dk/mozilla/launchy.html" target="_blank"&gt;http://gemal.dk/mozilla/launchy.html&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	con una configuracion de launchy.xml similar a esta:&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;strong&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
	&amp;lt;configurations xmlns=&amp;quot;http://launchy.mozdev.org/configurations&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;nbsp; &amp;lt;application&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label&amp;gt;OpenOffice as Browser&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;type&amp;gt;1&amp;lt;/type&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;command&amp;gt;/usr/bin/soffice&amp;lt;/command&amp;gt;&lt;br /&gt;
	&amp;nbsp; &amp;lt;/application&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;strong&gt;&amp;nbsp; &amp;lt;application&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label&amp;gt;OpenOffice as Media Client&amp;lt;/label&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;type&amp;gt;3&amp;lt;/type&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;command&amp;gt;/usr/bin/soffice&amp;lt;/command&amp;gt;&lt;br /&gt;
	&amp;nbsp; &amp;lt;/application&amp;gt;&lt;br /&gt;
	&amp;lt;/configurations&amp;gt;&lt;/strong&gt;&lt;br /&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;strong&gt;&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=aec4c4b6-4a75-4ba1-a84e-192bf0aec790&amp;amp;groupId=10102&amp;amp;t=1324278424231" style="width: 640px; height: 260px;" /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	De este modo, podemos implementar la edici&amp;oacute;n online en Alfresco Share f&amp;aacute;cilmente, y con el administrador de contrase&amp;ntilde;as de OpenOffice s&amp;oacute;lo nos autenticaremos al pinchar en el enlace tipo dav al abrir el primer documento por primera vez. El guardado en el servidor Alfresco se llevar&amp;aacute; a cabo directamente desde OpenOffice.&lt;br /&gt;
	&lt;br /&gt;
	Por otro lado, a las carpetas les podemos crear unos links tipo &lt;strong&gt;smb://&lt;/strong&gt; y que lo abra un programa como nautilus en Linux, con lo que si nuestro servidor tiene activo el protocolo &lt;strong&gt;CIFS&lt;/strong&gt; de unidad compartida, podremos acceder directamente a una unidad compartida desde Alfresco Share.&lt;br /&gt;
	&lt;br /&gt;
	La modificaci&amp;oacute;n de las vistas de navegaci&amp;oacute;n de documentos y archivos creando los links se realiza en &lt;b&gt;repo&lt;/b&gt;-&lt;b&gt;documentlist&lt;/b&gt;.&lt;b&gt;js&lt;/b&gt; para lo cual, lo m&amp;aacute;s indicado es desplegar un jar en &lt;strong&gt;shared/lib&lt;/strong&gt; con el archivo javascript correspondiente de manera que no sustituyamos el archivo original por debajo de la ruta &lt;strong&gt;WEB-INF&lt;/strong&gt; de Alfresco. Una prueba de concepto sencilla de todo esto es crear un enlace tipo dav y smb en los enlaces de un Sitio de Share a documentos y carpetas, y comprobar que OpenOffice es capaz de abrir directamente esos enlaces, guardando los cambios en el servidor (una vez configurado Firefox).&lt;/p&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2011-12-19T06:55:23Z</dc:date>
  </entry>
  <entry>
    <title>Subsistemas de autenticacion extendidos en Alfresco, LDAP compatible con CIFS</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=181048" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=181048</id>
    <updated>2011-12-09T16:44:56Z</updated>
    <published>2011-12-09T16:37:04Z</published>
    <summary type="html">&lt;p&gt;
	En la terminolog&amp;iacute;a de Alfresco, un susbsistema es un m&amp;oacute;dulo configurable y responsable de una subparte de la funcionalidad de Alfresco, lo cual engloba &amp;aacute;reas funcionales como los servidores de ficheros, la autenticaci&amp;oacute;n, la sincronizaci&amp;oacute;n o la replicaci&amp;oacute;n. Est&amp;aacute;n disponibles como core del producto desde la version 3.2 del producto y cada subsistema puede iniciarse, pararse (via JMX por ejemplo) y configurarse independientemente con su configuraci&amp;oacute;n aislada en su contexto de Spring.&lt;br /&gt;
	&lt;br /&gt;
	Las diferentes categor&amp;iacute;as y tipos de subsistemas por defecto se pueden consultar en:&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;$ALF_PATH/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/&amp;lt;category&amp;gt;/&amp;lt;type&amp;gt;&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	en donde generalmente se definen el fichero de contexto de Spring y sus correspondientes archivos de properties.&lt;br /&gt;
	&lt;br /&gt;
	Una categor&amp;iacute;a importante de subsistemas son aquellos que se refieren a la autenticaci&amp;oacute;n, como stack de componentes de la cadena de autenticaci&amp;oacute;n del servidor Alfresco. Alfresco ofrece numerosas alternativas por defecto, que comentaremos a continuaci&amp;oacute;n,&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;strong&gt;&amp;nbsp;alfrescoNtlm&lt;/strong&gt;: Autenticaci&amp;oacute;n nativa de Alfresco&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;&lt;strong&gt;ldap&lt;/strong&gt;: Autenticaci&amp;oacute;n y exportaci&amp;oacute;n de usuarios via protocolo LDAP (e.g. OpenLDAP)&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;&lt;strong&gt;ldap-ad&lt;/strong&gt;: Autenticaci&amp;oacute;n y exportaci&amp;oacute;n de usuarios desde un Active Directoy via protocolo LDAP&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;&lt;strong&gt;passthru&lt;/strong&gt;: Autenticaci&amp;oacute;n a trav&amp;eacute;s de un servidor de dominio de Windows&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;&lt;strong&gt;kerberos&lt;/strong&gt;: Autenticaci&amp;oacute;n via Kerberos Realm&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;&lt;strong&gt;external&lt;/strong&gt;: Autenticaci&amp;oacute;n via un sistema de SSO (e.g. CAS)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	con las cuales uno puede configurar un cadena de autenticaci&amp;oacute;n a medida para los usuarios de una organizaci&amp;oacute;n.&lt;br /&gt;
	&lt;br /&gt;
	Hay que tener en cuenta, que la exportaci&amp;oacute;n de los usuarios s&amp;oacute;lo es posible a trav&amp;eacute;s de los subsistemas ldap y ldap-ad, que el protocolo CIFS &amp;uacute;nicamente se soporta con los subsistemas alfrescoNtlm, passthru y kerberos, y que el SSO de usuarios est&amp;aacute; disponible a trav&amp;eacute;s de kerberos, passthu y external.&lt;br /&gt;
	&lt;br /&gt;
	Esto implica en la pr&amp;aacute;ctica considerar diferentes cadenas de autenticaci&amp;oacute;n en el alfresco-global.properties para contemplar un escenario como este:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Los usuarios nativos de Alfresco y usuarios de Windows podr&amp;aacute;n loguearse, con preferencia los usuarios de Windows.&lt;/li&gt;
	&lt;li&gt;
		El servidor de dominio de Windows adem&amp;aacute;s gestionar&amp;aacute; la autenticaci&amp;oacute;n en unidades de red compartidas via CIFS directamente&lt;/li&gt;
	&lt;li&gt;
		El LDAP de directorio activo se utilizar&amp;aacute; para sincronizar usuarios y grupos&lt;/li&gt;
	&lt;li&gt;
		Tendremos un SSO de credenciales de red (NTLM v.1) con los usuarios del dominio, con lo cual los usuarios de Windows no necesitar&amp;aacute;n loguearse en Alfresco, si sus navegadores marcan el servidor como sitio de confianza.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	&lt;strong&gt;chain.authentication=alfrescoNtlm1:alfrescoNtlm,passthru1:passthru,ldap1:ldap-ad&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	donde hay propiedades espec&amp;iacute;ficas como:&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;alfrescoNtlm1&lt;/strong&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ntlm.authentication.sso.enabled=false&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; alfresco.authentication.authenticateCIFS=false&lt;br /&gt;
	&lt;strong&gt;passthru1&lt;/strong&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ntlm.authentication.sso.enabled=true&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; passthru.authentication.authenticateCIFS=true&lt;br /&gt;
	&lt;strong&gt;ldap1&lt;/strong&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ldap.authentication.active=false&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ldap.synchronization.active=true&lt;br /&gt;
	&lt;br /&gt;
	Adem&amp;aacute;s, existen otras situaciones, como utilizar un sistema externo de SSO, como CAS, o bien conectarse a varios servidores LDAP o servidores de directorio, por ejemplo, para contemplar a los usuarios externos de una organizaci&amp;oacute;n (y no incluirlos en el directorio corporativo).&lt;br /&gt;
	&lt;br /&gt;
	En nuestro caso particular, tenemos un servidor OpenLDAP con el que trabajamos en zylk.net y una de las problem&amp;aacute;ticas encontradas es que no podemos utilizar por defecto, unidades CIFS/SAMBA para acceder a los documentos corporativos de nuestro gestor documental Alfresco. Esto lo hemos solventado, extendiendo un subsistema de autenticaci&amp;oacute;n ldapSamba que permite validar a nuestros usuarios del LDAP via CIFS, con un atributo de nuestro LDAP. La clave de la validaci&amp;oacute;n de un subsistema de autenticaci&amp;oacute;n con CIFS, es que la password original debe estar codificada con MD4 (UTF16LE), y esto es posible guardarlo en un esquema de usuarios Samba para LDAP. De este modo, una vez implementado el subsistema, empaquetado en su jar correspondiente y desplegado el directorio lib de Alfresco, en el alfresco-global.properties tendremos:&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;#&lt;br /&gt;
	# Chain Authentication&lt;br /&gt;
	#&lt;br /&gt;
	&lt;br /&gt;
	authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap1:ldap,ldapSamba1:ldapSamba&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	Y su correspondiente configuraci&amp;oacute;n en el directorio extension de shared:&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;zylk@alf:/opt/alfresco34/tomcat/shared/classes/alfresco/extension/subsystems$ tree&lt;/strong&gt;&lt;br /&gt;
	&lt;code&gt;.&lt;br /&gt;
	└── Authentication&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── jdbc&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └── myjdbc&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── jdbc-authentication-context.xml&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └── jdbc-authentication.properties&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; └── ldapSamba&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └── ldapSamba1&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├── ldap-samba-account-authentication-context.xml&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └── ldap-samba-account-authentication.properties&lt;/code&gt;&lt;br /&gt;
	&lt;br /&gt;
	donde definimos el archivo de contexto del subsistema y sus propiedades&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;ldap.samba.authentication.java.naming.provider.url=ldap://ldap-alf.zylk.net:389&lt;br /&gt;
	ldap.samba.authentication.base=dc=zylk,dc=net&lt;br /&gt;
	ldap.samba.authentication.userbase=ou=People&lt;br /&gt;
	ldap.samba.java.naming.security.principal=cn=administrator,dc=zylk,dc=net&lt;br /&gt;
	ldap.samba.java.naming.security.credentials=secret&lt;br /&gt;
	ldap.samba.authentication.authenticateCIFS=true&lt;br /&gt;
	ldap.samba.authentication.allowGuestLogin=false&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	No dejo aqu&amp;iacute; detalles del c&amp;oacute;digo fuente del subsistema, que dejaremos para otra ocasi&amp;oacute;n, pero aprovecho para comentar otro de los subsistemas de autenticaci&amp;oacute;n que hemos implementado recientemente. Este subsistema permite autenticar a los usuarios de Alfresco contra una tabla de usuarios a medida de un esquema de base de datos via JDBC, lo que es tremendamente util, porque nos permite integrar f&amp;aacute;cilmente los usuarios de Alfresco con cualquier aplicaci&amp;oacute;n de terceros que se autentique contra una base de datos relacional, y que por ejemplo quiera integrarse con Alfresco via repositorio CMIS. Lo comentaremos en un pr&amp;oacute;ximo art&amp;iacute;culo.&lt;br /&gt;
	&lt;br /&gt;
	Enlaces:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;span class="Object" id="OBJ_PREFIX_DWT234"&gt;&lt;a href="http://wiki.alfresco.com/wiki/Alfresco_Authentication_Subsystems" target="_blank"&gt;http://wiki.alfresco.com/wiki/Alfresco_Authentication_Subsystems&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;
		&lt;span class="Object" id="OBJ_PREFIX_DWT236"&gt;&lt;a href="http://wiki.alfresco.com/wiki/Alfresco_Subsystems" target="_blank"&gt;http://wiki.alfresco.com/wiki/Alfresco_Subsystems&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2011-12-09T16:37:04Z</dc:date>
  </entry>
  <entry>
    <title>La consola Javascript de Alfresco Share</title>
    <link rel="alternate" href="http://www.zylk.net/c/blogs/find_entry?entryId=180848" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.zylk.net/c/blogs/find_entry?entryId=180848</id>
    <updated>2011-11-27T16:14:04Z</updated>
    <published>2011-11-27T15:47:37Z</published>
    <summary type="html">&lt;p style="text-align: justify;"&gt;
	&lt;a href="http://code.google.com/p/share-extras/wiki/JavascriptConsole" target="_blank"&gt;La consola de Javascript de Alfresco Share&lt;/a&gt; conforma una herramienta precisa y eficaz, no s&amp;oacute;lo para desarrolladores de aplicaciones y servicios via API Javascript y webscripts de Alfresco Share, sino para otro tipo de tareas de mantenimiento de sistema, proporcionando una potente shell con acceso a la informaci&amp;oacute;n de nuestra instancia de Alfresco via Javascript API.&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	La ultima versi&amp;oacute;n de la consola de Javascript disponible en el paquete Share Extras permite adem&amp;aacute;s el acceso a los m&amp;eacute;todos de los principales objetos mediante la combinaci&amp;oacute;n de Ctrl+Space. Esta empaquetada en un simple jar que se a&amp;ntilde;ade al directorio tomcat/shared/lib de la instancia de alfresco.&lt;/p&gt;
&lt;p&gt;
	&lt;img alt="" src="http://www.zylk.net/image/image_gallery?uuid=369db8a4-dd75-4d37-bd14-62adbfa3be80&amp;amp;groupId=10102&amp;amp;t=1322410139557" style="width: 566px; height: 371px;" /&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;br /&gt;
	A continuaci&amp;oacute;n muestro algunos ejemplos sencillos que pueden ser interesantes en el contexto de una migraci&amp;oacute;n entre instancias de Alfresco y que implementan busquedas en el repositorio.&lt;/p&gt;
&lt;p&gt;
	El primer ejemplo permite exportar las categorias de una instancia a un CSV (para hacer una carga posterior en otra instancia de Alfresco via javascript API tambien):&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;var nodes = search.luceneSearch(&amp;quot;PATH:\&amp;quot;cm:generalclassifiable//*\&amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	for each(n in nodes) {&lt;br /&gt;
	&amp;nbsp; print(n.nodeRef + &amp;quot;;&amp;quot; + n.displayPath + &amp;#39;/&amp;#39; +n.name);&lt;br /&gt;
	}&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	Tambi&amp;eacute;n es posible facilmente exportar los usuarios a un CSV, que es interesante en el contexto de una migraci&amp;oacute;n de una instancia de Alfresco a otra, utilizando &lt;a href="http://code.google.com/p/share-extras/downloads/detail?name=create-bulk-users-0.1.jar&amp;amp;can=2&amp;amp;q="&gt;el componente de importaci&amp;oacute;n de usuarios CSV de Share&lt;/a&gt;:&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;var nodes = search.luceneSearch(&amp;quot;TYPE:\&amp;quot;cm:person\&amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	for each(n in nodes) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;
	&amp;nbsp; print(n.name+&amp;#39;;&amp;#39;+n.properties[&amp;quot;userName&amp;quot;]+&amp;#39;;&amp;#39;+n.properties[&amp;quot;email&amp;quot;]);&lt;br /&gt;
	}&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	Para esto tambi&amp;eacute;n hay otros procedimientos:&lt;a href="http://code.google.com/p/share-import-export/"&gt;&lt;br /&gt;
	&lt;br /&gt;
	http://code.google.com/p/share-import-export/&lt;/a&gt;&lt;a href="https://forums.alfresco.com/en/viewtopic.php?f=9&amp;amp;t=18732"&gt;&lt;br /&gt;
	https://forums.alfresco.com/en/viewtopic.php?f=9&amp;amp;t=18732&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	Otra tarea similar atiende a los grupos de usuarios:&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;var nodes = search.xpathSearch(&amp;quot;/sys:system/sys:authorities/*&amp;quot;);&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt;for each(n in nodes) {&lt;br /&gt;
	&amp;nbsp; var aux = n.children;&lt;br /&gt;
	&amp;nbsp; var users = &amp;quot;&amp;quot;&lt;br /&gt;
	&amp;nbsp; for each(m in aux) {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; users = users + m.properties[&amp;quot;userName&amp;quot;] + &amp;quot;,&amp;quot;&lt;br /&gt;
	&amp;nbsp; }&lt;br /&gt;
	&amp;nbsp; users = users.substr(0,users.length-1);&lt;br /&gt;
	&amp;nbsp; print(n.properties[&amp;quot;authorityName&amp;quot;]+&amp;quot;;&amp;quot;+users+&amp;quot;;&amp;quot;+n.nodeRef)&lt;br /&gt;
	}&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	Para extraer las referencias de los nodos de los documentos del repositorio se pueden invocar funciones recursivas como:&lt;br /&gt;
	&lt;br /&gt;
	&lt;strong&gt; recurse(space, function(node) {&lt;br /&gt;
	&amp;nbsp; if (node.type != &amp;quot;{http://www.alfresco.org/model/content/1.0}folder&amp;quot;){&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; print(node.nodeRef+&amp;quot;;&amp;quot;+node.displayPath + &amp;quot;/&amp;quot; + node.name);&lt;br /&gt;
	&amp;nbsp; }&lt;br /&gt;
	});&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
	que se pueden utilizar para reports de permisos como se hace en:&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://www.techbits.de/2011/11/06/using-the-javascript-console-permission-reporting/" target="_blank"&gt;http://www.techbits.de/2011/11/06/using-the-javascript-console-permission-reporting/&lt;/a&gt;&lt;br /&gt;
	&lt;br /&gt;
	o para precargar una estructura de objetos documentales:&lt;a href="http://www.techbits.de/2011/10/18/using-the-javascript-console-creating-and-populating-datalists/" target="_blank"&gt;&lt;br /&gt;
	&lt;br /&gt;
	http://www.techbits.de/2011/10/18/using-the-javascript-console-creating-and-populating-datalists/&lt;/a&gt;&lt;br /&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
	Enlaces:&lt;/p&gt;
&lt;p&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://wiki.alfresco.com/wiki/3.4_JavaScript_API" target="_blank"&gt;http://wiki.alfresco.com/wiki/3.4_JavaScript_API&lt;/a&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://code.google.com/p/share-extras/wiki/JavascriptConsole" target="_blank"&gt;http://code.google.com/p/share-extras/wiki/JavascriptConsole&lt;/a&gt;&lt;/p&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2011-11-27T15:47:37Z</dc:date>
  </entry>
</feed>


