1. 概述
1.1 应用场景
FR 通过任务名/任务ID运行定时任务的接口中,可设置延迟参数,在等待设置的 X 秒后可以返回任务运行状态。如下图所示:
但某些定时任务运行时间较长且不稳定,当 FDL 执行到接口设置的时间但任务还未结束时,FR 会接收到 RUNNING 的返回信息。用户无法确定后续定时任务是否运行成功。
1.2 实现思路
通过调用任务接口返回的实例 ID ,再结合根据实例 ID 查询任务状态的功能,使用 JS 定时器去轮询任务状态,当确认任务完成后再刷新 FR 的查看页面。最终效果如下图所示:
1.3 任务展示
请参见 https://demo.fanruan.com/ 「FR调用定时任务后轮询是否完成」。
2. 示例
注1:本文示例 FDL 为独立部署,使用 基于任务名运行任务 接口,运行定时任务。
注2:本文适用于 基于任务名运行任务、基于任务ID运行任务 接口。
2.1 准备工作
请参见 FR模板调用定时任务接口示例 文档中的 2.1、2.2、2.3、2.5节内容。
2.2 FR 模板调用接口
FR 中打开 GettingStarted.cpt 模板,在参数面板中添加「点击按钮」,为「点击按钮」添加「点击事件」。如下图所示:
JS 代码:
注:用户根据实际情况修改 workName(定时任务名称)值。
FR.ExecuteWorkByWorkName({
"workName": "第一个定时开发任务", //【必填】任务名称
"params": {}, //【非必填】执行参数
"waitForResponse": "true", //【非必填】等待任务运行完成再返回内容
"waitTime": 10
},
function(error, response) {
if (error) {
console.error("请求失败:" + error);
} else {
console.log("请求成功,响应数据:" + JSON.stringify(response));
let recordid = JSON.parse(response).data.recordId; //获取recordid
if(recordid)
{FR.Msg.toast("开始运行任务");
var interval = setInterval(function() {
FR.GetRecordInfoByRecordId(
recordid,
function(error1, response1) {
if (error1) {
console.error("请求失败:" + error1);
} else {
let status = JSON.parse(response1).data.status
FR.Msg.toast("当前状态" + JSON.parse(response1).data.status)
if (status == 'SUCCESS') {
FR.Msg.toast("etl任务运行成功")
clearInterval(interval)
}
}
}
);
}, 3000)}
}
}
)
2.3 效果查看
预览模板,点击按钮。如下图所示:
在 FDL 工程中,点击「任务运维>运行记录」,可看到被调用任务的最新运行记录。如下图所示: