27 de junio de 2017

:: Liferay. Evitar que caduque la sesión de un usuario

En algunas implantaciones, requieren que la sesión de un usuario no caduque, es decir, que este -una vez iniciada la sesión- permanezca logueado.


Para llevar a cabo esta tarea deberemos  modificar el fichero "portal-ext.properties" estableciendo los siguientes valores.

#Session timeout Value
session.timeout=480
session.timeout.warning=1
session.timeout.auto.extend=true



21 de junio de 2017

:: Alfresco. Importar y descomprimir un fichero .ZIP

A modo de prueba de concepto, una posible opción para importar y descomprimir un archivo .ZIP en Alfresco, sería la siguiente.

En este caso, utilizaremos reglas para descomprimir un fichero .ZIP cargado en Alfresco.

Crearemos una carpeta, por ejemplo "Entrada", sobre la que definiremos una regla de contenido.
Para ello seleccionaremos la opción: "Gestionar reglas" > "Nueva regla"
- Cuando entran o se crean elementos en esta carpeta
- Tipo MIME es ZIP
- Importar a la carpeta seleccionada (por ejemplo "Elementos importados")

Cuando subamos un fichero .ZIP a la carpeta "Entrada", se ejecutará la regla definida, importándose (extrayéndose) los ficheros del .ZIP a la carpeta "Elementos importados"

Para el caso de que el propio .zip tuviera otros .zip, sería necesario definir esta regla para que se aplicara a las subcarpetas, pero en cualquier caso esta es sólo un aprueba de concepto sobre un posible planteamiento para importar y descomprimir ficheros .ZIP de una forma sencilla.

Como es lógico, podemos subir a Alfresco un fichero .zip y una vez subido seleccionar la acción "Descomprimir en...", pero requeriría intervención manual, que no era el objetivo de este post.


14 de junio de 2017

:: Liferay. Probar el envío de correo

Cuando estamos desarrollando es habitual poder probar el envío de notificaciones por correo electrónico en nuestros portlets.


Para ello, podemos hacer uso de la herramienta "fakeSMTP" que podemos descargar en la siguiente url: http://nilhcem.com/FakeSMTP/

Tras instalar el .JAR autoextraible y seleccionar la carpeta donde se almacenarán los correos electrónicos que recibamos, pulsaremos sobre el boton "Start Server".

Iremos a nuestro Liferay y en el panel de control (versión 6.2) seleccionaremos : "Configuración" > "Administración del servidor" > "Correo".
En este punto revisaremos los valores configurados, normalmente, en el puerto 25.


Desde uno de nuestros portlets haremos una prueba de envío, y verificaremos desde nuestro servidor de correo instalado, que efectivamente se ha recibido este correo.



7 de junio de 2017

:: Liferay. Asignar rol por defecto al crear usuario

En algunas implantaciones de Liferay es necesaria la asignación de determinados rol -previamente definidos- a los usuarios que se crean en el portal.
Por defecto, a los usuarios que se crean o se importan, por ejemplo desde el LDAP, se les asigna el rol "User" (práctica habitual).

Para llevar a cabo esta asignación debemos editar el fichero: "portal-ext.properties" donde añadiremos o modificaremos la siguiente línea:

## Establece los roles por defecto "User", "rol sitio web", "rol portal", "rol organizacion" para los nuevos usuarios
admin.default.role.names=User\nrol sitio web\nrol portal\nrol organizacion


En Liferay crearemos los roles anteriormente señalados:
  • rol sitio web (Rol de sitio web) 
  • rol portal (Rol de portal) 
  • rol organizacion (Rol de organización) 

Reiniciamos Liferay y, una vez el servicio arranque, crearemos un usuario, comprobando a continuación que efectivamente este tiene asociados los roles indicados (aunque estos aparecen agrupados bajo el epígrafe: "roles de portal".

En Liferay, esta asociación puede llevarse a cabo desde el panel de control. Para ello, seleccionaremos: "Panel de control" > "Configuración" > "Asociaciones por defecto de los usuarios", y en el cajetín denominado: "Roles", insertaremos aquellos que deseamos se asocien a cada nuevo usuario creado en el portal.
En nuestro caso, a cada nuevo usuario, se le asociarán los roles: User y Empleado



31 de mayo de 2017

:: Liferay. Modificar el tamaño de los campos creados con Service Builder

Más información sobre parametrizaciones que podemos llevar a cabo en el fichero: "portlet-model-hints.xml" en el siguiente enlace: https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-2/customizing-model-entities-with-model-hints

Para modificarlo, tendremos que añadir lo siguiente:

<hint name="max-length">100</hint>

28 de mayo de 2017

:: Geolocalizar una lista de direcciones

A veces necesitamos obtener las coordenadas geográficas (longitud y latitud) de una serie de direcciones. Una forma rápida de llevar a cabo esta tarea, es la que describiremos a continuación.

En Google Drive podemos crear scripts (Google App Script) para llevar a cabo tareas variadas.
Para el caso que nos ocupa, los pasos a seguir son:

1.- Crearemos una hoja de cálculo en Google Drive

2.- En la primera columna insertaremos las direcciones de las que queremos obtener las coordenadas


3.- Pulsamos sobre la entrada de menú "Herramientas" > "Editor de secuencia de comandos" y añadimos el siguiente código

function geoCode() {
var sheet = SpreadsheetApp.getActiveSheet();

var range = sheet.getDataRange();
var cells = range.getValues();

var latitudes = [];
var longitudes = [];

for (var i = 0; i < cells.length; i++) {
var address = cells[i][0];
var geocoder = Maps.newGeocoder().geocode(address);
var res = geocoder.results[0];

latitudes.push([res.geometry.location.lat]);
longitudes.push([res.geometry.location.lng]);
}

sheet.getRange('B1').offset(0, 0, latitudes.length).setValues(latitudes)
sheet.getRange('C1').offset(0, 0, latitudes.length).setValues(longitudes);
}


4.- Le daremos un nombre al proyecto, por ejemplo "Geocodificar direcciones" y lo guardaremos.

5.- Tras guardarlo, ejecutamos el código pulsando sobre el icono: "Ejecutar"

6.- Tendremos que permitir al script la escritura en nuestra hoja de cálculo



7.- Una vez finalizada la ejecución, tendremos en la segunda y tercera columna, la latitud y longitud respectivamente



23 de mayo de 2017

:: Alfresco. Geolocalizar documentos sobre Google Maps

En Alfresco es posible geolocalizar sobre una cartografía de Google Maps aquellos "documentos" (nodos) que tengan información de geolocalización.


Por ejemplo, podríamos ver -sobre un mapa- la geolocalización de un documento correspondiente a una licencia de obra incluido en Alfresco, siempre y cuando este cuente con información de "longitud" y "latitud".

En nuestro caso, todas las licencias de obra disponen de esta meta-información que permite asociarles una ubicación sobre un mapa. De esta manera, cuando consultamos las acciones disponibles sobre este documento, nos aparecerá una nueva entrada denominada: "Ver en Google Maps".
Previamente, sobre la carpeta contenedora, podríamos definir el aspecto "cm:geographic".



Al pulsar sobre esta opción veremos el documento posicionado sobre una cartografía de Google Maps con una vista previa en miniatura del mismo.


En cualquier caso, esta opción no funciona por defecto ya que es necesario contar con la "apikey" de Google Maps. El error javascript mostrado es:

Google Maps API error: MissingKeyMapError https://developers.google.com/maps/documentation/javascript/error-messages#missing-key-map-error _.rb @ maps.google.com/maps/api/js?sensor=false&callback=Alfresco.component.GoogleMap.Callback:38 util.js:220 Google Maps API warning: NoApiKeys https://developers.google.com/maps/documentation/javascript/error-messages#no-api-keys rB.j @ util.js:220 (anonymous) @ js?sensor=false&callback=Alfresco.component.GoogleMap.Callback:139 (anonymous) @ js?sensor=false&callback=Alfresco.component.GoogleMap.Callback:56 (anonymous) @ js?sensor=false&callback=Alfresco.component.GoogleMap.Callback:53 (anonymous) @ js?sensor=false&callback=Alfresco.component.GoogleMap.Callback:56 _.G @ js?sensor=false&callback=Alfresco.component.GoogleMap.Callback:55 (anonymous) @ js?sensor=false&callback=Alfresco.component.GoogleMap.Callback:56 _.v @ js?sensor=false&callback=Alfresco.component.GoogleMap.Callback:35 Yc @ js?sensor=false&callback=Alfresco.component.GoogleMap.Callback:56 (anonymous) @ js?sensor=false&callback=Alfresco.component.GoogleMap.Callback:139

Para solucionarlo, generamos esta clave desde Google. Más información en el siguiente enlace:
https://developers.google.com/maps/documentation/javascript/get-api-key?hl=ES

Una vez tengamos la apikey generada, modificaremos los siguiente ficheros:
  • [Alfresco]\tomcat\webapps\share\components\geographic\google-map.js
  • [Alfresco]\tomcat\webapps\share\components\geographic\google-map-min.js

En estos ficheros, cuando se hace la petición a Google Maps, añadiremos un parámetro "key=NUESTRA_API_KEY", por lo que quedará de la forma:

script.src = window.location.protocol + "//maps.google.com/maps/api/js?sensor=false&key=NUESTRA_API_KEY&callback=Alfresco.component.GoogleMap.Callback";

:: Liferay. Obtener los usuarios activos desde Groovy

Una solución rápida para obtener la relación de usuarios activos en Liferay 7.4 es por medio de un script en Groovy. Para ello accederemos a...