异步模式导出功能最终都是为了能自动生成Excel、PDF、Word、Txt、cvs等格式的文件,异步模式能够解决老模式等待超时的问题,使用相对老模式会复杂一点。
老模式只支持后台java方式调用,异步模式支持前端调用。
基本原理
异步模式通过两个接口配合调用提供导出功能。
- 发起导出接口
- 轮询导出结果接口
接口使用流程
发起导出接口说明
请求地址
Request Method:POST
Request URL:{http}://{ip}:{port}{/lczServer}/oapi/report/export
组成说明
{http} 网络协议名称,支持http或https两种方式
{ip} 乐创者服务程序部署所在的服务器地址,支持ip地址或域名
{port} 乐创者服务程序部署所在Web应用的访问端口。如果是80端口,可缺省
{/lczServer} 乐创者服务程序部署时的应用上下文根目录(Web Context-root),可根据业务需要进行设置。如放在“ROOT”下时,内容为空即可;如果上下文根目录为“test”,则应该写“/test”
请求体
{
"authId":"",
"targetVolume": "",
"fileName": "",
"variants": "",
"exportFileType": "EXCEL",
"exportExcelFileType": "XLSX",
"pageToSheet": false
}
必选参数
参数名 |
类型 |
默认值 |
说明 |
---|---|---|---|
authId | string | 公开方式访问报表:此参数不设置, 也可以使用公开身份的authId值(authId=anonymous_admin)。 非公开方式访问报表:可使用登录乐创者服务成功后返回的authId值(authId=xxxxxxxxxxxx) 如果系统配置中开启了‘允许公开访问’,则可通过公开方式直接查看报表。 |
|
targetVolume | string | 报表模板文件所属应用内部名称 | |
fileName | string | 报表模板文件文件内部名称 |
可选参数
参数名 |
类型 |
默认值 |
说明 |
---|---|---|---|
variants | string | 报表参数串,格式为:param1=值;param2=值 例如:variants=param1=1;param2=2; |
|
exportFileType | string | EXCEL | 导出格式类型,EXCEL\PDF\TXT ; 参数为空的话,则默认为导出excel。 |
exportExcelFileType | string | XLSX | 指定导出excel的版本,XLSX\XLS ,默认为 XLSX |
pageToSheet | boolean | false | 分页分sheet开关,true\false; 报表只有一个sheet时起作用。pageToSheet参数为空,则默认为false。 |
返回结果
{
"success": true,
"code": "",
"msg": "",
"content": "id"
}
content为导出结果缓存id
导出结果接口说明
请求地址
Request Method:POST
Request URL:{http}://{ip}:{port}{/lczServer}/oapi/report/export/result
请求体
{
"authId": "",
"resultKey": ""
}
resultKey值为发起接口返回的content内容
返回结果
{
"success": true,
"code": "",
"msg": "",
"content": {
"state":true,
"errors":[{
"level":"",
"summary":"",
"detail":""
}],
"result":{
"path": ""
}
}
}
返回结果说明
参数名 |
类型 |
说明 |
---|---|---|
state | string | 状态: 发起 START, 执行中 RUNNING, 完成 SUCCESS, 失败 FAILURE |
errors | array | 错误信息数组 |
errors[].level | string | 错误信息级别,DEBUG, INFO, WARN, ERROR |
errors[].summary | string | 错误信息描述 |
errors[].detail | string | 错误信息详情 |
result | object | 结果 |
result.path | string | 文件下载地址 |
当返回结果state为SUCCESS时,使用result.path下载文件即可,返回的path是乐创者服务的相对地址。
demo
<html>
<head>
<meta charset="UTF-8" />
<title>异步导出</title>
<script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
<input type="button" value="点击导出excel" onclick="clickBt()" />
<script type="text/javascript">
// 乐创者服务地址
var serverUrl = "http://{ip}:{port}/HappyServer/";
// authId
var authId = "anonymous_admin";
function clickBt() {
console.log("导出excel,发起请求");
var body = {
authId: authId,
targetVolume: "xxxxxx", // 模板所属应用内部名称
fileName: "xxxxxx" // 模板内部名称
};
$.ajax({
type: "post",
url: serverUrl + "oapi/report/export",
contentType: "application/json;charset=UTF-8;",
data: JSON.stringify(body),
success: function (res) {
if (res.success) {
// 返回结果缓存id,调用轮询结果接口
doResult(res.content);
} else {
console.log(res.msg);
}
},
});
}
// 导出结果轮询
function doResult(key) {
var body = {
authId: authId,
resultKey: key,
};
$.ajax({
type: "post",
url: serverUrl + "oapi/report/export/result",
contentType: "application/json;charset=UTF-8;",
data: JSON.stringify(body),
success: function (res) {
if (
res.content.state == "START" ||
res.content.state == "RUNNING"
) {
// 未完成,延迟轮询
setTimeout(doResult(key), 200);
} else if (res.content.state == "FAILURE") {
// 失败
console.log(res);
} else if (res.content.state == "SUCCESS") {
// 完成
path = res.content.result.path;
console.log(res);
}
},
});
}
</script>
</body>
</html>
作者:wangjingxin 创建时间:2023-12-28 09:02
最后编辑:wangjingxin 更新时间:2025-04-22 15:31
最后编辑:wangjingxin 更新时间:2025-04-22 15:31
