activiti学习由浅入深06 weir 2014-12-26 11:15:23.0 java,activiti 3232 下面我们就看看数据库的变化: 这是本次添加请假信息,数据库带来的变化,我们可以看到总共涉及到10个表 请假表一个,这个不用说,请假肯定是要添加请假信息的 Activiti 的历史表,即以act_hi开头的表5个 Activiti的运行时表,即act_ru开头的表4个 我们先去这里看看表结构: http://www.cnblogs.com/llzgzljl/p/3356108.html 我们先关心一下运行时的那几个表: act_ru_event_subscr throwEvent、catchEvent时间监听信息表 act_ru_execution 运行时流程执行实例表 act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息 act_ru_job 运行时定时任务数据表 act_ru_task 运行时任务节点表 act_ru_variable 运行时流程变量数据表 可以说这里的数据变化很复杂,同时添加的数据也非常多,这需要我们慢慢的消化一下, 如果我们去看源码,也不容易明白这发生的过程,那我们怎么去分析这个过程呢?上面我们已经知道发生了三个过程的变化,我们先放下历史记录重点分析一下运行时的变化。 首先我们先看看每一个添加的表(包括历史表)的ID_的值是否有什么规律,我们从ID的产生就可以知道表数据的产生先后顺序,而且运行时表和历史表的ID是有重复的,大家在这个地方留意一下,想想为什么会这样安排运行时表和历史表的ID重复?思考这个问题有助于我们分析历史表存在的意义和作用。 第二我们再看看表里面的数据和我们最开始绘制的请假流程图作对照,再和我们的请假表作对照,大家细心对照一下里面的数据把对照关系列出来你会发现,运行时的表数据就是我们的流程图里面的流程走势包括每一个节点每一个人每一个流程,这里我希望大家自己分析出来就是结合每个字段对照数据。 这里我也分析一下对于二次开发项目也包括像activiti和jbpm这样的免费的工作流以及提供源码的此类开源项目的理解:在我看来要对一个项目做二次开发,第一需要了解业务,第二需要下功夫的就是数据库表字段的含义的理解与分析,要形成自己的表关系结构图,表的关联关系图,在我看来这才是二次开发的最关键的所在,二次开发的关键在于对数据结构的调整来达到二次开发的目的,我所理解的二次开发的目的就是在原有基础上很难满足现在及未来的需求才去做二次开发的,必须调整数据结构及框架结构才能满足未来的发展。 好,我们再回到我们对数据库表的分析上来,假如你已经分析出来了各个数据的关联关系,下面你就会问接下来怎么办?那么说到这里我们就要说一下在工作流里面的一些名词和工作流的运作模式,大家也不放去网上搜一搜,比如像流程定义、待办、已办、流程实例,还有什么驳回等等,我列出来一些做个参考: 流程处理的事件: 1) 通过:当前流程处理人选择通过后,流程进入下一节点,处理人可以写审批意见,也可以直接通过。 2) 驳回:能够支持流程驳回操作,当前流程处理人可以将当前活动驳回到之前的任意节点,驳回时可以选择重新提交时是否直接回到驳回人节点,并保留原有流程的所有信息。 3) 取回:支持流程活动执行者可以取回下一节点未处理的待办,并全部还原流程的状态信息。 5) 废弃:支持管理员和流程起草人对未完成流程进行废弃操作。 7) 转办:将流程转给其他人处理。 8) 传阅:流程处理过程中,当前流程节点处理人可以把该流程发送给任意一人或多人查看。流程处理结束后,流程参与者可以把该流程发送给任意一人或多人查看。 9) 抄送:在流程模板设计时,可以设置自动把该流程发送给指定的一人或多人查看。 11) 并行:并行方式下,其中一个人审批通过,则本节点就通过。(竞争关系) 12) 会审:支持对待办任务进行会审,该节点的所有处理人必须全部审批通过,流程才会到下一节点。会审节点可以设置权重,当该节点的处理人达到一定比例通过时,流程会自动通过并到下一节点。 13) 沟通:当前节点处理人可以把待办沟通到任何一个或者多个用户,支持多级沟通和多次沟通。被沟通到的审批人可进行上传附件、修改审批内容、填写意见等操作;沟通多层时,必须最底层的人回复沟通意见,上一级才能继续处理。 这些都是作为工作流非常重要的知识点,可以说是工作流的核心价值,你理解这些东西自己实现一个工作流中间件不是问题。 之前我也说过工作流就是预先制定好的流程,处理工作流就是去处理这些流程,就像在流水线上工作一样,只有做与没做,要不要做,给谁去做。那么没做的我们就起个名字叫待办,已经做的我们叫已办,流程定义就是我们的流程图,流程实例就是我们需要处理的每个节点的具体的实例(这里我们可以得到具体的业务数据)。这样理解下来流程一旦启动就是要我们去处理待办,待办就是我们的一个个实例,也就是说在处理工作流时就是要把每一个待办处理好这样流程就可以一路执行下去,最后到完成结束。