viernes, 8 de febrero de 2013

PeopleSoft - Impresión de una sección de una página con IScript

Supongamos que tenemos una página como la siguiente:

 

 

En donde tenemos un objeto de tipo HTML y el texto de éste es el que queremos mandar a impresión (sin ninguna otra parte de la página, llámese secciones, campos, menú, etc..)

Bueno, después de haber buscado hacerlo por JavaScript y que no me dejó por sus restricciones de seguridad (que no dudo que se pueda, pero ya no me adentré más en eso) me fui por IScript de Peoplesoft.

Bueno, primero hablemos de cómo llené el objeto HTML.



Dentro del catálogo de mensajes, cree el relleno de esto, el texto dándole el formato que necesito con HTML.



Utilizando variables a sustituir, con la misma mecánica de PS, utilizando el %1  %2  %3  etc… insertándolo en las partes del texto donde deberán de aparecer.

Dentro de la página, obviamente para llenarlo le paso los parámetros que se necesitan:

&sHTML = MsgGetExplainText(123, 480, "No configurado", &emplid, &nombre);

MiRegistro.CampoHTML.value = &sHTML;

Ok, hasta aquí tenemos como se llenó en la página.

CREANDO EL ISCRIPT (WebLibrary)

Creamos un record con 1 solo campo. El nombre del Record necesariamente debe de comenzar con el prefijo WEBLIB_



El nombre del campo si puede ser cualquiera. Nos vamos al FieldFormula de ese campo y ponemos:

import PT_NAV:*;

Declare Function SetDocDomainForPortal PeopleCode FUNCLIB_PORTAL.TEMPLATE_FUNC FieldFormula;

Function IScript_Imprime ()
   &domainScript = SetDocDomainForPortal();
   &convocatoria = %Request.GetParameter("e");
   &nombre = %Request.GetParameter("n");
   &texto = MsgGetExplainText(123, 480, "N configurada", &emplid, &nombre);
   &HTML = GetHTMLText(HTML.HTML_BE_MSJ, %Response.GetStyleSheetURL(StyleSheet.PSSTYLEDEF), &domainScript, &texto);
   %Response.Write(&HTML);

End-Function;

El nombre de la función necesariamente debe de iniciar con IScript_ 

Si se fijan, estoy llamando un objeto HTML (HTML.HTML_BE_MSJ) en este objeto tengo el diseño de la página nueva que se abrirá y mostrará el contenido que requiero para mandarlo a impresión. Este objeto lo tengo así:



En el cuál estoy manejando variables que le pasaré con el contenido del texto que necesito imprimir y otros detalles. También, como solo me interesa imprimirlo, en el evento onload de ésta página lo estoy mandando a impresión e inmediatamente después me regreso a la página desde la cuál se hizo el llamado.

PERMISOS

Ahora, tenemos que registrar la librería, podría ser manualmente o por el asistente, el cuál se activa cuando creamos el Record de tipo WEBLIB_



Y de ahí seguimos las instrucciones. Yo usualmente lo añado a la carpeta Tools (que esta oculta). No se nos debe de olvidar añadirlo a la lista de permisos, que incluso desde el asistente se puede agregar





LLAMANDO LA LIBRERÍA

Después, en la página agregamos un botón que apunte a cualquier registro de tipo derived, y en el evento FieldChange pondríamos:

SQLExec("select nombre from ps_names where emplid=:1", PS_JOB.EMPLID, &nombre);

 

&Url = %Request.Scheme | "://" | %Request.ServerName | ":" | %Request.ServerPort | "/psc/" | %DbName | "/" | %Portal | "/";
&Url = &Url | %Node | "/s/WEBLIB_CYT_BE.CYT_BTN_PRINT.FieldFormula.IScript_Imprime ";

&Url = &Url | "?e=" | PS_JOB.EMPLID.value | "&n=" | &nombre;

 

%Response.RedirectURL(&Url);

 



Y listo!!

Al momento de dar clic al botón abrirá una nueva página junto con la caja de diálogo de impresión, y al momento de imprimir regresará a la página original.

Si observan, la función IScript no recibe como tal ningún parámetro, todos los que se necesiten serán leídos utilizando el %Request.GetParameter("MiParámetro").

Espero les sea de utilidad.

No hay comentarios.:

Publicar un comentario

Translate