iframe集成报表API

<< Click to Display Table of Contents >>

当前位置:  部署与集成 > Web页面集成 

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的目的是为打开报表,并在刷新、关闭时使用。

2.获取打开报表的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 内显示错误提示信息。