我有一个 apex 应用程序,可以使用 Oracle sqldeveloper DB 中存储的信息下载在 JasperStudio 中设计的报告。 单击按钮即可下载报告,直接下载到我的下载文件夹。
这是 PL/SQL 代码,位于名为 VIEWPersonalInfo 的进程中,应该提取所需的报告:
-- assign value for Application Item
:APP_FILE_NAME := 'Customer_Personal_information' ; --- Name of Report on the Server
:APP_FILE_TYPE := 'PDF' ; --- the file format to be used
:APP_PARM_NAME := 'ID' ; ---- name of the parameter on the server
:APP_PARM_VALUE := :P2_ID; ----Name of the Page Item
-- call GET_REPORT procedure
GET_REPORT ( p_file_name => :APP_FILE_NAME ,
p_file_type => :APP_FILE_TYPE ,
p_paramter_name => :APP_PARM_NAME ,
p_paramter_value => :APP_PARM_VALUE ) ;
这是名为 GET_REPORT 的过程,用于帮助连接到 JasperStudio,在 sqldeveloper 中完成:
create or replace PROCEDURE GET_REPORT (p_file_name VARCHAR2 ,p_file_type VARCHAR2 ,p_paramter_name VARCHAR2 ,p_paramter_value VARCHAR2 )
IS
v_blob BLOB;
v_file_name VARCHAR2 (100) := p_file_name||'.'||p_file_type;
v_vcContentDisposition VARCHAR2 (100) := 'inline';
v_hostname VARCHAR2(100) := 'IP'; -- your hostname, eg: localhost
v_port NUMBER := 'port'; -- port for your JasperReports Server, eg: 8081
v_username VARCHAR2(100) := 'jasperadmin'; -- jasperreports server username
v_password VARCHAR2(100) := 'jasperadmin'; -- jaspereports server password
v_jasper_string VARCHAR2(100) := v_username || ';' || v_password;
v_login_url VARCHAR2(100) := 'http://' || v_hostname || ':' || v_port || '/jasperserver/rest/login';
-- modify below URL before use!
-- you should modify the line below; change /Pretius/ to your own name
-- before you add a line try your URL in a web browser
v_report_url VARCHAR2(100) :=
'http://' || v_hostname || ':' || v_port || '/jasperserver/rest_v2/reports/reports/' || v_file_name;
BEGIN
-- log into jasper server
v_blob := apex_web_service.make_rest_request_b(
p_url => v_login_url,
p_http_method => 'GET',
p_parm_name => apex_util.string_to_table('j_username;j_password',';'),
p_parm_value => apex_util.string_to_table(v_jasper_string,';')
);
-- download file
v_blob := apex_web_service.make_rest_request_b(
p_url => v_report_url,
p_http_method => 'GET',
p_parm_name => apex_util.string_to_table(p_paramter_name,';'),
p_parm_value => apex_util.string_to_table(p_paramter_value,';')
);
--OWA_UTIL.mime_header ('application/pdf', FALSE); -- view your pdf file
OWA_UTIL.MIME_HEADER( 'application/octet', FALSE ); -- download your pdf file
HTP.p('Content-Length: ' || DBMS_LOB.GETLENGTH(v_blob));
HTP.p('Content-Disposition: ' || v_vcContentDisposition ||'; filename="' || v_file_name || '"');
OWA_UTIL.http_header_close;
WPG_DOCLOAD.DOWNLOAD_FILE(v_blob);
APEX_APPLICATION.STOP_APEX_ENGINE;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
当我尝试下载时,出现错误
ORA-29273: HTTP request failed
。
可能是什么问题?
错误堆栈中应该有额外的错误代码;您发布的错误只是表明某事出了问题,但下一个错误说明了是什么。
根据您目前所说的,我怀疑是关于
ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝。
这意味着您(实际上是您的 DBA)必须创建一个。