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

Jaspersoft visualise.js report export failing to produce file

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

我有一个问题,visualise.js 没有生成报告导出文件。发生的事情是:

  1. 我能够通过 visualise.js API 成功加载报告,它加载并显示在我的网页上
  2. 导出控件也成功加载,所以我有导出文件格式的下拉菜单和一个导出文件的按钮。
  3. 当我点击导出按钮时,整个页面重新加载,就好像导出按钮真的是一个提交按钮一样,但没有任何反应。
  4. 偶尔,导出会起作用并生成文件。虽然没有确定何时生成文件以及何时失败的模式。

下面是我为此使用的代码(我使用纯文本身份验证进行测试):

    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);

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

简而言之: 在花了几个小时查看控制台调试输出后,我意识到每次我尝试发送导出请求时都会打开一个新会话。无需注销上一个。显然这是一个禁忌。我不太了解 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 版

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

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 的新手和 visualize.js 像我这样的人有所帮助。