我正在使用Oracle APEX 5.1版,用户正在尝试从Oracle APEX打印BI报表。当前,我们正在使用“ APEX_UTIL.DOWNLOAD_PRINT_DOCUMENT”(签名4)将APEX页中存在的数据打印到BI报告中。
一切正常,直到程序在XML标记中遇到“&”,“ <”或“>”为止。当“ XML BI报告”或“ APEX_UTIL.DOWNLOAD_PRINT_DOCUMENT”(我都提到这两个原因是因为我不知道问题发生在何处)遇到这些字符时,报告将显示为空白。如果从XML标签中手动删除了上述字符,则BI报告可以正常工作并被打印出来。
复制步骤: 1)按照下面的示例创建XML数据。请参见“ GMRISKMITIGATION” XML标记中的“&”(您可以将“&”替换为“ <”或““>”,并且得到相同的结果)
<?xml version="1.0"?>
<ROWSET>
<ROW>
<ID>1234</ID>
<ADDITIONAL_COMMENTS>New "test" front test test test test test test.</ADDITIONAL_COMMENTS>
<GMRISKMITIGATION> test test test test & test.</GMRISKMITIGATION>
</ROW>
</ROWSET>
2)现在,您有了数据,然后使用下面从APEX页面中的“按钮”中给出的例程下载BI报告。
APEX_UTIL.DOWNLOAD_PRINT_DOCUMENT (p_file_name => 'myreport',p_content_disposition => 'attachment', p_report_data => l_clob, /* XML data in clob format */ p_report_layout => l_file_as_clob,p_report_layout_type => 'rtf',
p_document_format => 'rtf');
3)现在,如果您按下按钮,则BI报告将成功下载,但是将为空。
答案 0 :(得分:1)
最后,我能够解决此问题。我能够解决字符问题,我所要做的就是用“%26”替换“&”,并且一切正常,现在我也不必从本地字符集转换字符,这提高了性能。好吧。
l_clob := replace(l_clob,'&','%26');
请在下面找到该URL,以供进一步参考。
https://community.oracle.com/message/14039814#14039814 https://community.oracle.com/message/3756610#3756610
答案 1 :(得分:0)
您可以使用APEX_UTIL.URL_ENCODE将'&'转换为'%26'
声明
l_clob CLOB;
l_varchar VARCHAR2(32767);
l_start PLS_INTEGER := 1;
l_buffer PLS_INTEGER := 32767;
开始
DBMS_LOB.CREATETEMPORARY(l_clob, TRUE);
FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(l_xml_clob) / l_buffer) LOOP
l_varchar := DBMS_LOB.SUBSTR(l_xml_clob, l_buffer, l_start);
l_varchar := APEX_UTIL.URL_ENCODE(l_varchar);
DBMS_LOB.WRITEAPPEND(l_clob, LENGTH(l_varchar), l_varchar);
l_start := l_start + l_buffer;
END LOOP;
END;