1. 概述
1.1 版本
| FineDataLink 版本 | 功能变动 | 
|---|---|
| 4.0.3 | 1)在定时任务编辑界面中,右键点击节点连线,提供「无条件执行」、「成功时执行」、「报错时执行」的节点连线配置 2)在定时任务编辑界面中,右键点击节点,新增「执行判断」按钮,支持自定义多执行条件的生效方式(全部逻辑与、全部逻辑或),灵活控制任务中节点的依赖关系 | 
1.2 应用场景
用户希望定时任务执行失败后,可以自定义错误处理流程。比如定时任务执行失败后,在企业微信群中通知。
1.3 功能简介
如下图所示:

2. 功能介绍
将连线的始端称为上游节点,连线的末端称为下游节点。
2.1 节点连线配置介绍
在定时任务编辑界面中,右键点击节点连线,提供「无条件执行」、「成功时执行」、「报错时执行」的节点连线配置。如下图所示:

具体说明如下表所示:
注:默认成功时执行。
| 选择项 | 说明 | 
|---|---|
| 无条件执行 | 不论上游节点执行是否成功,都执行下游节点 | 
| 成功时执行 | 上游节点执行成功时,执行下游节点 | 
| 报错时执行 | 上游节点执行失败时,执行下游节点 | 
2.2 「执行判断」按钮介绍
在定时任务编辑界面中,右键点击节点,新增「执行判断」按钮,支持自定义多执行条件的生效方式(全部逻辑与、全部逻辑或),灵活控制任务中节点的依赖关系。如下所示:

下游节点被多个上游节点连接时,点击「执行判断」按钮,下拉框可选择「所有」和「任一」,分别对应两个生效逻辑,「全部逻辑与」和「全部逻辑或」。
- 全部逻辑与:下游节点在所有上游节点执行结果均满足连线执行条件时触发执行。 
- 全部逻辑或:下游节点在任一上游节点执行结果满足连线执行条件时触发执行(在下游节点处集中配置)。 
2.3 总体执行策略
1)下游节点被一个上游节点连接时,该上游节点执行结果满足其连线执行条件,则触发下游节点执行。
2)下游节点被多个上游节点连接时,在所有上游节点执行完成后触发判断,按照选择的生效逻辑执行:
- 全部逻辑与:下游节点在所有上游节点执行结果均满足连线执行条件时触发执行。 
- 全部逻辑或:下游节点在任一上游节点执行结果满足连线执行条件时触发执行(在下游节点处集中配置)。 
3)「条件分支」节点只允许选择「成功时执行」,没有「失败时执行」和「无条件执行」:
- 连线条件为「成功时执行」且符合条件分支配置条件,则触发执行对应下游节点 
- 连线条件为「成功时执行」但不符合条件分支配置条件,则跳过执行下游节点 
4)虚拟节点默认为「成功时执行」,没有「失败时执行」和「无条件执行」,虚拟节点如果执行,必然执行成功。
2.4 场景示例
2.4.1 一对多场景说明
定时任务设计如下图所示:

ABCD构成了一对多场景,其执行策略如下:
注:A 不是条件分支节点。
| A 节点执行结果 | B(与A连线为成功时执行) | C(与A连线为失败时执行) | D(与A连线为无条件执行) | 
|---|---|---|---|
| 执行失败 | 不触发执行 | 触发执行 | 触发执行 | 
| 执行成功 | 触发执行 | 不触发执行 | 触发执行 | 
| 终止执行 如:执行至 A 节点时,任务手动停止 | 不触发执行 | 不触发执行 | 不触发执行 | 
| 跳过执行。如: 1)A 上游不是条件分支节点,且执行结果不满足连线执行条件 2)A 上游是条件分支节点,且判断后不走 A分支 | 不触发执行 | 不触发执行 | 不触发执行 | 
2.4.2 多对一场景说明
ETL 任务设计如下图所示:

ABCD构成了多对一场景,其执行策略如下:
注1:A\B\C均不是条件分支节点;在所有上游节点执行完成后触发判断。
注2:不论 D 节点左侧有几个节点,及这些节点的连线执行判断条件是什么,每次任务运行时,D 节点只会执行一次。
| 执行条件生效方式 | A/B/C实际执行结果 | D | 
|---|---|---|
| 全部逻辑与 | A\B\C执行结果均满足各自连线执行条件 | 触发执行 | 
| A\B\C执行结果任一不满足其连线执行条件 注:若A\B\C某一节点被跳过执行,则该节点不参与判断 | 不触发执行 | |
| 全部逻辑或 | A\B\C执行结果任一满足其连线执行条件 | 触发执行 | 
| A\B\C执行结果均不满足各自连线执行条件 | 不触发执行 | 
若场景如下图所示:A、B、C 中至少有一个节点及其下游节点执行成功,H 节点都执行。

若希望 D、E、F节点全部执行成功再执行 H 节点:
方案一:可在 H 节点前添加「条件分支」节点,通过参数 ${jobname.opresult} (节点执行成功值为 success)的值判断是否执行 H 节点。
方案二:H节点参考本文 2.2 节内容,执行判断处设置为全部逻辑与。如下图所示:

2.4.3 多对多场景
A-C 的配置为成功时执行,A-D 的配置为失败时执行,B-C 的配置为成功时执行,B-D 的配置为失败时执行,「多执行条件生效方式」配置为「全部逻辑与」。如下图所示:

执行策略:A 执行成功且 B 执行成功时,C 执行,D 不执行;A 执行失败且 B 执行失败时,D 执行,C 不执行;A 执行成功且 B 执行失败时,C 和 D 都不执行。
2.5 兼容说明
升级后,对于所有节点连线,都统一将连线的执行条件设为成功时执行,「多执行条件生效方式」配置为「全部逻辑与」。
3. 示例
示例:如果上游节点运行成功,则执行下一个节点,如果失败,则发送消息通知。
3.1 前期准备
1) 新建定时任务,拖入「数据同步」节点,命名为「销量表抽取数据」,设置「数据来源」将销量表中所有华东地区的数据取出。然后设置「数据去向与映射」,此处直接新建一个表来保存这些数据,目标表选择「自动建表」,表名称填写「sale」,如下图所示:

2)新增「SQL脚本」节点,与「数据同步」节点相连,命名为「salesum建表」,数据源选择「MySQL」,数据连接选择「fdl_demo」,并在下方填写建表「salesum」的语句,如下图所示:
CREATE TABLE IF NOT EXISTS `demotest`.`salesum` (
`地区` varchar(255) NULL DEFAULT NULL,
`销售员` varchar(255) NULL DEFAULT NULL,
`销量` float NULL DEFAULT NULL 
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

3)新增「SQL脚本」节点,与「salesum建表」节点相连,命名为「数据筛选处理」,数据源类型选择「MySQL」,数据连接选择「fdl_demo」,填写 SQL 语句将「sale」中销量大于 600 的数据插入到「salesum」中去。如下图所示:
insert into `demotest`.`salesum`(地区,销售员,销量)
	select 地区,销售员,销量 
    from `demotest`.`sale` 
    where 销量>600

3.2 新增消息通知节点
1)新增「消息通知」节点,与「salesum建表」节点连接起来。
2)右键点击「消息通知」节点和「salesum建表」节点之间的连线,选择「失败时执行」。如下图所示:

3)「消息通知」节点设置如下图所示:

3.3 运行任务
3.3.1 salesum建表节点执行成功
点击左上角的「运行」。如下图所示:
此时「salesum建表」节点执行成功,「消息通知」节点被跳过执行。

MySQL 数据库中生成了两个表:
sale:

salesum:

3.3.2 salesum建表节点执行失败
1)修改「salesum建表」节点的 SQL 语句,将 SQL 语句改为无法执行的 SQL 。如下图所示:

2)点击左上角的「运行」。如下图所示:
此时「salesum建表」节点执行失败,「消息通知」节点执行成功。

企业微信群中,消息通知给设置的群成员。如下图所示:


 
  
  	 
         
         上一篇:备注
上一篇:备注 
  
             
		         
					 
					 
						 
					 
					