viernes, 24 de abril de 2009

Customizando mensajes del Websphere Portal

Hace poco se me pidió que customizara una mensajes que emitía el portal al momento que caducaba la sesión, entre las opciones que habían estaba la de crear un nuevo archivo *.properties y leer de ahi los mensajes que se requerían; pero también esta el otro tema de la internacionalización, con lo cual, se debia entonces crear un *.properties por cada idioma en el que se requiriera se visualize el portal. Esto implica, que se debía crear un *.properties por cada uno de los idiomas requeridos con lo mensajes que se vayan a mostrar.

Hasta aqui, la solución parece buena, pero por que crear un *.properties por cada idioma, cuando el portal ya tiene esto implementado, y en todo caso, el trabajo se vería reducido a modificar los mensajes según se requiriera y agregar los nuevos que fueramos a usar.

Sere breve de aqui en adelante, el portal hace uso de un *.jar que contiene todos los mensajes y textos que se usarán en el portal, tanto en botones como en labels. Este archivo lo podemos ubicar en la ruta /portal/IBM/WebSphere/PortalServer/ui/wp.ui/shared/app con el nombre de wp.ui.jar.

Una vez que abrimos el jar ubicamos la carpeta nls y dentro tendremos lo properties que tanto necesitabamos encontrar.

Para tener una idea de como usar estos properties, podemos darle un vistazo al siguiente tag ubicado en el archivo ErrorSessionTimeout.jsp del portal (archivo que muestra el mensaje de sesión caducada):

<portal-fmt:text key="error.timeout" bundle="nls.engine"><portal-fmt:textparam><portal-fmt:text key="link.home" bundle="nls.engine"></portal-fmt:text></portal-fmt:textparam></portal-fmt:text>


Aqui vemos 3 palabras clave, la que indica que archivo usara para ubicar el mensaje es: nls.engine, podran observar que entre todos lo properties que tenemos existe un conjunto de archivos con la siguiente terminologia: nls.engine_xx.properties, donde "xx" corresponden al idioma (es: español; en: ingles; fr: frances... y asi sucesivamente).

Adicionalmente vemos el key="error.timeout" que es el que indica que mensaje se obtendra del archivo de recursos que hemos ubicado según el idioma del browser, para este caso error.timeoput corresponde a: "La sesi\u00f3n del portal ha superado el tiempo de espera por falta de actividad. Inicie una nueva sesi\u00f3n en el portal {0}." Y aqui podemos apreciar que esperamos un parámetro: "{0}", este es recuperado del código mostrado con el key="link.home" (este mensaje tmb se encuentra en el mismo archivo).

Con esto es fácil ya modificar un mensaje según nuestra necesidad o mejor aún, crear uno nuevo para nosotros. Siguiendo lo leído, para crear el mensaje: "Esto es todo amigos" solo necesitariamos hacer lo siguiente:

EN ESPAÑOL
  1. Ubicar el archivo nls.engine_es.properties
  2. Crear el key "msg.despedida" con el valor del mensaje: "msg.despedida = Esto es todo amigos.". Adicionalmente si quieren recuperar un parametro añadan "{0}".
EN INGLES
  1. Ubicar el archivo nls.engine_en.properties
  2. Crear el key "msg.despedida" con el valor del mensaje: "msg.despedida = That's all folks.". Adicionalmente si quieren recuperar un parametro añadan "{0}".
Y asi sucesivamente por cada idioma que sea necesario. Una vez hecho esto grabamos, y copiamos el archivo en la sgte. ruta:
Luego reiniciamos el servidor de aplicaciones del portal o en su defecto el mismo portal y ya podremos acceder a los nuevos textos que hemos creado. Luego, llamamos en nuestra página de portal al nuevo mensaje del siguiente modo:
<portal-fmt:text key="msg.despedida" bundle="nls.engine"/>
</portal-fmt:text>

Y si quieren mandarle un parámetro:
<portal-fmt:text key="msg.despedida" bundle="nls.engine"><portal-fmt:textparam>[Mi parámetro]</portal-fmt:textparam></portal-fmt:text>

Espero que les sea de utilidad, proximamente algunos tips para generación de themes y skins personalizados.

Saludos.

lunes, 20 de abril de 2009

Detectar versión Internet Explorer - JavaScript

Para los interesados aqui un útil script que permite detectar la versión del Internet Explorer que se esta usando.

Script:
function vIE()
{return (navigator.appName=='Microsoft Internet Explorer')?parseFloat((new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})")).exec(navigator.userAgent)[1]):-1;}

Internet Explorer ADDONS

Antes que nada debo indicar mi preferencia por el Firefox, el cual aparte de permitirnos ciertas gollorias como editar el skin del mismo, nos permite tambien el uso de addons realmente útiles que van desde asistentes de programación web (CssView, FireBug,...) hasta otros como el Del.ici.ous Bookmarks, que me parece realmente fascinante; todo esto nos da un set de herramientas muy versatiles en un solo lugar lo cual, en lo personal, creo que nos facilita en mucho la vida.

Pero, me he dado con la grata sorpresa que Internet Explorer 7, ha abierto hace algún tiempo campo a este tipo de política, y lo mejor de todo, GRATIS. Aun que el conjunto de addons que nos brinda todavía no incluye muchos varios de los utilisimos addons que encontramos en el Firefox, al menos ya se puede nombrar uno que otro como el Del.ici.ous Bookmarks mencionado anteriormente, esperemos que con el tiempo incluyan más addons y siempre manteniendo la política de GRATUIDAD que todos esperamos eternamente de Microsoft, aun que en lo particular, aun seguire prefiriendo Firefox...=)

Internet Explorer 7 Addons: http://www.ieaddons.com/es/