文档首页 / 发送事件链接

发送事件链接

说明「发送事件」链接如何在点击单元格时向嵌入报表的宿主页面发送自定义事件,包括事件名规则、消息结构、宿主接收方式和限制。

概述

「发送事件」链接用于把报表嵌入其他系统后的联动。点击单元格时,报表不跳转,而是向嵌入它的宿主页面发送一条自定义事件,事件的数据由链接参数按行求值得到。宿主收到后自行处理,例如打开患者详情页、刷新自己的其他区域。

功能入口

设计器 > 选中单元格 > 「单元格属性」面板 > 「链接」页签 > 「添加链接」 > 「发送事件」。

属性说明

属性 说明 取值/默认值
「链接名称」 链接名称,必填 默认「发送事件」
「事件名」 宿主按此名称分发,必填,提示「请输入事件名」 文本,示例 patient-selected;不能以 report: 开头
「参数配置」 作为事件数据(payload)传出的键值对,取值方式见单元格链接概述 可为空

设置对话框中的说明:点击单元格时向宿主容器(iframe 父页面或嵌入方组件)发送事件,下方参数将作为事件 payload 传出。

report: 前缀保留给系统事件。事件名以 report: 开头时,设计器保存时校验不通过,提示「事件名不能以 report: 开头(该前缀保留给系统事件)」;运行时即使模板里仍有这样的事件名,也会在发送前被丢弃并在控制台输出警告。

消息结构

事件以统一信封发送,protocol 固定为 sight-report。

字段 说明
protocol 固定 sight-report
name 链接上配置的事件名
payload 链接「参数配置」按行求值后的键值对
source.reportId 报表 ID
source.cellName 被点击的单元格名,如 B5
source.cid 被点击单元格的实例标识
context.parameters 事件发生时生效的报表参数
timestamp 发送时刻的毫秒时间戳

context.parameters 与 payload 分开存放,避免自定义键名与报表参数重名。

宿主如何接收

  • iframe 嵌入:宿主监听 window 的 message 事件,取 event.data,判断 protocol === 'sight-report' 后按 name 分发。自定义事件默认直接发送,宿主无需先订阅。
  • 组件嵌入:事件通过 ReportView 组件的 report-event 事件发出,宿主组件自行选择监听。
  • 目标源(targetOrigin)的取值顺序为:宿主已发过 subscribe 握手时锁定的源;否则取 document.referrer 的源;两者都没有时使用 *。宿主发送一条 subscribe 消息即可锁定精确的源。

宿主页面示例:

window.addEventListener('message', (event) => {
  const msg = event.data
  if (!msg || msg.protocol !== 'sight-report') return
  if (msg.name === 'patient-selected') {
    console.log('选中患者', msg.payload.patientId, '来自单元格', msg.source.cellName)
  }
})

示例

  1. 报表以 iframe 嵌入宿主页面。在患者列表报表的「姓名」单元格添加「发送事件」链接,「事件名」填 patient-selected。
  2. 「参数配置」添加参数 patientId,「值」选「取本行字段」,字段选 患者编号(以实际数据集字段为准)。
  3. 保存并发布。宿主页面按上文代码监听。
  4. 在宿主中点击列表中的「姓名」,宿主收到 name 为 patient-selected、payload.patientId 为该行患者编号的消息。

注意事项

注意:只有报表运行在 iframe 中或以组件方式嵌入时,事件才有接收方;在浏览器中直接打开报表时,点击不会有可见效果。

注意:通过钻取弹出的子报表不向宿主发送事件,只有最外层报表通过 iframe 通道发送。

提示:payload 需可被结构化克隆,参数值使用文本、数字、布尔等简单类型。

提示:宿主到报表的调用方式(设置参数、查询、导出等)和系统事件,见报表集成。

相关文档

联系我们

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