17 feb 2012

Personalizar los metadatos a mostrar en la vista detallada de repositorio en alfresco 3.4.d (share)

Teniendo en cuenta que hemos extendido el modelo y queremos mostrar la propiedad cgsi:estado.
para ello debemos de llevar a cabo los siguientes cambios tanto en archivos javascript,archivos properties de mensajes y plantillas de freemaker.
1.-Necesitaremos editar la plantilla de freemaker item.lib.ftl  que se encuentra en la ruta /webapps/alfresco/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/slingshot/documentlibrary.
y añadir despúes del cierre de la etiqueta <#if item.linkedNode??>

   "title": "${node.properties.title!""}",
   "description": "${node.properties.description!""}",
   "estado": "${node.properties["cgsi:estado"]!""}",   
   "author": "${node.properties.author!""}", 


NOTA:=Esto funciona para propiedades definidas en el modelo como tipo text 
<property name="cgsi:estado">
    <title>Estado</title>
    <type>d:text</type> 

    ... 
2.- Ahora habra que modificar el javascript repo-documentlist.js situado en la ruta webapps/share/components/documentlibrary.

            var desc = "", docDetailsUrl, tags, tag, categories, category, i, j;
            var record = oRecord.getData(),
               type = record.type,
               isLink = record.isLink,
               locn = record.location,
               title = "",
               description = record.description || scope.msg("details.description.none");
               /*Mensaje a mostrar en el caso de que no haya asignado estado */
               estado=record.estado ||scope.msg("details.estado.none");

 mensaje en el caso de que no haya asigando estado.Valor por defecto a mostrar.
Cómo bien se indica en el javascript hay un if para carpetas y en la parte del else se tratan los documentos.
Dependiendo en queremos mostrar(carpetas o documentos) y en que tipo de vista(sencilla o detallada).
Colocaremos
 /*Incluimos en la vista de detalle la propiedad "cgsi:estado" */
                     desc += '<div class="detail"><span class="item"><em>' + scope.msg("details.estado") + '</em> ' + $links($html(estado)) + '</span></div>';
Yo en todo momento me guie por la propiedad description que es de tipo text.
En el caso de no querer mostrar alguna propiedad bastaría con incluir en cada uno de los div detail que se quiera eliminar de la vista,la propiedad style="display:none"(yo lo hice de esta forma porque en algún sitio alfresco controla las plantillas y al quitar determinadas cosas ,deja la pantalla en blanco).
3.-introducir los mensajes en el archivo properties repo-documentlist.get_es.properties  en la ruta  \tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\documentlibrary  que hallamos usado en el paso 2.
##Añado mensajes para mostrar estado

details.estado=Estado:
details.estado.none=(Ninguno)

4.- Tenemos que comprimir el javascript ,ya que alfresco usa los ficheros de javascript "-min".Para ello existen herramientas online muy eficaces ,yo utilizo http://jscompress.com/.
Este fichero se encuentra en la misma ruta que el anterior .
5.-Paramos el servidor y arrancamos de nuevo alfresco .Y listo