工作流 activiti

一、什么是工作流

我们先看下维基百科的定义:

BPM, Business Process Management, workflow,是由一种协调的、可重复的活动模式组成,通过将资源系统化地组织为转换材料、提供服务或过程信息的过程来实现。它可以描述为一系列操作、个人或团队的工作、员工组织的工作,或一个或多个简单或复杂的机制。

感觉比较抽象,再具体点就是是对企业的审批业务流程的一个抽象,比如常见的 OA 中的审批业务:任务审批、请假审批等等,核心主体有操作或者任务以及对应的责任人或团体。

二、Activiti

提供了工作流的实现,类似于一个完整的项目,会自动创建表, 并以 listener 对外暴露事件接口,xxxService 提供 API。

核心类图:

  •  RepositoryService : 流程定义, 一个流程的定义对应多个运行中流程实例
  • RuntimeService: 获取流程运行中信息,以及流程等待外部触发,启动一个流程实例
  • TaskService: 获取分配给真实人的任务,创建任务,分配任务给具体的人
  • IdentityService:对用户和组的CRUD
  • FormService : 可选, 提供开始流程前的开始表单,以及完成任务的任务表单
  • HistoryService: 暴露所有流程运行时产生的历史数据
  • ManagementService :获取所有的表信息和元数据

Activiti 流程定义

一个流程的定义有固定的要素:

startEvent->UserTask1 -> UserTask2-> ... -> endEvent

比如企业财报:财务做财报,财务主管审批后,交给股东查看。

流程图如下:

 具体流程步骤:

  1. 开始:定义流程的入口

  2. 依次定义用户任务:第一个任务分配给财务部,第二个任务分配给管理部

  3. 结束。

 以上所有的元素需要通过 sequence flow (source 指定源,target 指定目的,确定方向)相互连接起来。

<definitions id="definitions"
  targetNamespace="http://activiti.org/bpmn20"
  xmlns:activiti="http://activiti.org/bpmn"
  xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL">

	<process id="financialReport" name="Monthly financial report reminder process">

	  <startEvent id="theStart" />

	  <sequenceFlow id='flow1' sourceRef='theStart' targetRef='writeReportTask' />

	  <userTask id="writeReportTask" name="Write monthly financial report" >
	    <documentation>
	      Write monthly financial report for publication to shareholders.
	    </documentation>
	    <potentialOwner>
	      <resourceAssignmentExpression>
	        <formalExpression>accountancy</formalExpression>
	      </resourceAssignmentExpression>
	    </potentialOwner>
	  </userTask>

	  <sequenceFlow id='flow2' sourceRef='writeReportTask' targetRef='verifyReportTask' />

	  <userTask id="verifyReportTask" name="Verify monthly financial report" >
	    <documentation>
	      Verify monthly financial report composed by the accountancy department.
	      This financial report is going to be sent to all the company shareholders.
	    </documentation>
	    <potentialOwner>
	      <resourceAssignmentExpression>
	        <formalExpression>management</formalExpression>
	      </resourceAssignmentExpression>
	    </potentialOwner>
	  </userTask>

	  <sequenceFlow id='flow3' sourceRef='verifyReportTask' targetRef='theEnd' />

	  <endEvent id="theEnd" />

	</process>

</definitions>



三、Activiti 使用步骤

1. 定义流程
2. 部署流程: 存储流程定义文件、加载到内存方便api操作
3. 启动一个流程实例:流程启动后会进入startEvent,自动进入UserTask 并等待,同时状态会记录到数据库,如果 activiti 重启或奔溃数据不会丢失

Deployment deployment = repositoryService.createDeployment()
                                          .addClasspathResource("FinancialReportProcess.bpmn20.xml")
                                          .deploy();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("financialReport");

显示开发过程中,整体的流程如下:

四、总结

1. 流程需要先定义后使用;

2. 流程启动后,会创建一个流程实例,并且进入第一个用户任务;

3. 任务完成后(调用完成命令)会自动删除;


如果觉得还不错的话,关注、分享、在看(关注不失联~), 原创不易,且看且珍惜~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【非典型Coder】

赏个鸡腿吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值