Carlosdl
29820 pts. | Apr 16 2009 1:49AM GMT
I forgot to mention that you may need to have a PDF printer configured in the client machine.
I have never tried it on a machine without a PDF printer software installed.
Mfmesa
20 pts. | Apr 27 2009 11:41AM GMT
Hi, I develop something like you look for, this is a Package, come whit comment but in spanish
CREATE OR REPLACE PACKAGE PKG_DBA_LANZA_REPORT AS
/*
La forma de poder ejecutar report desde procedimientos o funciones, es mediante el uso
de este paquete. Para ello y como ejemplo de como se ejecutaria un report, los pasos
a seguir seran:
– Resetear el valor de las variables internas del paquete:
PKG_DBA_LANZA_REPORT.REPORT_RESET;
– Asignar el fichero o impresora destino del report (printer,file,…):
PKG_DBA_LANZA_REPORT.SET_DESTYPE(’printer’);
– Asignar el nombre de la impresora o del fichero donde ira dirigido el report:
PKG_DBA_LANZA_REPORT.SET_DESNAME(’cpd1pr2′);
– Registrar el nombre del report que se desea ejecutar (el de extension .rdf):
PKG_DBA_LANZA_REPORT.SET_REPORT_NAME(’HojaRuta_Atm’);
– Registrar cada uno de los parametros y su valor. Debe registrarse todos y cada
uno de los parametros del report, en el mismo ORDEN en el que se pide dentro
del report:
PKG_DBA_LANZA_REPORT.ADD_VARIABLE(’P_ORDEN_FAB’,'01851101′);
PKG_DBA_LANZA_REPORT.ADD_VARIABLE(’P_NSERIE_DESDE’,'1′);
PKG_DBA_LANZA_REPORT.ADD_VARIABLE(’P_NSERIE_hasta’,'2′);
– Ordenar la ejecucion del report.
PKG_DBA_LANZA_REPORT.RUN_REPORT;
*/
TYPE t_parametros IS RECORD (
PARAM_NRO NUMBER, — NRO. DE PARAMETROS PASADOS
PARAM_NOMBRE VARCHAR2(50), — NOMBRE DEL PARAMETRO
PARAM_VALOR VARCHAR2(1024) — VALOR DEL PARAMETRO
);
V_REG_PARAM t_parametros;
TYPE t_lista_parametros IS TABLE OF t_parametros INDEX BY BINARY_INTEGER;
V_LISTA_PARAM t_lista_parametros;
V_DESTYPE VARCHAR2(256) := ‘printer’;
V_DESNAME VARCHAR2(256) := ‘cpd1pr2′;
V_REPORT_NAME VARCHAR2(256) := ”;
V_NRO_PARAMETROS NUMBER :=0;
PROCEDURE REPORT_RESET;
PROCEDURE SET_DESTYPE (P_DESTYPE IN VARCHAR2);
PROCEDURE SET_DESNAME (P_DESNAME IN VARCHAR2);
PROCEDURE SET_REPORT_NAME (P_REPORT_NAME IN VARCHAR2);
PROCEDURE ADD_VARIABLE (P_NOMBRE IN VARCHAR2,P_VALOR IN VARCHAR2);
PROCEDURE RUN_REPORT;
END PKG_DBA_LANZA_REPORT;
————————————————–o———————————————– BODY
CREATE OR REPLACE PACKAGE BODY PKG_DBA_LANZA_REPORT AS
/*
Autor: Manuel Rafael Fernández Mesa
Descripción:
La forma de poder ejecutar report desde procedimientos o funciones, es mediante el uso
de este paquete. Para ello y como ejemplo de como se ejecutaria un report, los pasos
a seguir seran:
– Resetear el valor de las variables internas del paquete:
PKG_DBA_LANZA_REPORT.REPORT_RESET;
– Asignar el fichero o impresora destino del report (printer,file,…):
PKG_DBA_LANZA_REPORT.SET_DESTYPE(’printer’);
– Asignar el nombre de la impresora o del fichero donde ira dirigido el report:
PKG_DBA_LANZA_REPORT.SET_DESNAME(’cpd1pr2′);
– Registrar el nombre del report que se desea ejecutar (el de extension .rdf):
PKG_DBA_LANZA_REPORT.SET_REPORT_NAME(’HojaRuta_Atm’);
– Registrar cada uno de los parametros y su valor. Debe registrarse todos y cada
uno de los parametros del report, en el mismo ORDEN en el que se pide dentro
del report:
PKG_DBA_LANZA_REPORT.ADD_VARIABLE(’P_ORDEN_FAB’,'01851101′);
PKG_DBA_LANZA_REPORT.ADD_VARIABLE(’P_NSERIE_DESDE’,'1′);
PKG_DBA_LANZA_REPORT.ADD_VARIABLE(’P_NSERIE_hasta’,'2′);
– Ordenar la ejecucion del report.
PKG_DBA_LANZA_REPORT.RUN_REPORT;
*/
— Debe ser el primer procedimiento a ejecutar
PROCEDURE REPORT_RESET IS
BEGIN
PKG_DBA_LANZA_REPORT.V_NRO_PARAMETROS := 0;
END REPORT_RESET;
— Asignacion del ‘destype’ printer, file, …
PROCEDURE SET_DESTYPE (P_DESTYPE IN VARCHAR2) IS
BEGIN
PKG_DBA_LANZA_REPORT.V_DESTYPE:=P_DESTYPE;
END SET_DESTYPE;
— Asignacion del nombre del fichero o impresora destino
PROCEDURE SET_DESNAME (P_DESNAME IN VARCHAR2) IS
BEGIN
PKG_DBA_LANZA_REPORT.V_DESNAME:=P_DESNAME;
END SET_DESNAME;
— Asignacion del nombre del report a ejecutar
PROCEDURE SET_REPORT_NAME (P_REPORT_NAME IN VARCHAR2) IS
BEGIN
PKG_DBA_LANZA_REPORT.V_REPORT_NAME:=P_REPORT_NAME;
END SET_REPORT_NAME;
PROCEDURE ADD_VARIABLE (P_NOMBRE IN VARCHAR2,P_VALOR IN VARCHAR2) IS
BEGIN
PKG_DBA_LANZA_REPORT.V_NRO_PARAMETROS:=PKG_DBA_LANZA_REPORT.V_NRO_PARAMETROS+1;
PKG_DBA_LANZA_REPORT.V_LISTA_PARAM(PKG_DBA_LANZA_REPORT.V_NRO_PARAMETROS).PARAM_NRO:=PKG_DBA_LANZA_REPORT.V_NRO_PARAMETROS;
PKG_DBA_LANZA_REPORT.V_LISTA_PARAM(PKG_DBA_LANZA_REPORT.V_NRO_PARAMETROS).PARAM_NOMBRE:=P_NOMBRE;
PKG_DBA_LANZA_REPORT.V_LISTA_PARAM(PKG_DBA_LANZA_REPORT.V_NRO_PARAMETROS).PARAM_VALOR:=P_VALOR;
END ADD_VARIABLE;
— Lanzamiento y ejecucion del report en el servidor via http
PROCEDURE RUN_REPORT IS
req utl_http.req;
resp utl_http.resp;
value VARCHAR2(1024);
V_URL VARCHAR2(1024);
BEGIN
/*
<a href="http://10.142.80.23:7778/dev60cgi/rwcgi60?server=rep60_cpd80023.svr_aplicaciones&userid=gloviajava/gloviajava@livem&destype=printer&desname=cpd1pr2&report=impresion_pedidos&p_pedido=35328" title="http://10.142.80.23:7778/dev60cgi/rwcgi60?server=rep60_cpd80023.svr_aplicaciones&userid=gloviajava/gloviajava@livem&destype=printer&desname=cpd1pr2&report=impresion_pedidos&p_pedido=35328" target="_blank">http://10.142.80.23:7778/dev60cgi/rwcgi6…</a>
*/
V_URL:= ‘http://10.142.80.23:7778/dev60cgi/rwcgi60?server=rep60_cpd80023.svr_aplicaciones&userid=gloviajava/gloviajava@livem&destype=’ || PKG_DBA_LANZA_REPORT.V_DESTYPE || ‘&desname=’ || PKG_DBA_LANZA_REPORT.V_DESNAME || ‘&report=’ || PKG_DBA_LANZA_REPORT.V_REPORT_NAME;
– || ‘&p_pedido=’ || P_PEDIDO;
FOR CONTADOR IN 1..PKG_DBA_LANZA_REPORT.V_NRO_PARAMETROS LOOP
V_URL:= V_URL || ‘&’ || PKG_DBA_LANZA_REPORT.V_LISTA_PARAM(CONTADOR).PARAM_NOMBRE || ‘=’ || PKG_DBA_LANZA_REPORT.V_LISTA_PARAM(CONTADOR).PARAM_VALOR;
END LOOP;
dbms_output.put_line(’url: ‘ || v_url);
req := utl_http.begin_request(V_URL);
utl_http.set_header(req, ‘User-Agent’, ‘Mozilla/4.0′);
resp := utl_http.get_response(req);
LOOP
utl_http.read_line(resp, value, TRUE);
dbms_output.put_line(value);
END LOOP;
utl_http.end_response(resp);
EXCEPTION
WHEN utl_http.end_of_body THEN
utl_http.end_response(resp);
END RUN_REPORT;
END PKG_DBA_LANZA_REPORT;
/
I hope you can use then.
Best Regards, Manuel.
Mfmesa
20 pts. | Apr 27 2009 11:48AM GMT
Sorry, I show you howto do a call from a procedure:
PKG_DBA_LANZA_REPORT.REPORT_RESET;
PKG_DBA_LANZA_REPORT.SET_DESTYPE(P_DESTYPE);
PKG_DBA_LANZA_REPORT.SET_DESNAME(P_DESNAME);
PKG_DBA_LANZA_REPORT.SET_REPORT_NAME(’CambiosIngenieriaCabecera’);
PKG_DBA_LANZA_REPORT.ADD_VARIABLE(’P_ECN’,'1′);
PKG_DBA_LANZA_REPORT.RUN_REPORT;
Chao. Manuel.






