27 de octubre de 2017

:: Alfresco. Establecer cuotas de disco para los usuarios. Javascript API

En Alfresco (5.2), podríamos establecer cuotas de disco para todos los usuarios mediante el uso de la API Javascript de Alfresco, de la siguiente manera:




Habilitar las cuotas de disco en el fichero alfresco-global.properties mediante la línea:
system.usages.enabled=true
Para establecer la cuota de disco para nuevos usuarios, tendríamos que añadir en el mismo fichero alfresco-global.properties la línea: system.content.maximumFileSizeLimit=10240000
Para los usuarios ya creados, tendríamos que ejecutar el siguiente script:
var nodes = people.getPeople(null);
for each(var node in nodes)
{
user = utils.getNodeFromString(node);
if (user)
{
people.setQuota(user,"10240000");
}
}


A continuación podríamos acceder al perfil de un usuario para comprobar que efectivamente se le ha establecido una cuota de 10MB.


Más información sobre Javascript API: http://docs.alfresco.com/community/references/API-JS-getPeople.html (Alfresco 201704)

26 de octubre de 2017

:: Alfresco API REST. Discovery

Por medio de la API REST de Alfresco -en su versión 5.2- podemos realizar una petición a la url para obtener información detallada de nuestra instancia de Alfresco instalada.


http://{Alfresco}/alfresco/api/discovery
Tras la llamada a esta url, obtendremos toda la información disponible en formato JSON.
En nuestro caso, los detalles del repositorio son los siguientes:

{
"entry": {
"repository": {
"edition": "Community",
"version": {
"major": "5",
"minor": "2",
"patch": "0",
"hotfix": "0",
"schema": 10005,
"label": "r135134-b14",
"display": "5.2.0.0 (r135134-b14) schema 10005"
},
"status": {
"isReadOnly": false,
"isAuditEnabled": true,
"isQuickShareEnabled": true,
"isThumbnailGenerationEnabled": true
},
"modules": [{
"id": "alfresco-aos-module",
"title": "Alfresco Office Services Module",
"description": "Allows applications that can talk to a SharePoint server to talk to your Alfresco installation",
"version": "1.1.5",
"installDate": "2017-03-08T17:15:12.218+0000",
"installState": "INSTALLED",
"versionMin": "5.1",
"versionMax": "999"
}, {
"id": "org.alfresco.integrations.google.docs",
"title": "Alfresco / Google Docs Integration",
"description": "The Repository side artifacts of the Alfresco / Google Docs Integration.",
"version": "3.0.3",
"installDate": "2017-03-08T17:15:16.134+0000",
"installState": "INSTALLED",
"versionMin": "5.0.0",
"versionMax": "5.99.99"
}, {
"id": "org_alfresco_module_wcmquickstart",
"title": "Web Quick Start",
"description": "Web Quick Start",
"version": "5.2.e",
"installDate": "2017-03-08T17:15:17.950+0000",
"installState": "INSTALLED",
"versionMin": "3.3",
"versionMax": "999"
}, {
"id": "alfresco-share-services",
"title": "Alfresco Share Services AMP",
"description": "Module to be applied to alfresco.war, containing APIs for Alfresco Share",
"version": "5.2.0",
"installDate": "2017-03-08T17:15:17.029+0000",
"installState": "INSTALLED",
"versionMin": "5.1",
"versionMax": "999"
}, {
"id": "alfresco-trashcan-cleaner",
"title": "alfresco-trashcan-cleaner project",
"description": "The Alfresco Trash Can Cleaner (Alfresco Module)",
"version": "2.2",
"installState": "UNKNOWN",
"versionMin": "0",
"versionMax": "999"
}
]
}
}
}


Es otra forma más de obtener información detallada de nuestro Alfresco.

20 de octubre de 2017

:: Alfresco. Crear webscript para listar carpetas

La siguiente prueba de concepto consistirá en la creación de un webscript que liste las carpetas contenidas en una carpeta dada, pasada como parámetro.


Descriptor
Crearemos un primer lugar el descriptor, al que llamaremos "dir.get.desc.xml" con el siguiente contenido:
< webscript >
< shortname >Listado de carpetas< /shortname >
< description >WebScript para listar carpetas< /description >
< url >/dir/{folderpath}?verbose={verbose}< /url >
< format default="html">extension< /format >
< authentication >user< /authentication >
< /webscript >


Plantilla
En segundo lugar crearemos la plantilla, a la que llamaremos "dir.get.html.ftl" con el siguiente contenido:
< html >
< head >
< title >Carpeta ${folder.displayPath}/${folder.name}< /title >
< /head >
< body >
< p >Alfresco ${server.edition} Edición v${server.version} : dir< /p >
< p >Contenidos de la carpeta ${folder.displayPath}/${folder.name}< /p >
< table >
< #list folder.children as child >
< tr >
< td >< #if child.isContainer>d< /#if >< /td >
< #if verbose>
< td >${child.properties.modifier}< /td >
< td ><#if child.isDocument >
${child.properties.content.size}< /#if >< /td >
< td >${child.properties.modified?date}< /td >
< /#if >
< td >${child.name}< /td >
< /tr >
< /#list >
< /table >
< /body >
< /html >


Controlador
Por último crearemos el controlador, al que llamaremos "dir.get.js" con el siguiente contenido:
// Listado de carpetas a partir de la carpeta pasada como parámetro
var verbose = (args.verbose == "true" ? true : false);
var folderpath = url.templateArgs.folderpath;

// Busca las carpetas dentro del repositorio
var folder = roothome.childByNamePath(folderpath);

// Comprueba que la carpeta ha sido encontrada
if (folder == undefined || !folder.isContainer) {
status.code = 404;
status.message = "Folder " + folderpath + " not found.";
status.redirect = true;
}

// Construye el modelo para mostrar la respuesta
model.verbose = verbose;
model.folder = folder;




Accederemos a la siguiente url para actualizar la lista de webscripts disponibles:
"http://{alfresco}/alfresco/service/index" y pulsaremos sobre el botón "Refresh WebScripts"

Si todo está correcto podremos hacer una llamada a nuestro webscripts, invocando la siguiente url: "http://{alfresco}/alfresco/service/dir/Espacio%20de%20empresa?verbose=true"

Como resultado obtendremos un listado similar a este:






15 de octubre de 2017

:: Alfresco. Añadir vistas a la biblioteca de documentos

En Alfresco 5.2 para el caso de que necesitemos añadir nuevas vistas a la biblioteca de documentos, seguiremos los pasos siguientes:



1.- Añadiremos al fichero "share-config-custom.xml" ubicado en la siguiente ruta: "{Alfresco}\tomcat\shared\classes\alfresco\web-extension" < view-renderer iconclass="table" id="minimalist" index="60" label="button.view.minimalist" widget="Alfresco.DocumentListTableViewRenderer" >

< js src="components/documentlibrary/documentlist-view-simple.js" />
< js src="components/documentlibrary/documentlist-view-table.js" />
< css src="components/documentlibrary/documentlist-view-table.css" />
< /dependencies >
< json-config >
{
"actions": {
"show": "false"
},
"indicators": {
"show": "false"
},
"selector": {
"show": "true"
},
"thumbnail": {
"show": "false"
},
"propertyColumns": [
{
"property": "cm:name",
"label": "table.minimalist.label.name",
"link": "true"
}
]
}
< /json-config >
< /view-renderer >


2.- Para incluir los nuevos literales de traducción que necesitaremos, debemos copiar y/o editar el fichero: "mycustom.properties" ubicado en: "{Alfresco}\tomcat\shared\classes\alfresco\web-extension\messages"

# Vistas (minimalista)
button.view.minimalist=Minimalista
table.minimalist.label.name=Nombre




3.- Reiniciaremos el servicio de Alfresco y si todo es correcto, tendremos a nuestra disposición las nuevas vistas definidas

10 de octubre de 2017

:: Alfresco. Número de elementos por página

El Alfresco 5.2, por defecto el número de elementos por página a la hora de listar documentos es 50.
Supongamos que en nuestro caso necesitásemos que el nº de elementos por página fuera 10. Para ello, seguiremos los siguientes pasos:

1.- Copiar el fichero: "documentlist-v2.get.js" to "{Alfresco}\tomcat\shared\classes\alfresco\web-extension\site-webscripts\org\alfresco\components\documentlibrary"

2.- En este fichero tenemos que añadir la siguiente línea:
model.widgets[1].options.pageSize = 10;

3.- Esta línea tendremos que añadirla al final del código de la función "widgets":

function widgets()
{
   var useTitle = "true";
   var docLibConfig = config.scoped["DocumentLibrary"];
   if (docLibConfig != null)
   {
      var tmp = docLibConfig["use-title"];
      useTitle = tmp != null ? tmp : "true";
   }

   var docListToolbar = {
      id: "DocListToolbar",
      name: "Alfresco.DocListToolbar",
      assignTo: "docListToolbar",
      options: {
         siteId: (page.url.templateArgs.site != null) ? page.url.templateArgs.site : "",
         rootNode: toolbar.rootNode != null ? toolbar.rootNode : "",
         repositoryRoot: toolbar.rootNode,
         hideNavBar: Boolean(toolbar.preferences.hideNavBar),
         repositoryBrowsing: toolbar.rootNode != null,
         useTitle: (useTitle == "true"),
         syncMode: toolbar.syncMode != null ? toolbar.syncMode : "",
         createContentByTemplateEnabled: model.createContentByTemplateEnabled,
         createContentActions: model.createContent
      }
   };
 
   var documentList = {
      id : "DocumentList",
      name : "Alfresco.DocumentList",
      options : {
         syncMode : model.syncMode != null ? model.syncMode : "",      
         siteId : (page.url.templateArgs.site != null) ? page.url.templateArgs.site : "",
         containerId : template.properties.container != null ? template.properties.container : "documentLibrary",
         rootNode : model.rootNode != null ? model.rootNode : "null",
         repositoryRoot : model.rootNode,
         usePagination : (args.pagination == "true"),
         sortAscending : (model.preferences.sortAscending != null ? model.preferences.sortAscending : true),
         sortField : model.preferences.sortField != null ? model.preferences.sortField : "cm:name",
         showFolders : (model.preferences.showFolders != null ? model.preferences.showFolders : true),
         hideNavBar: (model.preferences.hideNavBar != null ? model.preferences.hideNavBar : false),
         simpleView : model.preferences.simpleView != null ? model.preferences.simpleView : "null",
         viewRenderers: model.viewRenderers,
         viewRendererName : model.preferences.viewRendererName != null ? model.preferences.viewRendererName : "detailed",
         viewRendererNames : model.viewRendererNames != null ? model.viewRendererNames : ["simple", "detailed", "gallery", "filmstrip"],
         highlightFile : page.url.args["file"] != null ? page.url.args["file"] : "",
         replicationUrlMapping : model.replicationUrlMapping != null ? model.replicationUrlMapping : "{}",
         repositoryBrowsing : model.rootNode != null,
         useTitle : (model.useTitle != null ? model.useTitle == "true" : true),
         userIsSiteManager : model.userIsSiteManager,
         associatedToolbar: { _alfValue: "docListToolbar", _alfType: "REFERENCE" },
         commonComponentStyle : model.commonComponentStyle,
         suppressComponent : model.suppressComponent,
         filmstripImageLazyLoading: model.filmstripImageLazyLoading == "true"
      }
   };
   if (model.repositoryUrl != null)
   {
      documentList.options.repositoryUrl = model.repositoryUrl;
   }

   model.widgets = [docListToolbar, documentList];
   model.widgets[1].options.pageSize = 10;
}

4.- En este caso, como se puede ver, hemos establecido el valor a 10 elementos por página

5.- Reiniciaremos el servicio de Alfresco y tras esto la nueva configuración estará disponible, mostrando 10 elementos por página



5 de octubre de 2017

:: Alfresco. Contar el número de documentos en una carpeta desde CMIS

CMIS no soporta la cláusula COUNT en las consultas, pero en cualquier caso podemos realizar una consulta para determinar el nº de documentos de una determinada carpeta.


Aunque este no es el mejor método, aquí va un ejemplo:

SELECT cmis:objectId FROM cmis:document where IN_TREE('2a9c2dfe-eeb0-481a-9c68-d4c214abdeb2');

:: 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...