<?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>Portlet de sincronizacion flexible y programada de usuarios de LDAP en comunidades de Liferay Portal EE</title>
    <link rel="alternate" href="http://www.sinadura.net/c/blogs/find_entry?entryId=182318" />
    <author>
      <name>Daniel Sánchez</name>
    </author>
    <id>http://www.sinadura.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.sinadura.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.sinadura.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.sinadura.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.sinadura.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.sinadura.net/c/blogs/find_entry?entryId=182004" />
    <author>
      <name>Gustavo Fernandez</name>
    </author>
    <id>http://www.sinadura.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.sinadura.net/c/blogs/find_entry?entryId=181954" />
    <author>
      <name>Irune Prado</name>
    </author>
    <id>http://www.sinadura.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.sinadura.net/c/blogs/find_entry?entryId=181803" />
    <author>
      <name>Gustavo Fernandez</name>
    </author>
    <id>http://www.sinadura.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.sinadura.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.sinadura.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.sinadura.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.sinadura.net/c/blogs/find_entry?entryId=181753" />
    <author>
      <name>Irune Prado</name>
    </author>
    <id>http://www.sinadura.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.sinadura.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.sinadura.net/c/blogs/find_entry?entryId=181551" />
    <author>
      <name>Patricia Yagüe</name>
    </author>
    <id>http://www.sinadura.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.sinadura.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.sinadura.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.sinadura.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.sinadura.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.sinadura.net/c/blogs/find_entry?entryId=181544" />
    <author>
      <name>Irune Prado</name>
    </author>
    <id>http://www.sinadura.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.sinadura.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.sinadura.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.sinadura.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.sinadura.net/c/blogs/find_entry?entryId=181513" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.sinadura.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.sinadura.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.sinadura.net/c/blogs/find_entry?entryId=181338" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.sinadura.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.sinadura.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.sinadura.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.sinadura.net/c/blogs/find_entry?entryId=181048" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.sinadura.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.sinadura.net/c/blogs/find_entry?entryId=180848" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.sinadura.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.sinadura.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>
  <entry>
    <title>Nace sinadura servicios de firma digital</title>
    <link rel="alternate" href="http://www.sinadura.net/c/blogs/find_entry?entryId=175834" />
    <author>
      <name>Sinadura Core Team</name>
    </author>
    <id>http://www.sinadura.net/c/blogs/find_entry?entryId=175834</id>
    <updated>2011-09-05T16:46:40Z</updated>
    <published>2011-08-08T09:25:50Z</published>
    <summary type="html">&lt;p&gt;
	&lt;span style="font-size:14px;"&gt;Nace el proyecto sinadura, un software promovido por la asociación &lt;strong&gt;&lt;a href="http://www.esle.eu"&gt;&lt;span style="color:#000080;"&gt;ESLE&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt; y financiado dentro del programa &lt;strong&gt;&lt;a href="https://www.spri.es/kzlankidetza/home.asp"&gt;&lt;span style="color:#000080;"&gt;KZ Lankidetza&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt; de SPRI. Es un proyecto licenciado GPL y que permite firmar pdfs en entornos multiplataforma.&lt;/span&gt;&lt;/p&gt;</summary>
    <dc:creator>Sinadura Core Team</dc:creator>
    <dc:date>2011-08-08T09:25:50Z</dc:date>
  </entry>
  <entry>
    <title>Migrando contenidos de Sharepoint a Alfresco</title>
    <link rel="alternate" href="http://www.sinadura.net/c/blogs/find_entry?entryId=179865" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.sinadura.net/c/blogs/find_entry?entryId=179865</id>
    <updated>2011-10-26T17:12:40Z</updated>
    <published>2011-10-26T16:45:13Z</published>
    <summary type="html">&lt;p style="text-align: justify;"&gt;
	&lt;img alt="" src="http://www.sinadura.net/image/image_gallery?uuid=608c7c88-04f2-4f79-8cae-3324815f8d46&amp;amp;groupId=10102&amp;amp;t=1319648976278" style="width: 225px; height: 65px;" /&gt;&lt;img alt="" src="http://www.sinadura.net/image/image_gallery?uuid=d8bbbcaf-1e77-48eb-80d0-5b26b05bd9ae&amp;amp;groupId=10102&amp;amp;t=1319649128518" style="width: 161px; height: 139px;" /&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	El otro d&amp;iacute;a ca&amp;iacute;a en el blog de Yerbabuena en un post sobre las &amp;quot;&lt;a href="http://blog.yerbabuena.es/2011/03/5-razones-para-no-usar-sharepoint-2010.html" target="_blank"&gt;5 razones para no usar Sharepoint 2010&lt;/a&gt;&amp;quot; y me encontraba en una problem&amp;aacute;tica de proyecto relacionada con este producto de Microsoft. Record&amp;eacute; una presentaci&amp;oacute;n/workshop del noviembre pasado en el C&amp;iacute;rculo de Empresarios de Bizkaia (CEBEK), y en donde presentamos una matriz comparativa entre Alfresco y Sharepoint junto con otra empresa (partner de Microsoft) en un coloquio de soluciones de gesti&amp;oacute;n documental. No a&amp;ntilde;adir&amp;eacute; m&amp;aacute;s razones que las expuestas por los chicos de Yerbabuena: seguridad, precio, interoperabilidad, escalabilidad y comunidad, sino unas notas sobre una experiencia personal en un proyecto reciente en relaci&amp;oacute;n a los puntos comentados.&lt;br /&gt;
	&lt;br /&gt;
	En mi opini&amp;oacute;n, una de las principales contras que tiene una implantaci&amp;oacute;n de Sharepoint en cuanto a la escalabilidad se refiere es que &amp;uacute;nicamente en la versi&amp;oacute;n 2010 y con las licencias m&amp;aacute;s caras, se pueden alojar los datos en un filesystem en vez de en la base de datos (SQL Server). Esto es un ** must ** en un gestor documental empresarial que se precie, o de cualquier aplicaci&amp;oacute;n que guarde documentos, porque el rendimiento de la base de datos cuando el repositorio es muy grande puede ser realmente malo (pensad en un repositorio de teras de informaci&amp;oacute;n y en una base de datos SQL Server con ese tama&amp;ntilde;o, y con una concurrencia seria de usuarios accediendo a ese servidor).&lt;br /&gt;
	&lt;br /&gt;
	En mi caso concreto, estaba utilizando Sharepoint 2003 y pretend&amp;iacute;a extraer una copia del repositorio, para migrarlo a Alfresco ECM. Finalmente encontre un c&amp;oacute;digo C# que permite hacer esta tarea &lt;a href="http://blog.krichie.com/2011/06/02/spiefolder-for-sharepoint-2010/"&gt;SPIEFolder&lt;/a&gt; (desde el servidor), y que es conocido en el mundillo de Sharepoint (hay tambi&amp;eacute;n versiones diferentes del conector para 2007 y 2010). De esa manera descargu&amp;eacute; la estructura de documentos via Webdav a Alfresco. Pero es que resulta dif&amp;iacute;cil, una tarea tan sencilla como un backup incremental de ficheros o un simple y llano (&amp;quot;copiame por favor en un cd los documentos de mis oficinas colaborativas&amp;quot;). Esto es un ejemplo t&amp;iacute;pico de lo que ocurre con un producto cerrado, que si que es verdad que hay ciertos servicios web (contados), ciertas API&amp;#39;s expuestas para interaccionar (en su stack), pero resulta en general dif&amp;iacute;cil y tedioso hacer cualquier cosa. Si es cierto, que Microsoft esta involucrado en el est&amp;aacute;ndar CMIS, y que recientemente tambi&amp;eacute;n tengo noticias de un conector SQL Server para Linux. En Alfresco por ejemplo, la carga de documentos se realiz&amp;oacute; utilizando el repositorio como unidad compartida Webdav (que es un protocolo est&amp;aacute;ndar). Pero se pod&amp;iacute;a haber hecho tambi&amp;eacute;n a trav&amp;eacute;s de otros canales est&amp;aacute;ndar como FTP o CIFS, desde m&amp;oacute;dulos de Alfresco especializados para cargas masivas, o desde programaci&amp;oacute;n con REST, Web Services y CMIS. En el caso de las API&amp;#39;s, la diferencia estriba en estas son mucho m&amp;aacute;s completas, y exponen gran parte del core, adem&amp;aacute;s de&amp;nbsp; extensibles proporcionando de m&amp;aacute;s libertad y flexibilidad al desarrollador. Y por esta raz&amp;oacute;n, un producto de software libre va a proporcionar much&amp;iacute;sima mas interoperabilidad que otros productos privativos, incluso m&amp;aacute;s que Sharepoint con otros productos de Microsoft.&lt;br /&gt;
	&lt;br /&gt;
	Otros problemas de la migraci&amp;oacute;n derivaron de obtener los usuarios y permisos de las oficinas colaborativas, y en este caso tuvimos que atacar directamente a la base de datos de Sharepoint para via ACP&amp;#39;s generar un mapeo de permisos de directorio para Alfresco con los usuarios y roles correspondientes. Tambi&amp;eacute;n se pod&amp;iacute;a haber orientado via Webscript creando un servicio para cada site de Sharepoint, pero finalmente nos decantamos por crear la estructura de carpetas y permisos via ACP, para hacer posteriormente la carga de datos via Webdav. En el caso de los usuarios , ten&amp;iacute;amos dos conjuntos en Sharepoint, los internos, que se migraron configurando el directorio activo de Windows como subsistema de autenticaci&amp;oacute;n de Alfresco (Sharepoint se autenticaba contra el AD), y los usuarios externos, que se gestionaban en el propio Sharepoint y se migraron a otro servidor de directorio LDAP externo.&lt;br /&gt;
	&lt;br /&gt;
	Enlaces:&lt;br /&gt;
	&lt;br /&gt;
	&lt;span class="Object" id="OBJ_PREFIX_DWT264"&gt;&lt;a href="http://blog.yerbabuena.es/2011/03/5-razones-para-no-usar-sharepoint-2010.html" target="_blank"&gt;http://blog.yerbabuena.es/2011/03/5-razones-para-no-usar-sharepoint-2010.html&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
	&lt;span class="Object" id="OBJ_PREFIX_DWT265"&gt;&lt;a href="http://blog.krichie.com/2011/06/02/spiefolder-for-sharepoint-2010/" target="_blank"&gt;http://blog.krichie.com/2011/06/02/spiefolder-for-sharepoint-2010/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
	&lt;span class="Object" id="OBJ_PREFIX_DWT266"&gt;&lt;a href="http://blog.krichie.com/2011/08/26/spiefolder-for-sharepoint-20072010/" target="_blank"&gt;http://blog.krichie.com/2011/08/26/spiefolder-for-sharepoint-20072010/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2011-10-26T16:45:13Z</dc:date>
  </entry>
  <entry>
    <title>normalizando nombres en java</title>
    <link rel="alternate" href="http://www.sinadura.net/c/blogs/find_entry?entryId=179701" />
    <author>
      <name>Gustavo Fernandez</name>
    </author>
    <id>http://www.sinadura.net/c/blogs/find_entry?entryId=179701</id>
    <updated>2011-10-24T16:24:21Z</updated>
    <published>2011-10-24T16:19:35Z</published>
    <summary type="html">&lt;p&gt;
	Un problema t&amp;iacute;pico en los programas que gestionan &lt;strong&gt;uploads/downloads&lt;/strong&gt; de ficheros es el nombre del fichero que los usuarios dan a los ficheros. Es decir, existe la no muy buena costumbre, entre los &lt;strong&gt;usuarios de windows y mac principalmente&lt;/strong&gt;, de usar nombres de ficheros con &lt;strong&gt;t&amp;iacute;ldes&lt;/strong&gt; &lt;strong&gt;espacios en blanco etc...&lt;/strong&gt; que suele originar problemas a la hora de almacenarlos en los filesystems ya que la codificaci&amp;oacute;n en bytes de algunos caracteres en los distintos encodings no es la misma. Es decir no se codifica de la misma manera en &lt;strong&gt;UTF-8 que en ISO-8859-1&lt;/strong&gt;. Por tanto suele ser una buena pr&amp;aacute;ctica normalizar esos nombres sustituyendo las &lt;strong&gt;tildes por sus equivalente sin tilde y las &amp;ntilde; por n&lt;/strong&gt;. Adem&amp;aacute;s tambi&amp;eacute;n es una buena idea evitar los espacios en blanco para que las &lt;strong&gt;urls no tengan la pinta de %20% &lt;/strong&gt;etc... En java para realizar esa tarea se puede hacer uso de una expresi&amp;oacute;n regular y de un Normalizador de texto. El c&amp;oacute;digo es el siguiente:&lt;/p&gt;
&lt;p&gt;
	&lt;strong&gt;&amp;nbsp; private static String normalizador(String str)&lt;br /&gt;
	&amp;nbsp; {&lt;br /&gt;
	&amp;nbsp; &amp;nbsp; return Normalizer.normalize(str, Normalizer.Form.NFD).replaceAll(&amp;quot;\\p{InCombiningDiacriticalMarks}+&amp;quot;, &amp;quot;&amp;quot;).replaceAll(&amp;quot; &amp;quot;, &amp;quot;+&amp;quot;);&lt;br /&gt;
	&amp;nbsp;&amp;nbsp; }&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	Que dado un string como &lt;strong&gt;&amp;quot;cami&amp;oacute;n con &amp;Ntilde;&amp;quot;&lt;/strong&gt; devuelve &lt;strong&gt;camion+con+n&lt;/strong&gt;. Este m&amp;eacute;todo es preferible al tipico replaceAll(&amp;quot;&amp;eacute;&amp;quot;,&amp;quot;e&amp;quot;).replaceAll(&amp;quot;&amp;aacute;&amp;quot;,&amp;quot;a&amp;quot;) etc.. ya que adem&amp;aacute;s de servir para otros idiomas evita la problematica de que en el c&amp;oacute;digo fuente &amp;eacute; est&amp;aacute; codificada en un enc&amp;oacute;digo concreto que puede hace que el replaceAll no haga nada.&lt;/p&gt;
&lt;p&gt;
	Dejo el link de un art&amp;iacute;culo interesante relacionado con el tema, &lt;a href="http://www.rgagnon.com/javadetails/java-0456.html" target="_blank"&gt;http://www.rgagnon.com/javadetails/java-0456.html&lt;/a&gt;&lt;/p&gt;</summary>
    <dc:creator>Gustavo Fernandez</dc:creator>
    <dc:date>2011-10-24T16:19:35Z</dc:date>
  </entry>
  <entry>
    <title>Conferencia Firma e identidad digital con Sinadura Suite en el proximo Libre software world conference</title>
    <link rel="alternate" href="http://www.sinadura.net/c/blogs/find_entry?entryId=179573" />
    <author>
      <name>Kristina Patxo</name>
    </author>
    <id>http://www.sinadura.net/c/blogs/find_entry?entryId=179573</id>
    <updated>2011-10-20T11:39:38Z</updated>
    <published>2011-10-20T11:38:42Z</published>
    <summary type="html">&lt;div class="portlet-borderless-container" style=""&gt;
	&lt;div class="portlet-body"&gt;
		&lt;div class="journal-content-article" id="article_10097_18043_122593_1.0"&gt;
			&lt;p&gt;
				Los pr&amp;oacute;ximos 9 y 10 de Noviembre zylk.net presentar&amp;aacute; &lt;a href="http://www.libresoftwareworldconference.com/firma-e-identidad-digital-con-sinadura-suite"&gt;Firma e identidad digital con Sinadura Suite&lt;/a&gt; en el libre software world conference de Zaragoza.&lt;/p&gt;
			&lt;p&gt;
				La ponencia pretende ofrecer una visi&amp;oacute;n general de la firma digital en entornos de software libre concretamente en sistemas operativos GNU/Linux.&lt;/p&gt;
			&lt;p&gt;
				Una herramienta en la toma de decisiones por votaciones y actas.&lt;/p&gt;
			&lt;p&gt;
				Un repositorio donde almacenar las distintas contrase&amp;ntilde;as que vamos utilizando.&lt;/p&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;</summary>
    <dc:creator>Kristina Patxo</dc:creator>
    <dc:date>2011-10-20T11:38:42Z</dc:date>
  </entry>
  <entry>
    <title>En la Alfresco Community Meetup de Madrid 2011</title>
    <link rel="alternate" href="http://www.sinadura.net/c/blogs/find_entry?entryId=179348" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.sinadura.net/c/blogs/find_entry?entryId=179348</id>
    <updated>2011-10-16T15:18:26Z</updated>
    <published>2011-10-16T15:01:44Z</published>
    <summary type="html">&lt;p style="text-align: justify;"&gt;
	El pasado martes asist&amp;iacute; en Madrid a la Alfresco Community Meetup 2011, una reuni&amp;oacute;n de la comunidad de Alfresco donde tuve la oportunidad de conocer a distintos bloggers, foreros, desarrolladores y empresas que trabajan con el gestor documental Alfresco, y hacernos eco de las distintas novedades de la nueva versi&amp;oacute;n de Alfresco 4.0 Community. Fue una reuni&amp;oacute;n muy especial, donde pusimos cara a mucha de la gente que contribuye en el &lt;a href="http://forums.alfresco.com/es/" target="_blank"&gt;foro de Alfresco&lt;/a&gt;, y a la que en muchos casos s&amp;oacute;lo conoc&amp;iacute;amos a trav&amp;eacute;s de las firmas de los usuarios, y en algunos casos s&amp;oacute;lo a trav&amp;eacute;s del nick.&lt;br /&gt;
	&lt;br /&gt;
	Entre los asistentes, por parte de Alfresco, estuvieron Toni de la Fuente y Rui Monteiro. Toni nos hizo una demostraci&amp;oacute;n de las nuevas caracter&amp;iacute;sticas de la interfaz de Alfresco Share, como el drag and drop de documentos, las mejoras en las vistas de detalle de metadatos, o el visor html5 para los documentos. Tambi&amp;eacute;n nos ense&amp;ntilde;&amp;oacute; un servicio social interesante para publicar desde Alfresco en diversos servicios externos, como blogs (wordpress y typepad), videos (youtube), fotos (flickr)..... y su correspondiente difusi&amp;oacute;n en redes sociales como twitter, facebook o linkedin. Y por ultimo, vimos en acci&amp;oacute;n la nueva aplicaci&amp;oacute;n de Alfresco para el iPad.&lt;br /&gt;
	&lt;br /&gt;
	Os dejo un par de enlaces con esas novedades:&lt;a href="http://wiki.alfresco.com/wiki/Alfresco_Community_4.0.a"&gt;&lt;br /&gt;
	&lt;br /&gt;
	http://wiki.alfresco.com/wiki/Alfresco_Community_4.0.a&lt;/a&gt;&lt;a href="http://www.slideshare.net/alfresco/get-ready-for-alfresco-40" target="_blank"&gt;&lt;br /&gt;
	http://www.slideshare.net/alfresco/get-ready-for-alfresco-40&lt;/a&gt;&lt;br /&gt;
	&lt;br /&gt;
	En la reuni&amp;oacute;n pudimos discutir (en el sentido ingl&amp;eacute;s de la palabra) sobre diferentes orientaciones en proyectos de gesti&amp;oacute;n documental de los asistentes, aportando en muchos casos un feedback muy positivo y por otro lado necesario en una comunidad de usuarios y desarrolladores. Y tuvimos oportunidad de comentar directamente con Toni y Rui aquellas de las caracter&amp;iacute;sticas que anhelamos en nuestras implantaciones de Alfresco, y el tipo proyectos que afrontamos. Tambi&amp;eacute;n hablamos de otras caracter&amp;iacute;sticas incluidas en la nueva versi&amp;oacute;n de Alfresco, como el administrador de categor&amp;iacute;as de Alfresco Share y la gesti&amp;oacute;n de la papelera. O desde el punto de vista de la arquitectura, la posibilidad de externalizar una parte cr&amp;iacute;tica del repositorio como son los &amp;iacute;ndices de Lucene a un servidor externo SOLR.&lt;a href="http://ecmarchitect.com/archives/2011/10/09/1473" target="_blank"&gt;&lt;br /&gt;
	&lt;br /&gt;
	http://ecmarchitect.com/archives/2011/10/09/1473&lt;/a&gt;&lt;br /&gt;
	&lt;br /&gt;
	Posteriormente Cristina Mart&amp;iacute;n y Patricia Yag&amp;uuml;e nos ense&amp;ntilde;aron sus primeras experiencias de comunidad con un proyecto de google code para implementar una capa de servicios basada en CMIS.&lt;a href="http://code.google.com/p/capa-de-servicios-cmis" target="_blank"&gt;&lt;br /&gt;
	&lt;br /&gt;
	http://code.google.com/p/capa-de-servicios-cmis&lt;/a&gt;&lt;br /&gt;
	&lt;br /&gt;
	Y siguiendo con CMIS, un servidor comento dos de los proyectos de desarrollo con Alfresco como repositorio CMIS y algunas de las problem&amp;aacute;ticas surgidas y que ya comentar&amp;eacute; pr&amp;oacute;ximamente en otro post.&lt;br /&gt;
	&amp;nbsp;- &lt;strong&gt;Sinadura ECM&lt;/strong&gt;: Es un conector de gesti&amp;oacute;n documental para la herramienta de firma digital &lt;a href="http://www.sinadura.net" target="_blank"&gt;sinadura&lt;/a&gt;, que implementa las principales acciones de descarga, navegaci&amp;oacute;n, upload y actualizaci&amp;oacute;n de documentos en Alfresco ECM, que ya hemos comentado aqu&amp;iacute; en otras ocasiones.&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;img alt="" src="http://www.sinadura.net/image/image_gallery?uuid=e43b1b32-d753-4b46-ab17-44ff44764f73&amp;amp;groupId=10102&amp;amp;t=1318777799650" style="width: 563px; height: 249px;" /&gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;nbsp;- &lt;strong&gt;Udala ECM&lt;/strong&gt;:&amp;nbsp; Es una aplicaci&amp;oacute;n J2EE que gestiona del ciclo de vida de un registro de entrada/salida y expedientes de un Ayuntamiento y que utiliza Alfresco ECM como backend documental, el cual es consumido como repositorio CMIS. La aplicaci&amp;oacute;n incorpora un conjunto de formularios en donde se definen los metadatos y documentos de las carpetas de registros y expedientes, as&amp;iacute; como un buscador especializado en base a los metadatos personalizados de los tipos registro y expediente.&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;img alt="" src="http://www.sinadura.net/image/image_gallery?uuid=d9fb447f-387c-4d89-9c19-d6cc6872aa71&amp;amp;groupId=10102&amp;amp;t=1318777811368" style="width: 640px; height: 318px;" /&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;br /&gt;
	Como colof&amp;oacute;n, la parte surrealista como dijo Toni, la puso nuestro encuentro fortuito tras la reuni&amp;oacute;n con los componentes de Muchachada Nui, que de esto de &lt;a href="http://www.youtube.com/watch?v=riYs74kGqFU" target="_blank"&gt;Al fresco&lt;/a&gt; saben un rato :)&lt;br /&gt;
	&lt;br /&gt;
	Os dejo as&amp;iacute; mismo, un enlace al &lt;a href="http://crisinthecloud.blogspot.com/2011/10/meetup-de-alfresco-en-madrid-2011.html" target="_blank"&gt;blog de Cristina&lt;/a&gt; donde hay algunas de las fotos del evento.&lt;/p&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2011-10-16T15:01:44Z</dc:date>
  </entry>
  <entry>
    <title>Abierta al público la versión 3 de Sinadura Desktop</title>
    <link rel="alternate" href="http://www.sinadura.net/c/blogs/find_entry?entryId=178543" />
    <author>
      <name>Joseba Martos</name>
    </author>
    <id>http://www.sinadura.net/c/blogs/find_entry?entryId=178543</id>
    <updated>2011-09-30T11:57:55Z</updated>
    <published>2011-09-30T10:58:24Z</published>
    <summary type="html">&lt;p&gt;
	&lt;span style="font-size:14px;"&gt;Tras estar casi seis meses a disposición de los miembros de la &lt;a href="http://www.sinadura.net/community"&gt;comunidad&lt;/a&gt; de Sinadura, la versión 3 de &lt;a href="http://www.sinadura.net/products-and-services/sinadura-desktop/overview"&gt;Sinadura Desktop&lt;/a&gt; ha sido abierta al público para su uso.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;span style="font-size:14px;"&gt;Estos seis meses han servido para probar la estabilidad de la nueva versión y para recibir propuestas y mejoras. La herramienta cuenta con la suficiente madurez para su apertura pública a todo el mundo.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;span style="font-size:14px;"&gt;Sinadura Desktop, junto al proyecto Sinadura en general, ha ido creciendo con el paso del tiempo, esto ha hecho que crezca la demanda tanto de los productos y servicios de Sinadura, como de necesidades de la comunidad. En respuesta a esta demanda y coincidiendo con la publicación de la nueva versión, hemos comenzado un proceso de reestructuración y remodelado del sitio web. Ahora la comunidad tiene más información y herramientas para participar en el proyecto y las empresas e instituciones tienen más recursos enterprise en sus manos. El sitio web y los recursos y herramientas que el mismo ofrece seguirán mejorando según avance el proyecto.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;span style="font-size:14px;"&gt;Os animamos, a los que aún no lo hayais hecho, a &lt;a href="http://www.sinadura.net/community/downloads/-/document_library/view/157799"&gt;descargar&lt;/a&gt; y &lt;a href="http://www.sinadura.net/community/get-involved/test"&gt;probar&lt;/a&gt; Sinadura Desktop 3.0, seguiremos recibiendo con agradecimiento informes de posibles bugs y propuestas de mejora o &lt;a href="http://www.sinadura.net/community/join-us"&gt;colaboración&lt;/a&gt; en el proyecto.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;span style="font-size:14px;"&gt;¡Que lo disfrutéis!&lt;/span&gt;&lt;/p&gt;</summary>
    <dc:creator>Joseba Martos</dc:creator>
    <dc:date>2011-09-30T10:58:24Z</dc:date>
  </entry>
  <entry>
    <title>Nace Sinadura servicios de firma digital</title>
    <link rel="alternate" href="http://www.sinadura.net/c/blogs/find_entry?entryId=175826" />
    <author>
      <name>Sinadura Core Team</name>
    </author>
    <id>http://www.sinadura.net/c/blogs/find_entry?entryId=175826</id>
    <updated>2011-09-05T16:46:11Z</updated>
    <published>2011-08-08T09:19:42Z</published>
    <summary type="html">&lt;p&gt;
	&lt;span style="font-size:14px;"&gt;Nace Sinadura, servicios de firma digital. Para más información visita nuestra web y fíjate en las nuevas secciones como productos y servicios, partners, comunidad...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
	&lt;span style="font-size: 14px;"&gt;En breve publicaremos la versión completa 3.0 de Sinadura Desktop y también la de Votos y actas versión 1.0, ambos con su código fuente.&lt;/span&gt;&lt;/p&gt;</summary>
    <dc:creator>Sinadura Core Team</dc:creator>
    <dc:date>2011-08-08T09:19:42Z</dc:date>
  </entry>
  <entry>
    <title>Nodos raiz o rootPaths de unidades compartidas y Alfresco Share</title>
    <link rel="alternate" href="http://www.sinadura.net/c/blogs/find_entry?entryId=175601" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.sinadura.net/c/blogs/find_entry?entryId=175601</id>
    <updated>2011-08-04T15:23:35Z</updated>
    <published>2011-08-04T15:10:10Z</published>
    <summary type="html">&lt;div&gt;
	En la raiz del repositorio de Alfresco, en lo que usualmente se denomina Espacio de Empresa (Company Home), se disponen por defecto una serie de directorios esenciales en toda instalaci&amp;oacute;n y que con frecuencia los usuarios/clientes no quieren en la aplicaci&amp;oacute;n web, o en los clientes de unidad compartida FTP, CIFS o Webdav. Es el caso de los espacios:&lt;/div&gt;
&lt;ul&gt;
	&lt;li&gt;
		&amp;nbsp;Diccionario de datos&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;Sites&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;Espacios personales&lt;/li&gt;
	&lt;li&gt;
		&amp;nbsp;Espacio personal del invitado&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
	con mencion especial a los dos primeros, ya que su borrado accidental por desconocimiento deriva en numerosos problemas.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	Para solventar esta problematica y quitar/ocultar el acceso a estos espacios es com&amp;uacute;n definir unas raices del repositorio por debajo de las cuales se trabajar&amp;aacute; en el cliente web colaborativo (Alfresco Share), o en los accesos via sistema virtual de ficheros, ya sea CIFS, FTP o Webdav.&lt;/div&gt;
&lt;div&gt;
	&lt;br /&gt;
	Consideremos en adelante que los contenidos se disponen bajo el espacio ACME, por debajo de Espacio de Empresa. En el caso de Alfresco Share, el nodo raiz se configura en el archivo de configuaci&amp;oacute;n del directorio de extensiones web (share-config-custom.xml). Ahi podemos definir el root-node:&lt;/div&gt;
&lt;div&gt;
	&lt;br /&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;lt;config evaluator=&amp;quot;string-compare&amp;quot; condition=&amp;quot;RepositoryLibrary&amp;quot; replace=&amp;quot;true&amp;quot;&amp;gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;!--&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Root nodeRef or xpath expression for top-level folder.&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; e.g. alfresco://user/home, /app:company_home/st:sites/cm:site1&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; If using an xpath expression, ensure it is properly ISO9075 encoded here.&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;--&amp;gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;root-node&amp;gt;/app:company_home/cm:ACME&amp;lt;/root-node&amp;gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	Con respecto a esta configuraci&amp;oacute;n, es necesario considerar el problema del buscador de Alfresco Share 3.4 cuando se define el root-node, que ya comentamos &lt;a href="http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/busquedas-de-tipos-de-contenidos-en-alfresco-share" target="_blank"&gt;aqu&amp;iacute;&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
	&lt;br /&gt;
	En el caso del Webdav, es necesario definir el rootPath en el web.xml de Alfresco. De esta manera en $ALF_HOME/tomcat/webapps/alfresco/WEB-INF/web.xml&lt;/div&gt;
&lt;div&gt;
	&lt;br /&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;lt;context-param&amp;gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;param-name&amp;gt;rootPath&amp;lt;/param-name&amp;gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;param-value&amp;gt;/app:company_home/cm:ACME&amp;lt;/param-value&amp;gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/context-param&amp;gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;br /&gt;
	Y en el caso, de los subsistemas de ficheros (fileServer) se puede llevar a cabo esta config mediante un archivo custom-file-servers-context.xml en el directorio extension, en la ruta:&lt;/div&gt;
&lt;div&gt;
	&lt;br /&gt;
	En $ALF_HOME/tomcat/shared/classes/alfresco/extension/subsystems/fileServers/default/default/custom-file-servers-context.xml&lt;/div&gt;
&lt;div&gt;
	&lt;br /&gt;
	&lt;strong&gt;&amp;lt;filesystem name=&amp;quot;${filesystem.name}&amp;quot;&amp;gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;store&amp;gt;workspace://SpacesStore&amp;lt;/store&amp;gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;rootPath&amp;gt;/app:company_home/cm:ACME&amp;lt;/rootPath&amp;gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
	&lt;br /&gt;
	Este archivo es una copia modificada del archivo file-servers-context.xml en la ruta de la aplicacion de alfresco. Ahi es posible editar el rootPath y configurar otras cosas interesantes como las acciones de escritorio en CIFS (que usualmente nos piden tambi&amp;eacute;n que desaparezcan). Tambien es usual como requisito, que solo aparezca el repositorio y no el directorio AVM, con lo cual es necesario comentar el bean correspondiente.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	&lt;strong&gt;Enlaces:&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
	&lt;a href="http://  http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/busquedas-de-tipos-de-contenidos-en-alfresco-share" target="_blank"&gt;http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/busquedas-de-tipos-de-contenidos-en-alfresco-share&lt;/a&gt;&lt;/div&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2011-08-04T15:10:10Z</dc:date>
  </entry>
  <entry>
    <title>Creación de contenidos personalizados en Alfresco Share</title>
    <link rel="alternate" href="http://www.sinadura.net/c/blogs/find_entry?entryId=174619" />
    <author>
      <name>Cesar Capillas</name>
    </author>
    <id>http://www.sinadura.net/c/blogs/find_entry?entryId=174619</id>
    <updated>2011-07-20T08:34:16Z</updated>
    <published>2011-07-20T08:25:13Z</published>
    <summary type="html">&lt;p style="text-align: justify;"&gt;
	Alfresco Share presenta en sus ultimas versiones (Community y Enterprise 3.4) importantes mejoras en la definici&amp;oacute;n de formularios de tipos de contenidos, permitiendo definir plantillas personalizadas para los diferentes componentes o definir estilos css. La configuraci&amp;oacute;n b&amp;aacute;sica se realiza por un lado en el archivo del esquema del modelo, donde definimos los tipos, aspectos, propiedades, asociaciones y constrains, y por otro, en el archivo de configuraci&amp;oacute;n de Alfresco Share, donde se configuran las visualizaciones de los formularios de creaci&amp;oacute;n, edici&amp;oacute;n y b&amp;uacute;squeda asociadas a los tipos de contenido.&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;br /&gt;
	El proceso b&amp;aacute;sico de creaci&amp;oacute;n de un tipo de contenido especializado en Alfresco Share, es a&amp;ntilde;adir un documento o carpeta base, y especializar el tipo a uno definido por el usuario. Posteriormente, en un segundo paso, es necesario rellenar sus metadatos. Este proceso en general es m&amp;aacute;s bien poco usable, y se recurre en ocasiones a reglas de contenido que automaticen la especializaci&amp;oacute;n del tipo (al menos), en el proceso de creaci&amp;oacute;n. En este sentido, sorprende un poco, que en el proceso de subida de documentos o en el de creaci&amp;oacute;n de carpetas no se contemplen tipos especializados como se hacia en los wizards de contenido de Alfresco Explorer. Existen un par de workarounds para aliviar estas situaciones.&lt;br /&gt;
	&lt;br /&gt;
	El primero es definir en un fichero de js las opciones (los diferentes tipos) de un combo con los tipos en el componente de upload de Alfresco Share. Esto se hace en:&lt;br /&gt;
	&lt;br /&gt;
	$ALF_HOME/tomcat/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/upload/flash-upload.get.js&lt;br /&gt;
	&lt;br /&gt;
	&amp;nbsp;var contentTypes = [&lt;br /&gt;
	&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id: &amp;quot;cm:content&amp;quot;,&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value: &amp;quot;cm_content&amp;quot;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp; },&lt;br /&gt;
	&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id: &amp;quot;ac:acta&amp;quot;,&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value: &amp;quot;ac_acta&amp;quot;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp; },&lt;br /&gt;
	&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id: &amp;quot;fac:facturae&amp;quot;,&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value: &amp;quot;fac_facturae&amp;quot;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
	&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; id: &amp;quot;bug:incidencia&amp;quot;,&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value: &amp;quot;bug_incidencia&amp;quot;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp; }&lt;/strong&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; ];&lt;br /&gt;
	&lt;br /&gt;
	El resultado es el siguiente:&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;img alt="" src="http://www.sinadura.net/image/image_gallery?uuid=bd423b4e-c197-4ba4-8ec0-cf2104432b48&amp;amp;groupId=10102&amp;amp;t=1311150459132" style="width: 572px; height: 357px;" /&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;br /&gt;
	Con esta ligera modificaci&amp;oacute;n podemos subir un conjunto de documentos y asignar a cada uno los diferentes tipos documentales, como los definidos en el ejemplo, Acta, Factura o Incidencia. Eso s&amp;iacute;, en un paso posterior tendremos que editar los metadatos. El componente de Records Management tambi&amp;eacute;n modifica un poco el uploader de flash, y a&amp;ntilde;ade la posibilidad de definir un tipo seleccionable de un combo desplegable, que se aplica a todos los documentos que se suben a un espacio, y no individualmente como en este caso.&lt;br /&gt;
	&lt;br /&gt;
	El segundo es a trav&amp;eacute;s de tipos de contenido con mimetype editable digamos, como documentos de texto, html o xml. Estos se pueden definir en un archivo de configuracion xml (repo-toolbar.get.config.xml). Para tipos de contenido tipo folder la cosa esta a&amp;uacute;n peor, ya que tenemos que servirnos en principio de las reglas de contenido. Sin embargo, podemos llegar a utilizar este componente create-content, ignorar el mimetype y asignarle un itemId relativo a nuestro tipo de contenido tipo carpeta. Con la configuraci&amp;oacute;n de formularios correcta en share-config-custom.xml el proceso de creaci&amp;oacute;n de una carpeta dar&amp;aacute; paso a un formulario de inserci&amp;oacute;n de metadatos.&lt;br /&gt;
	&lt;br /&gt;
	De este modo en:&lt;br /&gt;
	&lt;br /&gt;
	$ALF_HOME/tomcat/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/documentlibrary/repo-toolbar.get.config.xml&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;toolbar&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;createContent&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;content mimetype=&amp;quot;text/plain&amp;quot; icon=&amp;quot;plain-text&amp;quot; label=&amp;quot;menu.create-content.text&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;content mimetype=&amp;quot;text/html&amp;quot; icon=&amp;quot;html&amp;quot; label=&amp;quot;menu.create-content.html&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;content mimetype=&amp;quot;text/xml&amp;quot; icon=&amp;quot;xml&amp;quot; label=&amp;quot;menu.create-content.xml&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;&amp;lt;content icon=&amp;quot;plain-text&amp;quot; label=&amp;quot;Registro E/S&amp;quot; itemid=&amp;quot;ud:registro&amp;quot;/&amp;gt;&lt;/strong&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/createContent&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;actionSets&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;actionSet id=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;action type=&amp;quot;action-link&amp;quot; id=&amp;quot;onActionCopyTo&amp;quot; label=&amp;quot;menu.selected-items.copy&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;action type=&amp;quot;action-link&amp;quot; id=&amp;quot;onActionMoveTo&amp;quot; permission=&amp;quot;delete&amp;quot; label=&amp;quot;menu.selected-items.move&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;action type=&amp;quot;action-link&amp;quot; id=&amp;quot;onActionDelete&amp;quot; permission=&amp;quot;delete&amp;quot; label=&amp;quot;menu.selected-items.delete&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;action type=&amp;quot;action-link&amp;quot; id=&amp;quot;onActionAssignWorkflow&amp;quot; asset=&amp;quot;document&amp;quot; label=&amp;quot;menu.selected-items.assign-workflow&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/actionSet&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/actionSets&amp;gt;&lt;br /&gt;
	&amp;lt;/toolbar&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	donde Registro E/S es un tipo de contenido basado en cm:folder&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;img alt="" src="http://www.sinadura.net/image/image_gallery?uuid=eabe46b8-71c5-4985-b0f7-78ace9d2c096&amp;amp;groupId=10102&amp;amp;t=1311150459141" style="width: 682px; height: 123px;" /&gt;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: justify;"&gt;
	&lt;img alt="" src="http://www.sinadura.net/image/image_gallery?uuid=ac8bedf2-cbb5-4708-953a-25299c2d8712&amp;amp;groupId=10102&amp;amp;t=1311150459137" style="width: 640px; height: 461px;" /&gt;&lt;br /&gt;
	&lt;br /&gt;
	La unica pega es que no esta del todo pensado para eso y una vez creado el formulario, el js de create-content-mgr lo redirige a las propiedades del documento (document-details). Podemos modificar un poco el js para que en cualquiera de los casos se redirija a la pantalla anterior, en vez de a las propiedades y listo. Esto se hace en los archivos:&lt;br /&gt;
	&lt;br /&gt;
	$ALF_HOME/tomcat/webapps/share/components/create-content$ vim create-content-mgr.js&lt;br /&gt;
	$ALF_HOME/tomcat/webapps/share/components/create-content$ vim create-content-mgr-min.js&lt;/p&gt;
&lt;pre&gt;
//window.location.href = $siteURL(&amp;quot;document-details?nodeRef=&amp;quot; + nodeRef.toString());
history.go(-1);

&lt;/pre&gt;
&lt;p&gt;
	&lt;strong&gt;Enlaces:&lt;/strong&gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;span class="Object" id="OBJ_PREFIX_DWT1040"&gt;&lt;a href="http://loftux.com/2010/03/22/set-the-document-type-on-file-upload/" target="_blank"&gt;http://loftux.com/2010/03/22/set-the-document-type-on-file-upload/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
	&lt;span class="Object" id="OBJ_PREFIX_DWT1041"&gt;&lt;a href="http://www.iptech-offshore.net/blog/2010/06/15/alfresco-share-tip-content-type-selection-when-uploading-a-document/" target="_blank"&gt;http://www.iptech-offshore.net/blog/2010/06/15/alfresco-share-tip-content-type-selection-when-uploading-a-document/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</summary>
    <dc:creator>Cesar Capillas</dc:creator>
    <dc:date>2011-07-20T08:25:13Z</dc:date>
  </entry>
</feed>


