文档首页 / 报表集成

报表集成

通过 iframe 把报表、单据、仪表盘嵌入第三方系统:注册应用、服务端签名、拼装嵌入 URL、URL 参数、查询参数传递、外部数据集与导出。

概述

第三方系统集成报表的标准方式是「服务端签名加前端 iframe 嵌入」:appSecret 只保存在第三方服务端,由服务端生成带签名的嵌入地址,前端用 iframe 或新窗口打开,用户不需要在报表系统二次登录,首次访问时平台自动创建对应的外部用户。

可以通过这条链路嵌入的对象:网格报表、单据模板、仪表盘(同一个嵌入入口 embed.html,按报表类型自动渲染)。

集成过程涉及四篇文档,本文是主线:

步骤 内容 文档
1 注册第三方应用,获得 appId 与 appSecret 第三方应用管理
2 在第三方服务端计算签名 嵌入签名与令牌
3 拼装嵌入 URL,前端 iframe 打开 本文
4 监听报表事件、调用报表方法(可选) 宿主事件与方法调用

签名嵌入时序:浏览器、第三方服务端与平台之间的调用顺序

功能入口

  • 管理后台 系统 > 「三方集成」:注册应用,「接入说明」按钮有各场景的代码示例。
  • 嵌入入口:https://<平台地址>/embed.html。
  • 第三方集成示例项目由独立仓库提供:https://github.com/Sight-Data/sight-report-integration-demo(包含后端签名样例、前端集成控制台和宿主 SDK sight-report-embed.js)。

操作步骤

1. 注册应用并生成签名

按 第三方应用管理 创建应用,保存 appSecret;按 嵌入签名与令牌 在服务端计算 _s,reportId 绑定要嵌入的报表 ID。

2. 拼装嵌入 URL

https://<平台地址>/embed.html?reportId=<报表ID>&_s=<签名串>

在此基础上可追加显示控制与查询参数,见下表。

3. 前端 iframe 嵌入

<iframe id="report"
        src="https://your-domain/embed.html?reportId=rpt_sales&_s=eyJhcHBJZCI6..."
        width="100%" height="600" frameborder="0"></iframe>

也可以用 window.open(url, '_blank') 在新窗口打开。

URL 参数说明

参数 说明 取值/默认值
reportId 要打开的报表 ID;必填,缺失时页面提示「缺少报表标识」 报表 ID
_s 签名串;必填,缺失时页面提示「缺少访问凭证」 Base64Url 字符串
parameters 报表查询参数,JSON 对象,键为报表参数名,需做 URL 编码 如 {"year":2025,"dept":"内科"}
hideToolbar 是否隐藏工具栏(打印、导出、分页等按钮) true 或 1 隐藏;不传则按报表自身设置
showQueryForm 是否显示查询表单 false 隐藏;不传则按报表自身设置
viewMode 数据显示模式 pagination 分页、all 显示全部数据(不分页)

带查询参数的完整地址示例:

const params = { year: 2025, dept: '内科' };
const url = 'https://your-domain/embed.html?reportId=rpt_sales'
  + '&_s=' + encodeURIComponent(signature)
  + '&hideToolbar=true&showQueryForm=false&viewMode=all'
  + '&parameters=' + encodeURIComponent(JSON.stringify(params));
document.getElementById('report').src = url;

访问结果与常见页面提示

页面表现 原因 处理
缺少访问凭证 URL 中没有 _s 检查拼装的地址
访问被拒绝,提示签名验证失败、签名已过期、无权访问该报表等 见 嵌入签名与令牌 的提示表 按提示修正签名或应用配置
输入访问密码卡片 目标报表设置了「访问密码」,且客户端 IP 不在该报表的 IP 白名单内 输入密码;签名嵌入与公开链接使用同一套密码规则,见 公开链接与访问密码
访问已过期 会话失效且用签名重新认证失败 让服务端重新生成签名并刷新页面

外部数据集(数据由第三方提供)

报表数据可以不来自平台数据源,而是由第三方在打开报表前把数据推送过来。数据集类型在设计器中选择「运行时注入数据集」,设计时只定义字段结构。

  1. 第三方后端调用 POST /api/embed/staged-dataset/set,请求体带签名和数据集内容,返回 token。
  2. 嵌入或导出时,在 parameters 中加入 "_dataIds": "<token>"。
  3. 用完后调用 POST /api/embed/staged-dataset/clear 释放,未清除的数据 24 小时后过期。

外部数据集流程:推送数据、获得 token、嵌入时带上 _dataIds、用完释放

curl -s -X POST "$BASE/api/embed/staged-dataset/set" \
  -H 'Content-Type: application/json' \
  -d "{\"signature\":\"$S\",\"reportId\":\"$REPORT\",
       \"datasets\":{\"ds_visits\":[{\"dept\":\"内科\",\"visits\":1200},{\"dept\":\"外科\",\"visits\":980}]}}"

响应的 data 为 {"token":"...","datasetNames":["ds_visits"]}。

注意:单次上传的数据集总大小上限默认 5 MB,数据保留时间默认 24 小时(配置项 app.staged-dataset.max-payload-size、app.staged-dataset.ttl-hours)。此接口用签名验证,签名的 reportId 可为空。

导出与目录查询

  • 导出 PDF、Excel、Word、CSV、OFD 的服务端直连接口、报表目录与标签查询接口,见 嵌入接口清单。
  • 仪表盘的嵌入访问会沿模板授权:其中「嵌入报表」区块和点击跳转到的报表,会自动放行(最多 3 层),不需要逐个加进白名单。

注意事项

注意:appSecret 只能在服务端使用。每次打开报表都应实时生成新的签名,不要缓存。

注意:/api/embed/** 按客户端 IP 限流,每分钟最多 120 次请求。

提示:外部用户的数据权限:嵌入会话只能访问签名中 reportId 绑定的报表(以及应用白名单、可达报表范围),不具备管理员权限。

提示:同一个页面里嵌入多个 iframe 时,每个 iframe 使用各自的签名地址;宿主事件也按 iframe 分别收发。

相关文档

联系我们

请填写您的信息,我们将在 1 个工作日内与您联系。