7.8 配置动作
动作区段(分析表单第 5 段)让分析在每次触发并满足指定条件时,自动执行预定义的动作。动作通过引用动作模板进行配置——模板定义"做什么",分析侧的动作规则定义"何时做"以及对本分析生效的局部参数调整。
典型场景:一个配电变压器元素的分析每 5 分钟输出一次平均电压 avg_voltage。希望当 avg_voltage 超过 235 时,自动向飞书运维群发送一条告警通知。只需在基础库中创建一个通知类动作模板,再在分析第 5 段添加一条动作规则引用该模板,并把触发条件设为 attributes['avg_voltage'] > 235 即可。
本版本已实现通知类型动作的完整配置与执行逻辑,本章介绍通知类型动作的配置。
7.8.1 动作规则
动作区段由一条或多条动作规则组成。点击添加动作新增一条规则,每条规则包含两个必填部分:
| 部分 | 说明 |
|---|---|
| 触发条件(必填) | 判断本次输出是否执行该动作的条件表达式。表达式不允许为空。 |
| 动作模板(必填) | 引用的动作模板。选定模板后,模板的动作类型、描述只读展示,并展开该模板的可编辑配置。 |
可为同一分析添加多条动作规则,各规则相互独立、依次评估。点击规则上的删除移除该规则。
7.8.2 触发条件
触发条件使用 attributes['属性名'] 语法引用分析的输出属性,结果须为布尔值。点击条件输入框打开条件编辑器,通过选择输出属性来构造表达式。
| 表达式示例 | 含义 |
|---|---|
attributes['avg_voltage'] > 235 | 平均电压超过 235 时执行动作 |
attributes['max_current'] > 50 && attributes['avg_voltage'] > 220 | 两个条件同时满足时执行 |
条件为必填,且采用保守(fail-closed)策略:只有当条件表达式明确求值为真时才执行动作。以下情况均不执行动作:
- 条件表达式留空;
- 表达式引用的属性取不到最新值;
- 表达式存在语法错误或求值结果非布尔值。
触发条件中的属性引用使用 attributes['属性名'] 语法,与通知标题 / 内容中的 {属性名} 占位符语法不同(见 13.4.3)。前者用于条件判断,后者用于文本插值。
7.8.3 通知配置
引用一个通知类型的动作模板后,规则会展开以下可编辑字段。这些字段以模板的预设值为初值,在此处的修改仅作用于当前分析,不会回写模板:
| 字段 | 说明 |
|---|---|
| 联系方式 | 发送通知所使用的联系方式,可在此重新选择。模板未指定联系方式时,默认选中列表中的第一个。 |
| 最小通知间隔(分钟) | 同一分析对同一联系方式连续两次发送通知的最小间隔,可在此调整。 |
| 通知标题 | 通知标题,可在此编辑。支持占位符,留空时使用默认标题。 |
| 通知内容 | 通知正文,可在此编辑。支持占位符。 |
通知标题与内容的占位符语法及默认文本,详见动作模板 - 通知内容的占位符。
7.8.4 快照与配置覆盖
保存分析时,系统会按所引用的模板 ID 读取模板,并将模板的名称、动作类型、描述、类别作为快照保存到动作规则中;这些基础信息以模板当前值为准回填,不信任表单提交值。各字段的局部调整(如重选联系方式、修改通知内容)作为配置覆盖随分析一同保存。
因此:
- 重新打开分析时,动作规则直接回显已保存的快照与配置覆盖,不依赖模板的当前状态——即使模板随后被修改,已保存分析的运行参数保持不变。
- 即使引用的模板之后被删除,分析仍能依据已保存的快照与配置覆盖回显并运行。
7.8.5 运行时执行
分析每次触发并产生输出后,系统按动作规则依次执行动作。对每条动作规则:
- 求值触发条件。 按 7.8.2 的规则评估条件,仅当结果为真时继续;否则跳过该规则。
- 节流判定。 对通知动作,以"分析 + 动作模板 + 联系方式"为键检查上次发送时间。距上次发送不足最小通知间隔时,跳过本次发送。
- 渲染并发送。 对通知标题和内容做占位符替换(填入元素名称、元素路径、分析名称及输出属性值),再通过所选联系方式对应的通道发送通知。
失败隔离。 每条动作独立执行,单条动作执行失败(如联系方式不存在、通道不支持)只记录日志,不影响同一分析的其他动作,也不影响分析本身的计算与输出写入。
7.8.6 向后兼容
| 场景 | 行为 |
|---|---|
| 旧分析没有动作配置 | 不执行任何动作,行为与之前一致。 |
| 触发条件求值不为真 | 跳过该动作(保守策略,见 7.8.2)。 |
| 引用的模板已被删除 | 依据已保存的快照与配置覆盖回显并运行。 |
| 某条动作执行异常 | 记录日志并跳过,不影响其余动作与分析主流程。 |



