Jasper Report使用Oracle APEX App中的Visualize.js API导出为PDF,XLS等

时间:2015-03-05 10:57:40

标签: jquery jasper-reports oracle-apex

我在APEX App页面中寻找导出Jasper报告的解决方案。我有Apex 4.2.2,JasperServer 6.0和Visaualize.js API。问题在于与不同jQuery版本的冲突:我无法在Apex中安装最新版本(Visualize.js所需的2.1.0),因为其他页面将停止工作,因此我希望解决方案是noConflict.js 但是,无法弄清楚如何在我的代码中使用它。到目前为止,我有以下代码,它运行我的报告很好,但导出按钮只是不起作用,因为它需要jQuery 2.1。 0。需要一些帮助 !!! 这是JS代码:

visualize({
auth: { 

    name: "User", 
    password: "Password", 
    organization:"Org"

}}, function (v) {

var $select = buildControl("Export to: ", v.report.exportFormats),
    $button = $("#button"),
    report = v.report({
        resource: "/Public/SomeReport",
        params: {"P1":["1"], "P2": ["2"]},
        container: "#container",

        success: function () {
            button.removeAttribute("disabled"); /* this line make problems when trying to Export the Report */
        },

        error: function (error) {
            console.log(error);
        }
    });

$button.click(function () {

    console.log($select.val());

    report.export({
        //export options here        
        outputFormat: $select.val(),
        //exports all pages if not specified
        //pages: "1-2"
    }, function (link) {
       var url = link.href ? link.href : link;
       window.location.href = url;
    }, function (error) {
        console.log(error);
    });
});

function buildControl(name, options) {

    function buildOptions(options) {
        var template = "<option>{value}</option>";
        return options.reduce(function (memo, option) {
            return memo + template.replace("{value}", option);
        }, "")
    }

    var template = "<label>{label}</label><select>{options}</select><br>",
        content = template.replace("{label}", name)
            .replace("{options}", buildOptions(options));

    var $control = $(content);
    $control.insertBefore($("#button"));
    //return select
    return $($control[1]);
}});

一些HTML代码:

<button id="button" disabled>Export</button><div id="container"></div>
<script src="http://localhost:8080/jasperserver-pro/client/visualize.js?_opt=false"></script><script src="http://code.jquery.com/jquery-2.1.0.js"></script>

任何帮助或方向在哪里挖?理想情况是让它以某种方式工作,如noConflict()......?!? 感谢

1 个答案:

答案 0 :(得分:2)

排序。解决方案是在代码之前添加noConflict脚本:

<script type="text/javascript">
  var j$ = jQuery.noConflict();
</script>

将所有$更改为新添加的j $并更改&#39; removeAttribute&#39; to&#39; removeAttr&#39;:

 j$button.removeAttr("disabled");

此外,在HTML中添加如下按钮的类型:

<button type = "button" id="button" disabled>Export</button>

通过这种方式,库不会冲突,整个代码可以正常工作。 解决。