1. 概述
1.1 应用场景
某公司的 FineReport/FineBI 工程每月都会通过 定时调度任务 给销售发送月报数据。月报发送前,需要使用 FDL 处理月报数据。
若分别设置 FDL 的定时任务和 FineReport/FineBI 工程的定时调度任务的执行频率,需要保证 FDL 的定时任务优先执行,用户觉得较为麻烦,希望使用 FDL 去管理 FineReport/FineBI 定时调度任务的运行。
1.2 实现思路
1)定时调度任务的执行频率设置为「只执行一次」(后续通过 FDL 触发执行)。
2)FineReport/FineBI 工程安装 开放平台插件 ,FDL 创建一个定时任务 A ,调用定时调度接口来触发定时调度任务的执行。其中,该定时任务 A 设置 事件调度 ,依赖 FDL 处理月报数据的定时任务 B 。
3)定时任务 B 根据实际情况设置执行频率,每次对月报数据处理后,调用定时任务 A 来触发定时调度任务的执行。
1.3 方案说明
本文需要调用执行定时调度任务的接口,除了登录的接口之外,FineReport/FineBI 所有的 WEB API 接口,都需要登录才能使用。详情请参见:Web页面集成接口
若登录认证方式为 fine_auth_token ,请参见本文第三章内容;否则,参考本文第二章内容。
本文展示 FDL 管理 FineReport 工程中的定时调度任务步骤,管理 FineBI 中的定时调度任务步骤与之相同。
2. 示例一:接口认证模式不是fine_auth_token
2.1 定时调度任务准备
创建一个 定时调度 任务,需注意,执行频率设置为「只执行一次」(后续通过 FDL 触发执行)。如下图所示:
本文示例中,定时调度任务名称为「文档测试」。
2.2 FineReport 工程准备
1)由于要调用定时调度任务执行接口,FineReport 工程中,需要安装「开放平台」插件。插件安装方法请参见:服务器插件管理
2)登录 FineReport 工程,点击「管理系统>开放平台>应用管理」,新建应用,名称为「文档测试」,认证方式选择「AkSk直接认证」。如下图所示:
3)点击新建应用右侧的「编辑」按钮,可查看应用的应用ID和密钥,后续步骤中将用到这两个参数的值。如下图所示:
4)点击「权限管理」,为新建应用开启「消息管理V3」、「定时调度管理V3」的权限。如下图所示:
2.3 处理月报数据定时任务准备
1)由于 FDL 中需要处理月报数据,本文示例中,在 FDL 中设置一个定时任务,模拟处理月报数据。如下图所示:
2)后续需要为该定时任务设置执行频率,由于「生产模式」下才支持配置调度计划,所以该定时任务需要发布到「生产模式」中。
2.4 FDL 中调用运行定时调度任务接口
1)FDL 中创建一个定时任务,拖入「数据转换」节点,进入「数据转换」节点,拖入「API输入」算子。
2)「API输入」算子中,设置界面如下图所示:
API 接口:本文示例:http://localhost:8075/webroot/decision/sp/client/api/v3/schedule/execute;http://localhost:8075/webroot/decision为 FineReport 工程地址,用户根据实际情况修改。
Headers 中,需要添加 client_id、secret 参数,分别为本文 2.2 节所创建应用的应用ID和密钥。
Body 中内容格式为:task 为本文 2.1 节定时调度任务的名称。
[
{
"task": "定时调度的名称"
}
]
3)点击「数据预览」,status 值为 200,代表接口调用成功。如下图所示:
4)拖入「参数输出」算子,输出一个参数。本步骤无实际意义,只是为了「数据转换」节点不报错。
5)将定时任务发布到「生产模式」中,设置 事件调度 ,依赖任务为本文 2.3 节的任务,代表本文 2.3 节处理月报数据的定时任务执行成功后,再执行本节任务,拉起 FineReport 工程中的定时调度任务的执行。
2.5 效果查看
运行本文 2.3 节设置的定时任务,可看到 FineReport 工程中的定时调度任务也被拉起执行。如下图所示:
2.6 后续步骤
可为本文 2.3 节中处理月报数据的定时任务 设置执行频率
3. 示例二:接口认证模式为fine_auth_token
3.1 定时调度任务准备
参考本文 2.1 节内容,准备一个定时调度任务。
3.2 FineReport 工程准备
与本文 2.2 节不同的是:
1)FineReport 需要再额外安装「开放平台-平台登录认证接口」插件。插件安装方法请参见:服务器插件管理
2)为新建应用开放「定时调度管理V3」的权限即可。如下图所示:
3.3 处理月报数据定时任务准备
参考本文 2.3 节内容。
3.4 FDL 中调用运行定时调度任务接口
3.4.1 获取fine_auth_token
1)FDL 中创建一个定时任务,拖入「数据转换」节点,进入「数据转换」节点,拖入「API输入」算子。
2)「API输入」算子中,调用 前台单点登录接口 ,获取 fine_auth_token 。如下图所示:
各设置项说明如下:
接口地址:http://localhost:8075/webroot/decision/login/cross/domain;其中,http://localhost:8075/webroot/decision为 FineReport 工程地址,用户根据实际情况修改。
Paramas 下添加参数:
参数 | 是否必须 | 备注 |
---|---|---|
fine_username | 是 | FineReport 工程的用户名 |
fine_password | 是 | FineReport 工程的密码 |
validity | 是 | 值为-2: 表示保持登录,保持登录就是 14 天的时间 值为-1: 非保持登录,时长跟随:管理系统>系统管理>登录>登录超时时间 注:单点登录时保持登录,将参数 validity 的值改为 -2 |
callback | 否 | 为空即可 |
点击「数据预览」,如下图所示:
上图中的 accessToken 就是我们需要的 fine_auth_token。
3)返回的请求数据,是非标准的 json 数据,无法解析出 accessToken ,需要用「Spark SQL」算子,把返回的值设置成标准的 json 格式。如下图所示:
注:SQL 语句中的「API输入」为点击生成。
select replace(replace(responseBody,"callback(",""),")","") as a from API输入
4)拖入「JSON 解析」算子,解析出 accessToken 。如下图所示:
点击「数据预览」,可看到 accessToken 被解析出来。如下图所示:
5)拖入「参数输出」算子,将 accessToken 输出为参数。如下图所示:
3.4.2 调用运行定时调度任务接口
1)再拖入一个「数据转换」节点,用连线与上一个「数据转换」节点连接起来。
2)进入「数据转换」节点,拖入「API输入」算子,设置界面如下图所示:
API接口:本文示例:http://localhost:8075/webroot/decision/sp/client/api/v3/schedule/execute;http://localhost:8075/webroot/decision为 FineReport 工程地址,用户根据实际情况修改。
Authorization 中,认证类型选择 Bearer Token,值为 3.4.1 节中的参数,本文示例中此处填写:${token}
Headers 中,需要添加 client_id、secret 参数,分别为本文 3.2 节所创建应用的应用ID和密钥。
Body 中内容格式为:task 为本文 3.1 节定时调度任务的名称。
[
{
"task": "定时调度的名称"
}
]
3)点击「数据预览」,status 值为 200,代表接口调用成功。如下图所示:
4)拖入「参数输出」算子,输出一个参数。本步骤无实际意义,只是为了「数据转换」节点不报错。
5)将定时任务发布到「生产模式」中,设置 事件调度 ,依赖任务为本文 3.3 节的任务,代表本文 3.3 节处理月报数据的定时任务执行成功后,再执行本节任务,拉起 FineReport 工程中的定时调度任务的执行。
3.5 后续步骤
1)效果查看请参见本文 2.5 节内容。
2)可为本文 3.3 节中处理月报数据的定时任务 设置执行频率