遇到特殊字符时,Oracle APEX的BI报告将打印为空白

时间:2019-03-12 05:55:17

标签: oracle oracle-apex oracle-apex-5 oracle-apex-5.1 oracle-apex-18.2

我正在使用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报告将成功下载,但是将为空。

2 个答案:

答案 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;