1

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

4

2 回答 2

1

最后,我能够解决这个问题。我能够解决字符问题,我所做的只是将“&”替换为“%26”,一切正常,现在我也不必从本机字符集中转换字符,这提高了性能出色地。

l_clob := replace(l_clob,'&','%26');

请在下面找到 URL 以供进一步参考。

https://community.oracle.com/message/14039814#14039814 https://community.oracle.com/message/3756610#3756610

于 2019-03-14T00:39:25.183 回答
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;   

结尾;

于 2020-07-13T05:22:21.210 回答