martes, 15 de enero de 2008

¿Cómo podemos obtener usuario Meta4 en Java?

He recibido algún mail pidiéndome que explique si es posible conocer el ESS/MSS o en JobSite el identificador del usuario conectado o del Rol con el que se conecta, la sociedad, etc.

Hay una forma realmente sencilla de hacer esto, para ello usaremos o los Atributos de la sesión de Java o las entradas de la Bolsa de parámetros de Meta4.

Parte común:

En el Meta4Object SSE_INICIO (caso del ESS/MSS de PeopleNet) en el Nodo SSE_INICIO crearemos una propiedad que llamaremos ID_APP_USER o ID_APP_ROLE o ID_APP_ORG, de ámbito nodo, no visible, tipo cadena variable de el tamaño que necesitemos en cada caso.

Luego en el método CARGA de la misma Estructura de nodo añadimos:
[..]
SSE_INICIO.ID_APP_USER = SCH_SESSION!ROOT_SESSION.ID_APP_USER
SSE_INICIO.ID_APP_ROLE = SCH_SESSION!ROOT_SESSION.ID_APP_ROLE
SSE_INICIO.ID_APP_ORG = SCH_SESSION!ROOT_SESSION.ID_ORGANIZATION

[..]
Obviamente, hay que tener definido un Alias al Meta4Object SCH_SESSION.

Pasamos ahora al entorno JSP. Hay dos páginas que se usan en el acceso al ESS/MSS; están, ambas, en sse_generico/[lang] que son generico_portal.jsp y generico_invisible.jsp.

Recuperaremos estos valores:
<%
M4SessionCl zsesion = M4Context.getM4SessionCl(request);
[..]
String zMeta4Object = "SSE_INICIO";
String znodo = "SSE_INICIO";
[..]
String zIDAPPUSER = "";
String zIDAPPROLE = "";
String zIDAPPORG = "";

try {
M4Operations m4opers = new M4Operations(request);
zIDAPPUSER = m4opers.getItem(znodo,zMeta4Object,znodo,"","ID_APP_USER");
zIDAPPROLE = m4opers.getItem(znodo,zMeta4Object,znodo,"","ID_APP_ROLE");
zIDAPPORG = m4opers.getItem(znodo,zMeta4Object,znodo,"","ID_APP_ORG");

//Usando entradas de la bolsa de Meta4
zsesion.putBagEntries("zIDAPPUSER", zIDAPPUSER);
zsesion.putBagEntries("zIDAPPROLE", zIDAPPROLE);
zsesion.putBagEntries("zIDAPPORG", zIDAPPORG );
} catch (Exception e) {}

//Usando atributos de la sesión de Java
session.setAttribute("zIDAPPUSER", zIDAPPUSER);
session.setAttribute("zIDAPPROLE", zIDAPPROLE);
session.setAttribute("zIDAPPORG", zIDAPPORG );
%>

Como podéis ver, la diferencia inicial es que en el caso de la Entradas de la Bolsa de Meta4 debemos capturar una posible “Exception” mientras que en el caso de los Atributos de la sesión de Java no hace falta.

A la hora de recuperar los valores almacenados también hay diferencias:
<% //Uso de Entradas en la Bolsa de meta4
M4SessionCl zsesion = M4Context.getM4SessionCl(request);
String zIDAPPUSER = zsesion.getBagEntries("zIDAPPUSER");
String zIDAPPROLE = zsesion.getBagEntries("zIDAPPROLE");
String zIDAPPORG = zsesion.getBagEntries("zIDAPPORG ");
%>
O
<% //Uso de Atributos en la sesión de Java
String zIDAPPUSER = (String) session.getAttribute("zIDAPPUSER");
String zIDAPPROLE = (String) session.getAttribute("zIDAPPROLE");
String zIDAPPORG = (String) session.getAttribute("zIDAPPORG");
%>
Como podéis ver también en el caso de los Atributos de la sesión de Java hace falta un “cast” para forzar al compilador que nos entregue un String.

Quizás a primera vista veáis que sea muy útil saber de un usuario su ID_APP_USER pero no veáis tan claro el uso de un Rol diferente al de por defecto, pero ¿habéis pensado que podríamos hacer con un usuario con varios roles o sociedades?, por ejemplo, usar el mismo usuario para el ESS/MSS y para los clientes de administración (Rich y Distribuido) pero que al entrar en el ESS/MMS pudiera elegir, como se hace en los clientes, con que rol accede, EMPLEADO, MANAGER, AUDITOR,… y así mostrar unas u otras opciones… Lo trataré en otro post.
Espero que os sirva...

No hay comentarios: