30 de julio de 2016

:: Alfresco. Crear carpeta desde plantilla

En ocasiones puede ser interesante crear una carpeta dentro de la que se siga una determinada estructura pre-establecida. Para estos casos, suele ser bastante cómoda la creación de una carpeta a partir de una plantilla.

La siguiente pregunta sería, ¿cómo puedo definir una plantilla que pueda utilizar en la biblioteca de documentos?
Para dar respuesta a la pregunta anterior, debemos seguir los pasos siguientes:
.- Accedemos al "Repositorio" > "Diccionario de datos" > "Plantillas de espacio"

.- En este punto crearemos una carpeta denominada "Expediente Netic360" y dentro de esta, la estructura que necesitemos; en nuestro caso crearemos dos subcarpetas a las que denominaremos:
  • Documentación técnica
  • Documentación administrativa



.- Al regresar a la biblioteca de documentos y al pulsar sobre el enlace "Crear" > "Crear carpeta a partir de plantilla" nos aparecerá la nueva "plantilla" que hemos creado: "Expediente Netic360"

.- Lo interesante sería crear una "carpeta" de un tipo personalizado que tengamos definido y que a su vez contenga la estructura acordada.
Para ello, sobre la carpeta que hemos creado dentro de las plantillas de espacio, seleccionaremos la opción "Cambiar tipo" y seleccionaremos el tipo asociado a esta carpeta. De esta manera, cuando en la biblioteca de documentos creemos una carpeta basada en esta plantilla, será del tipo seleccionado, por ejemplo "Expediente", siendo este un tipo personalizado previamente definido que hereda de cm:folder.


25 de julio de 2016

:: Alfresco. Búsqueda simple sobre tipos de datos personalizados

Una vez hayamos definido tipos de datos personalizados, para que el proceso de búsqueda se realice también sobre estos, es necesario llevar a cabo alguna configuración adicional.


.- Copiaremos los ficheros siguientes a la siguiente ubicación: "${alfresco}\tomcat\shared\classes\alfresco\extension\templates\webscripts\org\alfresco\slingshot\search"
  • live-search-docs.get.config.xml
  • search.get.config.xml
En la versión 5 de Alfresco, estos no aparecen directamente en el sistema de ficheros, por lo que podemos extraerlos del .JAR ubicado en:
tomcat/webapps/alfresco/WEB-INF/lib/alfresco-remote-api-5.0.2.1.jar (el número de versión puede variar según la que tengamos instalada)


.- Editaremos el fichero "live-search-docs.get.config.xml" y añadiremos los campos correspondientes a los nuevos tipos de datos que queramos incluir en el proceso de búsqueda
< search >
    < default-operator >AND< /default-operator >
    < default-query-template >%(cm:name cm:title cm:description  fact:nfactura con:ncontrato TEXT TAG)

< /search >

.- Editaremos el fichero "search.get.config.xml" y añadiremos - de la misma manera - los campos correspondientes a los nuevos tipo de datos que queramos incluir en el proceso de búsqueda
< search >
    < default-operator >AND< /default-operator >
    < default-query-template >%(cm:name cm:title cm:description fact:nfactura con:ncontrato  ia:whatEvent ia:descriptionEvent lnk:title lnk:description TEXT TAG)< /default-query-template >
< /search >

Tras reiniciar el servicio de Alfresco, la búsqueda se realizará sobre los campos especificados de los tipos de datos personalizados que habíamos definido.

Aunque ya existía un post relacionado, quizás quede más clara la implementación concreta con la descripción anterior.

NOTA: En este momento nuestro Alfresco Share no arrancará correctamente si no hemos definido en el fichero "share-config-custom.xml" el nuevo tipo de datos.

20 de julio de 2016

:: Alfresco. Crear webscript que añada enlace a la carpeta personal

En este caso vamos a crear un webscript que nos incluya un enlace a la carpeta personal del usuario logueado, desde el dashlet denominado "Mi perfil".


Los pasos a seguir son los siguientes:

1.- Crearemos el fichero correspondiente al descriptor del WebScript, y lo nombraremos como: "userhome.get.desc.xml" con el siguiente contenido:

< webscript >
   < shortname >Get User Home< /shortname >
   < description >Get the userHome field from alfresco< /description >
   < url >/getuserhome< /url >
   < format default="json" />
   < authentication >user< /authentication >
< /webscript >

El fichero anterior lo copiaremos en: "Repositorio>Diccionario de datos>Web Scripts"

2.- Definimos la plantilla asociada, que en este caso será en formato json, y lo nombramos: "userhome.get.json.ftl"
{
    "userhome":"${userhome.properties.name}"
}

El fichero lo copiaremos en la misma ubicación que el anterior: "Repositorio>Diccionario de datos>Web Scripts"

3.- Definimos el fichero javascript encargado de llevar a cabo esta tarea; lo nombraremos como "my-profile.get.js":
function main()
{   
    var userHome = "NOT_FOUND";
    // Getting user home
    var resultCall = remote.call("/getuserhome");
    var nodeTmp = eval('(' + resultCall + ')');
    if(nodeTmp != null){
        userHome = nodeTmp.userhome;
    }
    model.userHomeFolderName = userHome;
}
main();

4.- Modificaremos la plantilla encargada de mostrar el perfil del usuario logueado. El fichero a modificar es: "my-profile.get.html.ftl"


A este fichero le añadiremos (donde corresponda) el código correspondiente al enlace al espacio personal del usuario:
< a class="sitio_personal" href="https://www.blogger.com/share/page/site/Usuarios/documentlibrary#filter=path%7C/${userHomeFolderName?url}" title="Mi carpeta personal" >Mi carpeta personal< /a >

En el tema que utilicemos definiríamos (en el fichero presentation.css) los estilos correspondientes para mostrar este enlace al espacio personal.

Este fichero debemos copiarlo en la ruta siguiente: "${alfresco}\tomcat\shared\classes\alfresco\web-extension\site-webscripts\org\alfresco\components\dashlets"

5.- Para habilitar el webscript accederemos a la url: "http://localhost:8080/alfresco/service/index" y tras especificar las credenciales de acceso actualizaremos la lista de webscripts disponibles.
Seleccionaremos la entrada "Browse all Web Scripts" y comprobaremos que nuestro webscript se encuentra en la lista.

Tras reiniciar el servicio, en el dashlet de mi perfil tendremos un enlace para que el usuario acceda al sitio personal.

13 de julio de 2016

:: Alfresco. Crear un WebScript para subir ficheros


Para definir un WebScript que nos permita subir un fichero al repositorio, seguiremos los siguientes pasos:

.- Crearemos el fichero correspondiente al descriptor del WebScript, y lo nombraremos como: "upload.get.desc.xml" con el siguiente contenido:
< webscript >
  < shortname >Subida de ficheros. Netic360< /shortname >
  < description >Formulario para subida de ficheros de contenido y metadaros al repositorio< /description >
  < url>/netic360/upload< /url >
  < authentication >user< /authentication >
< /webscript >

El fichero anterior lo copiaremos en: "Repositorio>Diccionario de datos>Web Scripts"

.- Crearemos el fichero correspondiente a la plantilla o vista del WebScript, y lo nombraremos como: "upload.get.html.ftl"
El contenido de este fichero será el siguiente:

< html >
 < head >
   < title >Upload Web Script Sample< /title >
   < link rel="stylesheet" href="${url.context}/css/main.css" TYPE="text/css">
 < /head >
 < body >
   < table >
     < tr >
       < td >Alfresco

       < td >WebScript para upload de ficheros
     < /tr >
     < tr >< td >< td >Alfresco ${server.edition} v${server.version}
   < /table >
   < p >
   < table >
    
       < tr >< td >File:< /td >< td >< input type="file" name="file" >< /td >< /tr >
       < tr >< td >Title:< /td >< td >< input name="title" >< /td >< /tr >
       < tr >< td >Description:< /td >< td >< input name="desc" >< /td >< /tr >
       < tr >< td >

       < tr >< td >< input type="submit" name="submit" value="Upload" >< /td >< /tr >
     < /form >
   < /table >
 < /body >
< /html >

.- Crearemos el fichero correspondiente al descriptor del WebScript para el método "POST". El fichero lo llamaremos: "upload.post.desc.xml"
Este fichero tendrá el siguiente contenido:
< webscript >
  < shortname >File Upload Sample< /shortname >
  < description >Upload file content and meta-data into Repository< /description >
  < url >/netic360/upload< /url >
  < authentication >user< /authentication >
< /webscript >

.- Crearemos el fichero correspondiente al script a ejecutar, y lo llamaremos: "upload.post.js"
El contenido de este fichero será el siguiente:

var filename = null;
var content = null;
var title = "";
var description = "";

// locate file attributes
for each (field in formdata.fields)
{
  if (field.name == "title")
  {
    title = field.value;
  }
  else if (field.name == "desc")
  {
    description = field.value;
  }
  else if (field.name == "file" && field.isFile)
  {
    filename = field.filename;
    content = field.content;
  }
}

// ensure mandatory file attributes have been located
if (filename == undefined || content == undefined)
{
  status.code = 400;
  status.message = "Uploaded file cannot be located in request";
  status.redirect = true;
}
else
{
  // create document in company home for uploaded file
  upload = companyhome.createFile("upload" + companyhome.children.length + "_" + filename) ;
 
  upload.properties.content.write(content);
  upload.properties.content.setEncoding("UTF-8");
  upload.properties.content.guessMimetype(filename);
 
  upload.properties.title = title;
  upload.properties.description = description;
  upload.save();

  // setup model for response template
  model.upload = upload;
}

.- Por último crearemos el fichero correspondiente a la vista tras subir el fichero. El nombre del fichero será: "upload.post.html.ftl"
Este tendrá el siguiente contenido:
< html >
 < head >
   < title >Upload Web Script Sample< /title >
   < link rel="stylesheet" href="${url.context}/css/main.css" TYPE="text/css" >
 < /head >
 < body >
   < table >
     < tr >
       < td >< img src="${url.context}/images/logo/AlfrescoLogo32.png" alt="Alfresco" />< /td >
       < td >< nobr >Upload Web Script Sample< /nobr >< /td >
     < /tr >
     < tr >< td >Alfresco ${server.edition} v${server.version}< /td >< /tr >
     < tr >
< /td >< /tr >
     < tr >< td >Uploaded < a href="${url.serviceContext}/sample/folder${upload.displayPath}" >${upload.name}< /a > of size ${upload.properties.content.size}.< /td >< /tr >
   < /table >
 < /body >
< /html >

.- Para invocar al webscript insertaremos en el navegador la siguiente url:
localhost:8080/alfresco/service/netic360/upload

Más información: http://docs.alfresco.com/5.0/concepts/ws-webscripts.html

10 de julio de 2016

:: Alfresco. Búsqueda avanzada sobre tipos de datos personalizados

Tras definir los tipos de datos personalizados que necesitábamos, es necesario configurar el buscador avanzado para que podamos llevar a cabo búsquedas sobre este nuevo tipo de datos.
Para ello, modificaremos el fichero "share-config-custom.xml" ubicado en: "${alfresco}\tomcat\shared\classes\alfresco\web-extension" (previamente haremos un backup de este fichero).

Añadimos los siguientes contenidos a este fichero: "share-config-custom.xml"

.- Buscador avanzado
< !-- Mostrar nuevos tipos de datos en el buscador avanzado //-- >
< config replace="false" evaluator="string-compare" condition="AdvancedSearch" >
< advanced-search >
< !-- Forms for the advanced search type list - ->
< forms >
< form labelId="type.fact_factura" descriptionId="search.form.desc.fact_factura" >fact:factura< /form >
< form labelId="type.con_contrato" descriptionId="search.form.desc.con_contrato" >con:contrato< /form >
< /forms >
< /advanced-search >
< /config >
< !--                                 //-- >

< !-- Campos a mostrar en los formularios de la búsqueda avanzada //-- >
< config evaluator="string-compare" condition="Advanced Search" >
      < advanced-search >
         
< type name="fact:factura" / >
< type name="con:contrato" / >
        < /content-types >
         < custom-properties >
            < !-- Facturas //-- >
< meta-data type="fact:factura" property="fact:nfactura" / >
< meta-data type="fact:factura" property="fact:anio" / >
< meta-data type="fact:factura" property="fact:fecha" / >
< meta-data type="fact:factura" property="fact:nif" / >
< meta-data type="fact:factura" property="fact:nproveedor" / >
< !-- Contratos //-- >
< meta-data type="con:contrato" property="con:tipo" / >
< meta-data type="con:contrato" property="con:ncontrato" / >
< meta-data type="con:contrato" property="con:aniocontrato" / >
< meta-data type="con:contrato" property="con:delegacion" / >
< meta-data type="con:contrato" property="con:coddelegacion" / >
< meta-data type="con:contrato" property="con:nclientecontrato" / >
         < /custom-properties >
      < /advanced-search >
   < /config >

.- Buscador simple
< !-- Busquedas simples - ->
   < config >
< clien t>
< simple-search-additional-attributes >
< qname >{fact.model}nfactura< /qname >
< qname>{con.model}ncontrato
< /simple-search-additional-attributes >
< /client >
   < /config >

8 de julio de 2016

:: Alfresco. Creación de un webscript sencillo (Tip conceptual)

Los WebScripts son elementos que proporciona Alfresco como una forma de desarrollar funcionalidades. De esta manera nos permiten construir servicios web para la gestión de contenidos accesibles vía HTTP.

Estos WebScripts pueden crearse haciendo uso de JavaScript y Freemarker.

Tipos de WebSripts

Podemos distinguir dos tipos:
Webcripts de datos: Estos encapsulan el acceso o modificación del contenido del repositorio, proporcionando un ainterfaz a aplicaciones cliente. Alfresco incluye algun ejemplo de Web Scripts de datos que sirven para: añadir tags a los documentos, actividades, etc.
   
Webscripts de presentación: Permiten construir interfaces de usuario como por ejemplo: dashlets para Alfresco, portlets para un portal (siguiendo el estándar JSR-168), un portal Web o una aplicación a medida.

A continuación se muestra la arquitectura de un webscript en Alfresco

Elementos de un webscripts

Documento de descripción:  identifica la URI que instancia el script, un nombre corto, descripción y requisitos de autenticación y transacciones.
   
Script: actúa de controlador. Escrito en Javascript puede realizar tareas como consultas al repositorio de Alfresco, actualizar el repositorio, etc. El script tiene acceso a todos los argumentos de la URI, a los servicios de Alfresco y a los datos del repositorio.
   
Plantillas o vistas de respuesta. Normalmente desarrolladas en Freemaker, encargadas de renderizar la respuesta en el formato adecuado: HTML, ATOM, XML, RSS, JSON, CSV, etcétera.

Pasos para crear un webscript

.- Nos loguearemos en Alfresco y accederemos al "Repositorio" > "Diccionario de datos" > "WebScripts"
Para extender la funcionalidad de un webscript existente, copiaremos los ficheros originales y los copiaremos en la carpeta "Repositorio > Diccionario de datos > Extensiones de web scripts"

.- Crearemos el descriptor del WebScript (fichero XML), al que llamaremos: "hello.get.desc.xml" con el siguiente contenido:
< webscript >
  < shortname >Hola< /shortname >
  < description >Ejemplo de webScript< /description >
  < url >/hello< / url >
< /webscript >
.- Crearemos la plantilla para el WebScript (fichero ftl), al que llamaremos "hello.get.html.ftl" con el siguiente contenido:
Hola que tal !!!

.- Para registrar nuestro WebScript en Alfresco, abriremos la siguiente url en una nueva pestaña: "http://localhost:8080/alfresco/service/index"
Nos pedirá las credenciales de acceso y si son correctas nos mostrará un listado de los tipos de WebScripts disponibles.


.- Seleccionamos la entrada "Browse All Scripts" y buscaremos si aparece nuestro webscript recientemente creado. A continuación pulsaremos el botón "Registrar todos"


.- Para comprobar el funcionamiento de este WebScript invocaremos a la siguiente url: "http://localhost:8080/alfresco/service/hello"

El nombrado de los ficheros es muy importante:
hello.get.desc.xml
  • hello: id del servicio (previamente podría llevar un descriptor del paquete)
  • get: método utilizado (GET)
  • desc.xml: Indica a Alfresco que se trata de un descriptor de WebScripts

hello.get.html.ftl
  • hello: id del servicio (previamente podría llevar un descriptor del paquete)
  • get: método utilizado (GET)
  • html: formato de respuesta
  • .ftl: plantilla freemaker

Más información: http://www.juntadeandalucia.es/servicios/madeja/contenido/recurso/45

3 de julio de 2016

:: Alfresco. Modificar el pie de las páginas

Dentro de los "tips" para personalizar la interfaz de usuario de Alfresco, describiremos a continuación cómo adaptar el pie de las páginas a nuestras necesidades.


1.- En la ubicación "${alfresco}\tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\components\footer" buscamos los siguientes ficheros:
  • footer.get.desc.xml
  • footer.get.head.ftl
  • footer.get.html.ftl
  • footer.get.properties
2.- Copiaremos estos ficheros a la siguiente ruta: "${alfresco}\tomcat\shared\classes\alfresco\web-extension\site-webscripts\org\alfresco\components\footer\"

3.- Editaremos los ficheros siguientes, modificándolos según nuestras necesidades:
  • footer.get.html.ftl
  • footer.get.properties
4.- El logo a mostrar en el pie, denominado "alfresco-share-logo.png" podemos ubicarlo en la carpeta "${alfresco}\tomcat\webapps\share\components\images" y sobrescribiremos el fichero existente.

5.- Desde el logo mostrado en el pie de página se accederá al diálogo correspondiente al "Acerca de" de la aplicación.
Para modificar este diálogo, copiaremos el siguiente fichero ubicado en: "${alfresco}\tomcat\webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\modules" a la carpeta: "${alfresco}\tomcat\shared\classes\alfresco\web-extension\site-webscripts\org\alfresco\modules\"

  • about-share.get.html.ftl
Los estilos que queramos sobrescribir por ejemplo en el "Acerca de", podemos hacerlo en el fichero "presentation.css" del tema. Por ejemplo, cambiar el margen respecto a la parte superior del copyright.

6.- Modificaremos los estilos y la plantilla como corresponda.

7.- La imagen a utilizar como fondo en el "Acerca de", nombrada como "about-bg", la copiaremos en la siguiente ruta: "${alfresco}\tomcat\webapps\share\modules\images" (El logo que aparece forma parte de la misma imagen de fondo)

8.- La imagen a mostrar en el pie de página correspondiente al logo, nombrada como "alfresco-share-logo.png", la copiaremos en la siguiente ruta: "${alfresco}\tomcat\webapps\share\components\images"


Tras reiniciar el servicio de Alfresco, los cambios estará disponibles.


:: Cookies de nuestra página web. ¿Para qué sirve cada una?

A menudo una pregunta que nos hacen es qué cookies se están utilizando en mi página y para qué sirven. Para ver las cookies, podemos selecci...