<< Click to Display Table of Contents >> iframe集成报表API复制链接 |
1.概述
外部系统通过iframe集成了永洪的页面,并内外通过 postMessage 进行通信和交互;可以实现打开报表,刷新,关闭的动作。可以实现较为复杂的集成场景。
iframe url 为查看报告复制的报表链接;例如:http://ip:port/bi/Viewer?proc=1&action=viewer ,默认不会打开任何报表页面,通过外部逻辑驱动对报表的打开。或者指定报表路径:http://ip:port/bi/Viewer?proc=1&action=viewer&db=test.db,默认打开一个报表。
打开、刷新、关闭都是通过postmessage发送消息给http://ip:port/bi/Viewer?proc=1&action=viewer外部控制它做具体的动作,获取打开报表的id为一个监听事件,获取报表id的目的是为打开报表,并在刷新、关闭时使用。
通过监听iframe message事件,获取打开报表的id。
请求示例
_iframe.contentWindow.addEventListener("message", (event) => {
const data = event.data ? JSON.parse(event.data) : null;
if(data && data.action == "OpenedDBID") {
console.log('Opened DB id: ', data.id);
}
});
➢注意:
message 事件需要在打开报表执行前监听。
3.打开报表
允许用户通过此接口打开报表。
请求参数
参数 |
类型 |
约束 |
---|---|---|
action |
String |
常量:'OpenDB' |
db |
String |
报表路径 |
➢注意:
所有传参最终使用JSON格式封装。
_iframe.contentWindow.postMessage(
JSON.stringify({
action: "OpenDB",
db: "xxx"
}),
"*",
);
➢注意:
xxx 替换为报表 path。
成功响应
iframe 内打开 db 指定的路径对应的报表。
错误响应
iframe 内显示错误页面。
注意事项
无权限则iframe显示无权限提示或者跳转到登录页面。
4.刷新报表
允许用户通过此接口刷新报表。
参数 |
类型 |
约束 |
---|---|---|
action |
String |
常量:'RefreshDB' |
id |
String |
必须指定报表 id |
➢注意:
所有传参最终使用JSON格式封装。
_iframe.contentWindow.postMessage(
JSON.stringify({
action: "RefreshDB",
id: "xxx"
}),
"*",
);
➢注意:
xxx 替换为报表 id;报表 id 获取,参考获取打开报表id。
成功响应
iframe 内刷新对应的报表。
错误响应
iframe 内显示错误信息。
5.关闭报表
允许用户通过此接口关闭服务器端报表。
请求参数
参数 |
类型 |
约束 |
---|---|---|
action |
String |
常量:'CloseDB' |
params |
String |
{id: xxx},必须指定报表 id |
➢注意:
所有传参最终使用JSON格式封装。
请求示例
_iframe.contentWindow.postMessage(
JSON.stringify({
action: "CloseDB",
params: {
id: "xxx"
}
}),
"*",
);
➢注意:
xxx 替换为报表 id;报表 id 获取,参考获取打开报表id。
成功响应
iframe 内打开db无变化,再操作报表将不再响应。
错误响应
iframe 内显示错误提示信息。