发表于 2016-07-11 17:23
楼主
今天有位朋友提出一个需求,希望能够实现“某个时间段判断文件是否到达来触发流程,如果超过这个时间段就跳过该批次,运行下一个批次逻辑”。初步分析了一下,发现TASKCTL自带的filetwatch是一直等到文件到达后才能触发流程。这就无法满足“在某个时间段内文件到达触发流程”的需求。
其实,我们可以利用condition条件判断来实现该需求,流程模块代码如下:
<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 ]
请登录后评论~