工作流

 
近期公司需要做后台系统升级改造,其中有包括工作流程改造,这部分不是我做,我只是偶尔参与到他们改造方案的讨论,打打酱油,因为之前有做过流程管理,所以今天通过随笔的方式介绍一下简单工作流的实现。
 
什么是工作流?工作流管理联盟(WfMC)的定义是,工作流是一类能够完全或者部分自动执行的经营过程,它根据一系列过程规则、文档、信息或任务能够在不同的执行者之间进行传递与执行。定义里面有几个关键词,自动化?我的理解就是文档、信息或者任务在不同执行者之间自动流转。过程规则就是相对固定的一些步骤。不同,表示还能支持灵活的变化,编排,以上就是我对工作流的一些理解。
 
工作流模型结构,是由WfMC管理联盟定义的参考模型,为啥叫参考模型?也就是说我们在实现工作流管理引擎可以不用完全基于这个模型去实现,模型主要包括一下几部分,流程定义、监控、工作流引擎等部分,一图胜千言,直接看图吧:
 

 

 

 
如图,工作流模型结构由引擎和五个接口能力组成,不是就只有五个接口哈,同时引擎提供了处理以上五种接口的能力,以上五种接口,接口四我也不知道干嘛的,官方给出的解释是大型分布式的工作流管理系统中,工作流需要多个工作流引擎共同完成,说实话我没做过这么大的,不了解。以上工作流的概念介绍就到这吧,因为我了解的也不多,这东西概念比较多,比较抽象复杂,下面简单介绍下我之前做的一个简单的工作流程管理,方便理解可能会说流程引擎,不要误会,我这个还谈不上引擎。
 
接口一流程定义,流程定义由一系列的活动节点组成,这些活动节点以图形的形式展现并被连接起来,通俗来说就是流程设计器。我这边实现的比较简单,通过配置XML文件实现,市面上的标准实现是图形化设计器,通过拖拽的方式定义流程,当然最终还是会生成某种格式的描述语言供引擎解析,当然你够牛逼也可以解析图。
 
<?xml version="1.0" encoding="utf-8"?>
<WorkFlows>
   <WorkFlow ...>
    <Node ...>
      <Form "">
        <Content ...>
          <Header>
            ... 表单头部
          </Header>
          <Center>
            ... 体部
          </Center>
          <Foot>
           ... 
          </Foot>
        </Content>
       <FileOptions>
          <Files>
            ... 附件
          </Files>
        </FileOptions>
      </Form>
     <Events>
        <Event>
          ... 发送邮件等
        </Event>
      </Events>
    </Node>
  </WorkFlow>
</WorkFlows>
 
如上就是XML流程定义文件,我删减了很多内容,整体格式还是比较复杂的。整个流程定义格式大致分这么几个部分,流程定义集合,流程,节点活动集合。节点又包括表单,附件,事件处理器,组织结构,当然这里面还有很多细节的东西,比如权限,条件表达式,流程变量等等。流程定义完之后,再由我们的流程引擎解析出来,有了流程这个模板,我们就可以通过引擎来给我们创建流程实例。
 
接口二客户端应用(这个跟接口3的职责边界好像有些模糊,不管了,实现功能就行),官方的定义是工作流管理系统为每一个用户维护一个工作项列表,它表示当前需要该用户处理的所有任务。有了流程实例,接下来就是跑流程,这部分我们展开,就会涉及到很多内容,如任务列表,代办、已办、申请、查询、会签、并行、子流程嵌套、流转、条件、驳回、退回上一步、退回发起人、终止等等。这部分内容比较多,我挑几个简单介绍下我这边的实现吧。
 
任务列表,这个比较好理解,就是获取流程任务表里面的数据,看图。
 

 

 

流转,表示流程节点的流转,如请假申请,当我提交了申请,主管是怎么拿到这个代办任务的?还是通过流程定义xml配置的,在申请提交完,引擎会从流程定义里面解析出它的下一个节点,然后写入任务,这里会有个细节,就是条件表达式,有些人可能会称其为条件节点,满足某些条件流转到节点a,不满足流转到b等。如请假大于2天由经理审批,比如这种在我的流程管理里面就是通过条件表达式处理的。
 
会签,多人审批,同时要满足全部通过,才能流转到一下个节点,这个没有啥特别的,引擎会去判断所有人都是否审批,表单也没有什么特别的,只是在流程图上面有些不同而已。
 
表单,我这边通过模板页实现,类似母版,一般情况下一个流程对应一个大的表单,不同的节点,追加或者修改不同的html表单内容,在流程设计阶段就设计好了,表单数据的存储,我这边是基于key-value的方式,关联到流程实例。
 
接口五-管理监控,我这边实现的比较简单,基于可视化界面,查看流程流转情况以及一些状态。还有一种更直接的方式,流程图,我这里就不截图了,简单说下实现吧,流程图其实就是一个html页面,在流程定义的时候就以及设计好了,流程图的展示效果主要是通过js实现,可以简单看个图
 

 

 

好吧,大概就介绍这么多吧,工作流开源的产品应该有不少,自己写没多大含义,重复造轮子,主要这东西还很废精力,写这个随笔主要是给需要学习工作流的朋友一个参考吧。
posted @ 2022-03-10 12:26  小菜 。  阅读(228)  评论(0编辑  收藏  举报