viernes, 11 de enero de 2008

Obtener un Informe de Meta4 en el ESS/MSS

Muchas veces, los clientes nos piden que los Informes que hemos desarrollado para los entornos de clientes distribuidos (antes de la v7 de PeopleNet) o clientes ricos (desde la v7) puedan ser obtenidos en el ESS. Algunos ejemplos son el recibo de nómina, el Certificado de Haberes, recibos de las solicitudes hechas en el ESS (cursos de formación, préstamos,...), el currículum de empleados, ...

Meta4 PeopleNet provee de un mecanismo sencillo para poder obtenerlos através del tag m4:executereport.

Vamos a pensar en el siguiente caso… Digamos que el cliente nos pide poder obtener en el MSS, desde la página del “Curriculum Vitae del empleado” accesible desde la página “Datos personales de mis empleados” el Curriculum de sus empleados. Se podría usar el Informe ya existente del “Dossier del empleado” (SCO_RP_EMPLOYEE_DOSSIER) pero tiene mucha información que quizás no nos interese, así que lo haremos de otra forma, para ver los pasos uno a uno. Los pasos que realizaremos serán:

  • Crearemos un Meta4Object que recoja la información que necesitamos de las tablas de Persona (STD_PERSON) que pondremos como nodo Principal, eMail (STD_EMAIL), Teléfono (STD_PHONE_FAX), Dirección (STD_ADDRESS), Historial académico (STD_HR_ACAD_BACKGROUD), Experiencia profesional (STD_HR_PREV_JOBS) e Idiomas (STD_HR_LANGUAGES). Le llamare: CXX_CV_ESS y tendrá la siguiente estructura:
  • Como cosas especiales crearemos propiedad PRP_ID_PERSON (cadena variable de 9 caracteres, ámbito nodo y no visible, aunque mientras desarrollamos será mejor que sea visible y así podremos hacer pruebas) en el Nodo principal, que en la sentencia estará igualada a STD_ID_PERSON :

    SELECT @STD_ID_PERSON = A.STD_ID_PERSON, @STD_N_FAMILY_NAME_1 = A.STD_N_FAMILY_NAME_1, @STD_N_FIRST_NAME = A.STD_N_FIRST_NAME, @STD_DT_BIRTH = A.STD_DT_BIRTH, @STD_SSN = A.STD_SSN, @SCO_PHOTO = A.SCO_PHOTO
    FROM &STD_PERSON A
    WHERE (A.STD_ID_PERSON = @PRP_ID_PERSON)
  • Nota: Ojo con las fotos y archivos de imágenes… obviamente quedarán muy bien, pero hay que tener en cuenta que la ruta debe poder verla el SERVIDOR DE APLICACIONES que es donde se generará el Informe.
  • En las propiedades avanzadas de la estructura de nodo del nodo principal pondremos que puede ejecutar informes.
  • El siguiente paso es crear un Informe más o menos bonito… “para gustos los colores”. Le llamaremos CXX_RPT_CV_ESS.
  • Una vez que lo tengamos preparado, nos iremos a la página de “Curriculum Vitae del empleado”, “mss_g1_cv.jsp” de la carpeta “mss_g1/espanol”.

  • Añadiremos un nuevo link, por ejemplo debajo de “Consulta otros CVs” llamado “Descarga el CV (pdf)” de tal forma que al pincharlo se nos descargará el CV del empleado seleccionado. El código de este link sería:

<li><a class="enlacefuncional" title="Descarga el CV (pdf)" href="/servlet/CheckSecurity/JSP/mss_g1/mss_g1_p1_cv_pdf.jsp?zestado=11&amp;id=<m4:item"
m4name="SSE_EMP_CV!M4T_EMP_PERS_DATA.STD_ID_PERSON">">Descarga el CV (pdf)</a></li>

  • Ahora construiremos una nueva página en “mss_g1/espanol” llamada “mss_g1_cv_pdf.jsp”. El código pudiera ser el siguiente (link).

Repasaremos un poco las cosas importantes que tiene la página "mss_g1_cv_pdf.jsp”:

Líneas 6 y 7:

String zIdCV = request.getParameter("id");
String sParametros= "CXX_CV_ESS;CXX_CV_PERSON$CXX_CV_PERSON PRP_ID_PERSON \""+ zIdCV +"\"$";


Recogemos el parámetro enviado por la página padre y componemos un String de parámetros de la siguiente forma:

Meta4Object;Nodo Principal;Nodo de parámetros Propiedad_1 “Valor” ;Nodo de parámetros Propiedad_2 “Valor”$

Líneas 39-43:


function m4CVPdf(){
OpenReport('<m4:executereport idreport="CXX_RPT_CV_ESS" syssentence="<%=sParametros%>"
outputtype="PDF" otherparams="#/AUTOLOAD:DESIGN:OFF#"/>');
history.back();
}
window.setTimeout('m4CVPdf()',2000);

Lo que hace la función m4CVPdf() y la OpenReport(path), es levantar un path que nos devuelve la ejecución del tag m4:executereport en una nueva ventana, tras 2 segundos de espera (para darle un poco de tiempo a que se genere y se copie en la ruta /Temp/USER_SESSION/). Luego retorna a la página que lo ha llamado.

Lo importante de esta página, y de este post, es la llamada a este tag: m4:executereport cuyos atributos son idreport; donde indicaremos el nombre del informe que queremos ejecutar, syssentence; que son los parámetros del Meta4Obejct, outputtype; que puede ser PDF o HTML y otherparams; con parámetros de la generación de Informes.

El tag m4:executereport llama a la tarea M4THROW y ésta, usando los parámetros indicados, lanza la ejecución del Informe. Como todo Informe la carga se realiza usando la ROOTLOAD del nodo principal. Lo digo, porque es posible tocar los informes existentes para que antes de la LOAD_BLK o de la LOAD_PRG del nodo principal, podamos dar valor a ciertos parámetros, por ejmplo, al intentar levantar el recibo o el Certificado de Haberes le podemos decir que levante el recibo de la persona que esté logada en el ESS. (Tiene un poco más de trabajo pero pasa por enviar otro parámetro que indique si la ejecución se hace desde el ESS/MSS o si es desde un cliente que será el de por defecto.)

Si quereis probarlo lo mejor sería hacer primero algo pequeño, por ejemplo con solo información de la persona y luego ya añadiréis el resto de nodos.

Espero que os sirva...

5 comentarios:

Oscar López dijo...

Podeis ver como se hace con el Certificado de Haberes el post de este mismo blog:

http://m4peoplenet.blogspot.com/2008/01/certificado-de-haberes-en-pdf-para-el.html

Un saludo!
Oscar L.

Anónimo dijo...

Hola, que tal , recien eh empezado a trabajar con el ESS/MSS y quiero probar los informes, estuve revisando tu guia y quisiera saber si el link que creaste, llamado “Descarga el CV (pdf)” esta bien definido?, ya que cuando lo agrego al JSP no me funciona:

Gracias de Antemano
Atte.
Daniel Juarez

Anónimo dijo...

Hola, tengo una pregunta nuevamene, ya solucione lo del link(comentario anterior), faltaba un "/" al final y habia una comilla de mas, me coge el ID PERSONA al momento del darle click al link, pero lo que quiero saber ahora es en el momento de construir el "sParametros", mi objeto se llama SSE_PRUEBA_VISOR,y lo eh construido de esta manera:

String sParametros= "SSE_PRUEBA_VISOR;SSE_PRUEBA_VISOR$SSE_PRUEBA_VISOR PRP_ID_PERSON \""+ zIdCV +"\"$";

Quisiera saber si esta bien definida esa variable, ya que cuando lo pruebo solo me vota una pagina en blanco.

Gracias de antemano
Daniel

Oscar López dijo...

Hola Daniel, no veo problemas en el parámetro sParametros.

Puede ser que o no estés llamando correctamente al Report desde la JSP o que el Report no esté configurado correctamente.

Pasame algo más de información.

Un saludo!
Oscar L.

Oscar López dijo...

Tras revisar con Daniel su problema, se trata de que tiene el Meta4 Application Server (appserver) en una máquina distinta a la máquina donde reside el Tomcat que usa como webserver.

Realmente se debe parametrizar el configclient.xml, pero usando el tag m4:executereportsec se puede solucionar el problema.

Podeis leer más de este tag en m4:executereportsec