`
eworkflow
  • 浏览: 220300 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

工作流系统之三十八 工作流软件中的定时器处理

阅读更多

工作流软件中的定时器处理,一般分为两种:

应用服务启动就启动的定时器

这种类型和通常的web系统中的定时器处理一样。应用服务器启动后,定时器就启动了,然后按照定制的时间段轮询处理。当应用服务器关闭的时候,这种定时器才会关闭。这种定时器通常是对所有需要定时处理的记录来做的,在工作流软件中,就对应到所有的业务流程,所有的流程实例。

这种类型的定时器,在报表软件,报表产品中经常有用到,比如 每天晚上定时生成按日汇总表,每个月未生成月结汇总表。在工作流软件系统中,可以利用这种定时器按计划启动业务流程的流程实例。按计划扫描执行那些过期需要自动处理的任务等等。


由流程的流转来启动定时器
当流程示例流转到某个节点时,启动这个节点的定时器,按定时器设置的时间间隔轮询执行处理。当流程流转流程实例离开这个节点了,这个定时器就关闭了。这种类型的定时器,和流程的特定节点关联,每个流程实例都会经历定时器的 启动->执行->关闭 这样整个过程。

 

在eworkflow工作流系统中 定时器有三种处理方式:
1. 应用服务器启动就启动的定时器。
2. 流程的节点中挂接的定时器。
3. 定制实现的定时器处理。

 

下面详解三种处理方式:
1. 应用服务器启动就启动的定时器。
  定时器的执行程序,轮询的间隔时间,以及相关参数设置都在fcconfig.xml文件中。
  当应用程序启动的时候,从fcconfig.xml中查找定时器的配置信息。根据配置信息启动定时器。
 
  一个典型的fcconfig.xml文件中的配置信息如下:
    <workflow-timer flowName="wf_series_timer" flowVersion="1" className="cn.com.fcsoft.workflow.timer.StartWorkflowJob">
  <cronExpression>0 0 1 * * ?</cronExpression>   
  <userId>USR_0000001</userId>
  <dsnName></dsnName>
  <triggerName>trigger:1</triggerName>
  <groupName>group:1</groupName>
  <jobName>job:1</jobName>
  <arg name="leave_days">3</arg>   
 </workflow-timer>
 
 <workflow-timer flowName="wf_series_timer" flowVersion="1" className="cn.com.fcsoft.workflow.timer.DoActionWorkflowJob">
  <cronExpression>0 0/1 * * * ?</cronExpression>   
  <userId>USR_0000001</userId>
  <dsnName></dsnName>
  <triggerName>trigger:2</triggerName>
  <groupName>group:2</groupName>
  <jobName>job:2</jobName>
  <arg name="leave_days">3</arg>   
 </workflow-timer> 

  一个<workflow-timer>节点为一个定时器的定义。
  属性 className 中设置的类为定时器启动后,按时间点执行的代码
  cn.com.fcsoft.workflow.timer.StartWorkflowJob   是定时启动指定流程实例的处理代码。
 
  <cronExpression>0 0 1 * * ?</cronExpression>  <!--表示每天晚上1点执行一次-->
  这个节点定义是轮询的时间间隔,节点值的设置,从左到右的意义如下:
 字段名    允许的值      允许的特殊字符
  秒     0-59  ,       - * /
  分     0-59  ,       - * /
  小时   0-23  ,       - * /
  日     1-31  ,       - * ? / L W C
  月     1-12 or JAN-DEC  , - * /
  周几   1-7 or SUN-SAT  , - * ? / L C #
 年 (可选字段)  empty  ,  1970-2099  , - * /
 
  一些典型的 cronExpression表达式的含义如下:
 "0 0 12 * * ?"  每天中午十二点触发
 "0 15 10 ? * *"  每天早上10:15触发
 "0 15 10 * * ?"  每天早上10:15触发
 "0 15 10 * * ? *"  每天早上10:15触发
 "0 15 10 * * ? 2005"  2005年的每天早上10:15触发
 "0 * 14 * * ?"  每天从下午2点开始到2点59分每分钟一次触发
 "0 0/5 14 * * ?"  每天从下午2点开始到2:55分结束每5分钟一次触发
 "0 0/5 14,18 * * ?"  每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
 "0 0-5 14 * * ?"  每天14:00至14:05每分钟一次触发
 "0 10,44 14 ? 3 WED"  三月的每周三的14:10和14:44触发
 "0 15 10 ? * MON-FRI"  每个周一、周二、周三、周四、周五的10:15触发
 "0 15 10 15 * ?"  每月15号的10:15触发
 "0 15 10 L * ?"  每月的最后一天的10:15触发
 "0 15 10 ? * 6L"  每月最后一个周五的10:15触发
 "0 15 10 ? * 6L"  每月最后一个周五的10:15触发
 "0 15 10 ? * 6L 2002-2005"  2002年至2005年的每月最后一个周五的10:15触发
 "0 15 10 ? * 6#3"  每月的第三个周五的10:15触发
 
 
 
  <userId>USR_0000001</userId> 为启动流程的用户userid,如果这个用户没有权限则流程实例不能启动。
 
  <dsnName></dsnName> 为初始化流程需要访问的数据库连接的连接名
  节点是fcconfig.xml中定义的数据库连接信息的dsn名称。即<ds name="daqin" dbType="sqlserver" ..... 节点中 name属性后面设置的名称。如果此节点值为空或没有设置此节点,则用fcconfig.xml中的第一个ds节点中设置的数据库连接信息。
 
 
   <triggerName>trigger:1</triggerName>
  <groupName>group:1</groupName>
  <jobName>job:1</jobName>
  这几个节点为定时器中的triggerName,groupName,jobName等。通常是每个每个定时器中的名称不一样。用于标识定时器启动后,需要执行的job。
  
  <arg name="leave_days">3</arg> 这种<arg name="xxxx">这种节点为传递业务数据的节点,有几个需要传递到流程中的业务数据,就设置几个<arg 的节点。在流程初始化的时候,会将这种节点的数据加载到流程的上下文中。
  
  
  
 2、流程的节点中挂接的定时器
 这种类型的定时器,是利用流程节点的前置函数挂接 "计划执行触发器的定时器类" 来启动的。
 当流程实例流转到这个节点时,执行前置函数,启动定时器。按设置的时间轮询,执行这个前置函数中定义的触发器。触发器类为定时执行的业务处理。
 当流程实例离开这个节点时,后置函数中,挂接"取消执行触发器的定时器", 关闭这个定时器。
 
 一个典型的应用,前置函数中的设置如下:
      <pre-functions>
        <function type="class">
          <arg name="local">true</arg>
          <arg name="groupName">test</arg>
          <arg name="triggerName">testTrigger</arg>
          <arg name="triggerId">10</arg>                   ------对应触发器的id号
          <arg name="class.chn">计划执行触发器的定时器类</arg>
          <arg name="passWord">test</arg>
          <arg name="schedulerStart">true</arg>
          <arg name="cronExpression">0,5,10,15 * * * * ?</arg>
          <arg name="class.name">cn.com.fcsoft.workflow.util.ScheduleJob</arg>
          <arg name="jobName">testJob</arg>
        </function>
      </pre-functions>
     
      <post-functions>
        <function type="class">
          <arg name="class.name">cn.com.fcsoft.workflow.util.UnscheduleJob</arg>
          <arg name="groupName">test</arg>                  <!--需要和前置函数中的groupName一样-->
          <arg name="triggerName">testTrigger</arg>         <!--关闭的定时器的triggerName,需要和前置函数中triggerName一样-->
          <arg name="class.chn">取消执行触发器的定时器</arg>
        </function>
      </post-functions>
  
  在eworkflow工作流软件中触发器类也是前置函数类,实现了FunctionProvider接口,能获得流程上下文中的信息。在触发器类中,做实际的业务处理。
  
  
 3、定制实现的定时器处理


 这种类型的定时器处理,是按应用系统的业务需要,定制实现。
 既不是在服务器启动的时候,启动定时器,也不是在流程的流转当中启动定时器。而是在应用系统的界面中,增加启动定时器,和关闭定时器的功能。
 
 例如 一个流程实例启动了,在显示运行轨迹的界面上,增加启动定时器的功能,定时执行此流程实例的动作,达到自动执行此流程的效果,当流程实例运行结束后,就关闭此定时器,避免资源的浪费。也可以由操作员点击关闭此定时器,达到灵活的控制。

 

 

 

1
4
分享到:
评论

相关推荐

    工作流小demo

    4. 回退和重试机制:在流程执行过程中,可能会遇到错误或异常,工作流系统需要有处理这些问题的策略,如回滚到上一步骤或重新执行某个任务。 5. 数据管理:工作流实例往往涉及数据交换,例如文章内容、审核意见等,...

    基于关系数据库的工作流系统设计与实现

    在“基于关系数据库的工作流系统设计与实现”这篇文章中,作者深入探讨了如何利用关系数据库来构建高效且可靠的工作流系统。 首先,文章可能涉及工作流模型的概念。工作流模型是描述业务流程的形式化表示,通常包括...

    TIA博途中编写的定时器Timer为什么不工作?.docx

    尽管较少见,但硬件故障或软件问题也可能影响定时器的正常工作。检查硬件是否正常,如输入/输出模块的状态,以及系统是否有最新的固件和驱动程序。 6. **诊断与调试**: 在TIA博途中,利用诊断缓冲区和状态监控...

    c#编写的工作流引擎

    工作流引擎是一种软件系统,它负责管理和自动化组织内的业务流程。在C#中编写工作流引擎,可以利用.NET Framework或.NET Core提供的丰富的类库和工具,实现高度灵活和可扩展的流程控制。本文将深入探讨C#实现工作流...

    js 工作流,审批流

    工作流(Workflow)是软件系统中管理业务流程的关键部分,特别是在审批流中,它涉及到组织内多个人员的协作和决策过程。JavaScript(js)作为客户端脚本语言,经常用于构建用户交互丰富的Web应用,包括实现工作流和...

    工作流例子

    在这个“工作流例子”中,我们很可能找到了一个关于如何设计和实施工作流系统的实例代码。这个例子可能适用于不同行业的企业,帮助它们优化业务流程,提高效率。 在描述中提到,“这是一个多种工作流开发的例子”,...

    E8.Net工作流源代码架构 6.3.9.rar

    在E8.Net中,工作流引擎会处理流程启动、流转、分支、合并、挂起、恢复等操作。 2. **工作流设计器**:提供图形化界面,允许用户或开发者设计和编辑工作流模型。在E8.Net 6.3.9中,可能包含自定义活动库,支持拖放...

    windchill工作流节点介绍

    在WindChill系统中,工作流(Workflow)是核心功能之一,它定义了不同角色和部门之间的业务流程,确保了产品开发过程的有序进行。本文将深入探讨WindChill工作流中的节点及其作用。 工作流节点是工作流实例执行过程...

    多媒体定时器

    硬件定时器利用系统中的专用硬件来计时,如PC的声卡或者显卡中的定时器,它们通常能提供比软件定时器更稳定的时钟源。软件定时器则是由操作系统或应用程序通过软件算法来实现的,虽然可能不如硬件定时器精确,但具有...

    工作流引擎对比

    本文旨在对比六种工作流引擎的基本信息,其中包括三种开源引擎与三种商业引擎,以帮助读者更好地了解各引擎的特点与适用场景。 #### 开源工作流引擎 ##### Shark - **基本信息**: - **开源状况**:开源 - **...

    EOS工作流引擎工作原理.pdf

    EOS工作流引擎是一种用于构建、执行和管理业务流程自动化的工作流管理软件。工作流引擎是工作流管理系统的核心组件,负责流程的调度、执行以及与其他系统的集成。从提供的文件内容中,我们可以提炼出以下关于EOS工作...

    工作流时间修改

    在工作流管理系统(Workflow Management System, WMS)中,时间控制是核心功能之一,它定义了任务之间的流转规则和等待时间。以下是一些关键知识点: 1. **工作流模型**:工作流通常由一系列相互关联的任务组成,每...

    widows 高精度多媒体定时器

    高精度定时器的工作原理基于硬件级别的中断,而非简单的软件循环,因此能够提供更稳定的定时效果。但是,需要注意的是,频繁地调用`timeBeginPeriod`会增加CPU负担,可能导致系统性能下降,所以应当谨慎使用,并在...

    k2工作流学习资料总结

    三、K2工作流设计: 1. **流程设计**:使用K2 Studio,通过拖拽活动(如开始、结束、决策、任务分配等)到画布上,定义流程逻辑。 2. **条件分支**:通过条件表达式实现流程分支,适应不同情况下的业务需求。 3. **...

    spring定时器 spring定时器

    Spring定时器,也被称为Spring Boot的定时任务,是Spring框架中的一个强大功能,它允许开发者在应用程序中安排周期性...通过合理配置和使用,我们可以轻松地将定时任务集成到Spring Boot应用中,实现自动化的工作流。

    利用三个定时器驱动三个步进电机的STM32程序

    标题中的“利用三个定时器驱动三个步进电机的STM32程序”指的是使用STM32微控制器通过三个独立的定时器来控制三个步进电机的运动。STM32是一款基于ARM Cortex-M内核的高性能微处理器,广泛应用于嵌入式系统,特别是...

    [原创]JWFDv0.96 工作流系统-引擎原子操作API简易说明

    4. **事件处理**:事件触发器API用于响应外部或内部事件,如定时器到期、用户交互或其他系统事件,这些事件可以改变工作流的状态。 5. **变量与数据管理**:工作流中常常需要存储和传递数据,API应提供读写变量的...

    java实现工作流

    通过对工作流、MVC模式、JSP技术等关键概念和技术的深入了解与应用,可以构建出功能强大、性能稳定的电信业务处理系统。未来还可以进一步探索云计算、大数据等新兴技术的应用,以持续提升系统的智能化水平和服务体验...

    Activiti工作流数据库表结构.pdf

    Activiti 是一个轻量级的工作流和业务流程管理系统(BPMN),它是基于Java语言开发并遵循Apache许可证的开源项目。Activiti提供了一套完整的工作流和BPM解决方案,用于业务流程的建模、部署、管理和自动化。其工作流...

Global site tag (gtag.js) - Google Analytics