发表于 2016-07-11 17:23
楼主
今天有位朋友提出一个需求,希望能够实现“某个时间段判断文件是否到达来触发流程,如果超过这个时间段就跳过该批次,运行下一个批次逻辑”。初步分析了一下,发现TASKCTL自带的filetwatch是一直等到文件到达后才能触发流程。这就无法满足“在某个时间段内文件到达触发流程”的需求。
其实,我们可以利用condition条件判断来实现该需求,流程模块代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | < serial > < name >MainModul_rootnode</ name > < begin > < name >MainModul_beginjob</ name > </ begin > <!-- 用户模块代码自定义区开始 --> < nulljob > < name >startctljob</ name > < jobdesc >启动触发控制节点</ jobdesc > < condition >if($(startdatetime)<systime('yyyymmddhhmiss')) CTL_DOIT else CTL_WAIT</ condition > </ nulljob > < sh > < name >checkfile</ name > < progname >$TASKCTLDIR/demo/shell/fileexist.sh</ progname > < para >$HOME/file/$(systime("yyyymmdd"))/fileexists.flg</ para > --这个是文件到达的标记文件 < maxnum >0</ maxnum > < condition >if((systime('hh')>='01') and (systime('hh')<'07')) CTL_DOIT else CTL_IGN</ condition > < jobdesc >每天1~7点判断如果存在文件,则调用实际业务,不存在则发送信息。测试时可改为systime('mi')分钟</ jobdesc > </ sh > < parallel > < name >MainModul_ParallelNode0</ name > < exe > < name >MainModul_FlowNode0</ name > < progname >sleep</ progname > < para >30</ para > < condition >if(getjresult("checkfile")==0) CTL_DOIT else CTL_IGN</ condition > < jobdesc >延时30秒模拟实际调用业务子流程</ jobdesc > </ exe > < selfmsg > < name >file_not_exists_msg</ name > < para >当天文件不存在,请人工干预</ para > < condition >if(getjresult("checkfile")==1) CTL_DOIT else CTL_IGN</ condition > < jobdesc >发送不存在文件的消息</ jobdesc > </ selfmsg > </ parallel > < modivarv > < name >passflow</ name > < para >varname=startdatetime,varvalue=$(addday('$(startdatetime)', 'yyyymmddhhmiss', 1))</ para > < jobdesc >翻牌:修改变量</ jobdesc > </ modivarv > <!-- 用户模块代码自定义区结束 --> < end > < name >MainModul_endjob</ name > </ end > </ serial > |
通过该示例,我们合理利用好condition条件判断,就能实现很多复杂的控制逻辑~
[最后编辑于 2016-07-11 17:24 ]
请登录后评论~