31 de marzo de 2020

:: Liferay. Tiempo de sincronización con el LDAP

Como sabemos Liferay permite vincular con el LDAP mediante la definición de las credenciales y mapeo de campos oportuno. Por defecto, desde Liferay se comprobará periódicamente si debe importar algo desde el LDAP; este valor está establecido por defecto a 10 minutos en el fichero: "portal.properties".

En cualquier caso, si necesitásemos modificar este tiempo de comprobación, podríamos hacerlo a través del fichero: "portal-ext.properties" mediante la definición de la siguiente línea:

ldap.import.interval=15


Siendo el valor 15, el número de minutos entre cada comprobación o sincronización.

28 de marzo de 2020

:: Integración de Analytics en nuestro portal. Problema en la generación de informe

Como describimos en otro post (https://netic360.blogspot.com/2016/03/integracion-de-analytics-en-nuestro.html), es posible llevar cabo la integración de nuestra cuenta de Analytics en un portal web. Sin embargo, debido a un bug, es posible que a la hora de crear un nuevo informe con el plugin (Analytics) no se cargue el formulario para llevar a cabo la parametrización oportuna.


Para solventar este problema, lo que debemos hacer es repetir el proceso desde una ventana de incógnito; es decir, accederemos a nuestra cuenta de Google Drive desde una ventana de incógnito y seguiremos los pasos descritos en el post indicado anteriormente.

25 de marzo de 2020

:: Liferay. Error Configuración de autenticación a través del LDAP: invalid attribute description; remaining name

En Liferay es posible definir el proceso de autenticación a través de nuestro Directorio Activo Corporativo (LDAP). En este caso, u únicamente a modo de recordario sobre un problema -que al final era una tontería- pero que nos llevó un poco de tiempo localizar.

Tras llevar a cabo la definición -desde el panel de control de Liferay- del servidor LDAP y mapeo de los campos correspondientes, verificando que la prueba de conexión era correcta, a la hora de pulsar el botón: "Probar la configuración de usuarios LDAP", no devolvía ningún resultado y los logs se observaba la siguiente traza:


ERROR [ajp-bio-8009-exec-19][IncludeTag:129] Current URL /group/control_panel/manage?p_p_id=130&p_p_lifecycle=0&p_p_state=exclusive&p_p_mode=view&refererPlid=22323&_130_struts_action=%2Fportal_settings%2Ftest_ldap_users generates exception: javax.naming.directory.InvalidSearchFilterException: invalid attribute description; remaining name 'OU=Plantilla, OU=XXXXXXXX, DC=XXXXXXXX, DC=XXXXX'

javax.naming.directory.InvalidSearchFilterException: invalid attribute description; remaining name 'OU=Plantilla, OU=XXXXXXXX, DC=XXXXXXXX, DC=XXXXX'

        at com.sun.jndi.ldap.Filter.encodeSimpleFilter(Filter.java:446)

        at com.sun.jndi.ldap.Filter.encodeFilter(Filter.java:146)

        at com.sun.jndi.ldap.Filter.encodeFilterString(Filter.java:74)

        at com.sun.jndi.ldap.LdapClient.search(LdapClient.java:547)

        at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1985)

        at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1847)

        at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1772)

        at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:386)

        at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:356)

        at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:339)

        at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:267)

        at com.liferay.portal.security.ldap.PortalLDAPUtil.searchLDAP(PortalLDAPUtil.java:820)

        at com.liferay.portal.security.ldap.PortalLDAPUtil.getUsers(PortalLDAPUtil.java:617)

        at org.apache.jsp.html.portlet.portal_005fsettings.test_005fldap_005fusers_jsp._jspService(test_005fldap_005fusers_jsp.java:677)

        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)

        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)

        at com.liferay.portal.servlet.DirectRequestDispatcher.include(DirectRequestDispatcher.java:57)

        at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.doDispatch(ClassLoaderRequestDispatcherWrapper.java:78)

        at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.include(ClassLoaderRequestDispatcherWrapper.java:53)

        at com.liferay.taglib.util.IncludeTag.include(IncludeTag.java:295)


En nuestro caso el problema era que en el campo: "Filtro de búsqueda para la importación", habíamos puesto -debido a una modificación-: "((objectClass=Person))", cuando debería ser: "(objectClass=Person)", es decir, sobraría el "doble paréntesis".


12 de marzo de 2020

:: Coronavirus. Herramienta de seguimiento en tiempo real


En estos días, estamos preocupados por la evolución de la pandemia del coronavirus y la cantidad de información que recibidos a través de todos los medios.
Mediante una herramienta gráfica podemos seguir minuto a minuto la evolución de esta creciente infección global.

Acceso: https://www.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6

14 de febrero de 2020

:: Java. Determinar si dos fechas pertenecen al mismo día

Únicamente como recordatorio para determinar si dos fechas son del mismo día (00:01 a 23:59), podemos hacer uso de la siguiente función "isSameDay" de la clase "DateUtils":


if (DateUtils.isSameDay(date1, date2)) {
    System.out.println("Fechas en el mismo día");
} else if (date1.before(date2)) {
    System.out.println("Fecha1 es anterior a la fecha2");
} else {
    System.out.println("Fecha1 es posterior a la fecha2");
}


10 de febrero de 2020

:: Liferay. Comentarios en un workflow

En la definición de un workflow en Liferay, en el que necesitamos que al rechazar una solicitud se envíe un correo al usuario, adjuntando además los motivos, podemos hacer uso de la variable: $taskComments

Dentro del fichero .xml de definición del workflow, tendremos el código al que llamaremos, por ejemplo:


<state>
  <name>reject</name>
  <metadata> <![CDATA[{"xy":[356,225]}]]> </metadata>
  <actions>
   <action>
    <name>denied</name>
    <description/>
    <script> <![CDATA[Packages.com.liferay.portal.kernel.workflow.WorkflowStatusManagerUtil.updateStatus(Packages.com.liferay.portal.kernel.workflow.WorkflowConstants.toStatus("denied"), workflowContext);]]> </script>
    <script-language>javascript</script-language>
    <execution-type>onEntry</execution-type>
   </action>
   <!-- correo al usuario rechazado -->
   <notification>
    <name>Review Notification</name>
    <description>Denegación de solicitud</description>
    <template><![CDATA[<html>

       #set ($workflowHandlerRegistryUtil = $portal.getClass().forName("com.liferay.portal.kernel.workflow.WorkflowHandlerRegistryUtil"))
       #set ($locale = $localeUtil.getDefault())
       #set ($timeZone = $timeZoneUtil.getDefault())
       #set ($workflowHandler = $workflowHandlerRegistryUtil.getWorkflowHandler($entryClassName))
       #set ($classPK = $getterUtil.getInteger($entryClassPK))
       #set ($assetRenderer = $workflowHandler.getAssetRenderer($classPK))
       #set ($emailUser = $assetRenderer.getEmailNotificationDenied($locale, $timeZone, $taskComments))
              
      </html>]]> </template>
    <template-language>velocity</template-language>
    <notification-type>email</notification-type>
    <execution-type>onEntry</execution-type>
   </notification>
  </actions>
 </state>


En la función encargada de realizar el envío de correo tras ser rechazada la solicitud, 
añadiremos los comentarios al cuerpo del mensaje.

5 de febrero de 2020

:: Accesibilidad web. Enlaces adyacentes

Dentro del análisis de accesibilidad web, uno de los puntos comprobados es la existencia de enlaces adyacentes que apuntan al mismo destino.

Se consideran enlaces adyacentes aquellos que están separados por un carácter y/o conjunto de espacios en blanco, o por alguna etiqueta que no pertenezca al grupo de etiquetas en línea: a, abbr, acronym, b, big, code, cite, dfn, em, font, img, ins, label, q, s, small, span, strike, strong, sub, sup, u.


NOTA: No se tienen en cuenta los enlaces que apunten al destino: #

:: Liferay 7.4. Habilitar/deshabilitar la vista previa de un documento

En Liferay 7.4 podemos habilitar o deshabilitar la vista previa de un documento en la biblioteca de documentos y multimedia. Se trata de un ...