Jaspersoft visualise.js 报告导出无法生成文件
Jaspersoft visualise.js report export failing to produce file
我希望你们中很少有人使用过 Jaspersoft Reports 及其新 visualise.js api
我有一个问题,visualise.js 没有生成报告导出文件。发生的事情是:
- 我能够通过 visualise.js API 成功加载报告,它加载并显示在我的网页上
- 导出控件也成功加载,所以我有导出文件格式的下拉菜单和一个导出文件的按钮。
- 当我点击导出按钮时,整个页面重新加载,就好像导出按钮真的是一个提交按钮一样,但没有任何反应。
- 偶尔,导出会起作用并生成文件。虽然没有确定何时生成文件以及何时失败的模式。
下面是我为此使用的代码(我使用纯文本身份验证进行测试):
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
代码示例 (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 像我这样的人有所帮助。
我希望你们中很少有人使用过 Jaspersoft Reports 及其新 visualise.js api
我有一个问题,visualise.js 没有生成报告导出文件。发生的事情是:
- 我能够通过 visualise.js API 成功加载报告,它加载并显示在我的网页上
- 导出控件也成功加载,所以我有导出文件格式的下拉菜单和一个导出文件的按钮。
- 当我点击导出按钮时,整个页面重新加载,就好像导出按钮真的是一个提交按钮一样,但没有任何反应。
- 偶尔,导出会起作用并生成文件。虽然没有确定何时生成文件以及何时失败的模式。
下面是我为此使用的代码(我使用纯文本身份验证进行测试):
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
代码示例 (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 像我这样的人有所帮助。