我希望你们中很少有人能够使用Jaspersoft Reports及其新的visualise.js api
我有一个问题,即visualise.js没有生成报告导出文件。会发生什么:
以下是我正在使用的代码(我使用纯文本身份验证进行测试):
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);
答案 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
代码示例(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喜欢我。