Jaspersoft visualise.js报告导出无法生成文件

时间:2016-02-03 11:55:33

标签: javascript jquery codeigniter jasper-reports jasperserver

我希望你们中很少有人能够使用Jaspersoft Reports及其新的visualise.js api

我有一个问题,即visualise.js没有生成报告导出文件。会发生什么:

  1. 我可以通过visualise.js API加载报告,加载并显示在我的网页上
  2. 导出控件也成功加载,因此我有导出文件格式的下拉列表和导出文件的按钮。
  3. 当我点击导出按钮时,整个页面会重新加载,就像导出按钮实际上是一个提交按钮而没有任何反应。
  4. 有时,导出会起作用,它会生成文件。虽然它没有模式来生成文件,何时会失败。
  5. 以下是我正在使用的代码(我使用纯文本身份验证进行测试):

        visualize({
        auth: {
            name: "mylogin",
            password: "mypass",
            organization: "organization_1"
            }
    
    }, function (v) {
    
            var $select = buildControl("Export to: ", v.report.exportFormats),
                $button = $("#button"),
                report = v.report({
                    resource: "/FPSReports/journal",
                    container: "#export",
                    params: {
                        "journal_ref": [ "<?php echo $reference; ?>" ],
                    },
    
                    success: function () {
                        button.removeAttribute("disabled");
                    },
    
                    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:

        <div class="grid">
          <div class="grid-8"></div>
          <div class="grid-8 center"><a href="" id="button" class="large link_button margin2">Export</a></div>
          <div class="grid-8"></div>
    
        </div>
    
    <div class="grid">
        <div class="grid-24" id="export"></div>
    </div>
    

    唯一的参数来自URI段(我正在使用codeigniter框架):

    $reference = $this->uri->segment(3, 0);
    

1 个答案:

答案 0 :(得分:0)

我找到了一个似乎有效的答案,并解决了这个问题。在这里发布以防万一其他人像我一样有这个特定的问题。

简而言之: 在花了好几个小时查看控制台调试输出后,我意识到每次我尝试发送导出请求时都会打开一个新会话。没有退出前一个。而且显然这是禁忌。我不太清楚JS,但据我所知,会话ID在请求中不匹配。请随时在这里纠正我:)

此问题的解决方案(例如,如果您遇到visualize.js的身份验证问题)非常简单。在全局配置中设置身份验证:

visualize.config({
auth: {
    name: "superuser",
    password: "superuser"
}
});

无论您使用的是令牌还是纯文本还是其他任何通过api可用的身份验证。

然后在您的网站上的任何其他地方做你的东西:

visualize(function (v) {
v("#container1").report({
    resource: "/public/Samples/Reports/06g.ProfitDetailReport",
    error: function (err) {
        alert(err.message);
    }
});
 });

 visualize(function (v) {
   v("#container2").report({
    resource: "/public/Samples/Reports/State_Performance",
    error: function (err) {
        alert(err.message);
         }
    });
    });

一切都应该对你有用,就像对我一样。这适用于visualize.js的5.6和6.1版。

我的研究的进一步阅读和链接:

Token based authentication to Jasper reports failing when used with visualize.js

Visualize.js authentication error after second login

http://community.jaspersoft.com/questions/842695/visualizejs-authentication-error

http://community.jaspersoft.com/questions/845886/authentication-error-refresh-credentials-visualizejs

代码示例(5.6): http://jsfiddle.net/TIBCO_JS_Community/sozzq0sL/embedded/

Api样本(6.1): http://community.jaspersoft.com/wiki/visualizejs-api-samples-v61

Api样本(5.6): http://community.jaspersoft.com/wiki/visualizejs-api-notes-and-samples-v56

真的希望这能帮助Jaspersoft&amp; visualize.js喜欢我。

相关问题