Activiti工作流入门篇

一 是什么

工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。

二 用来干嘛

工作流的用途非常广泛,生活中经常会碰到 流程的问题 ,比如:请假,这就是一个非常典型的实例,它需要很多的人员参与,按照特定的顺序,以及进行相对的处理。

三 怎么用

准备工作 先下载相对的插件 安装成功之后 输入act 即可看到,如果安装失败就自己百度去,这里就不在做过多的解释了
在这里插入图片描述
1)首先我们要加载表数据以及获取核心引擎对象

  1. 方法一 通过设置ProcessEngineConfiguration(流程引擎配置对象)直接在main方法里面运行
	ProcessEngineConfiguration process = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
	process.setJdbcDriver("com.mysql.jdbc.Driver");
	process.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8");
	process.setJdbcUsername("root");
	process.setJdbcPassword("root");
	process.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);//建表模式
	ProcessEngine processEngine = process.buildProcessEngine();
  1. 方法二 通过spring 的依赖注入获取 配置在spring文件里面
<!-- 定义流程引擎配置 -->
  <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
    <property name="dataSource" ref="dataSource" />
    <property name="transactionManager" ref="transactionManager" />
    <property name="databaseSchemaUpdate" value="true" />
    <property name="jobExecutorActivate" value="false" />
    <property name="databaseSchema" value="ACTIVITI" />
  </bean>
  <!-- 定义流程引擎 -->
  <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
    <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  </bean>

2)获取ProcessEngine(流程引擎对象)

ProcessEngine 是activiti的核心对象,可以通过调用它获取各个service 对象,每个对象又有不同的方法。
ProcessEngine 一共提供七个服务,简单的列出以下几个常用的服务

服务名字作用
RepositoryService管理流程定义
RuntimeService执行管理,包括启动、推进、删除流程实例等操作
TaskService任务管理
HistoryService历史管理(执行完的数据的管理)

3)绘制流程图
在你选择你的文件路径 new>Other>Activiti Diagram 然后输入流程图的名字 就可看到如下图
在这里插入图片描述

流程图都由开始节点(StartEvent),结束节点(EndEvent),线(SequenceFlow)用来连接各个组件。建立一个简单的 流程图
在这里插入图片描述

在这里插入图片描述
以上就是一个非常典型的请假流程,流程顺序为 :开始 > 员工请假 > 经理审批 > 结束

4)通过RepositoryService 部署流程

  • 方法一 根据流程图名 部署
Deployment deployment = processEngine.getRepositoryService().createDeployment().name("MyProcess")//设置名字
.addClasspathResource("MyProcess.bpmn")//这里填写流程图的名字
.deploy();
  • 方法二 以压缩文件的形式 部署
Deployment deployment=processEngine.getRepositoryService().createDeployment().name("VehicleApplication")
.addZipInputStream(zipInputStream)//这里是zip格式文件流 rar 等其他的 都不行
.deploy()

查看已经部署的定义流程

processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);

删除已经部署的定义流程

processEngine.getRepositoryService().deleteDeployment(deploymentId);

5)启动 已经部署的流程

常用的都是根据id或者key启动

ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("myProcess");
		System.out.println(pi.getId() + "====Id");
		System.out.println(pi.getName() + "====Name");
		System.out.println(pi.getActivityId() + "====ID");

动态的设置申请人 我这写的是jfd

Map<String, Object> map = new HashMap<>();
		map.put("user", "jfd");
		ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("myProcess", map);

6)任务(task)查询

String assignee = "王五";
		List<Task> list = processEngine.getTaskService()// 与正在执行的任务管理相关的Service
				.createTaskQuery()// 创建任务查询对象
				/** 查询条件(where部分) */
				.taskAssignee(assignee)// 指定个人任务查询,指定办理人
				// .taskCandidateUser(candidateUser)//组任务的办理人查询
				// .processDefinitionId(processDefinitionId)//使用流程定义ID查询
				// .processInstanceId(processInstanceId)//使用流程实例ID查询
				// .executionId(executionId)//使用执行对象ID查询
				.orderByTaskCreateTime().asc()// 使用创建时间的升序排列
				// .singleResult()//返回惟一结果集
				// .count()//返回结果集的数量
				// .listPage(firstResult, maxResults);//分页查询
				.list();// 返回列表
		if (list != null && list.size() > 0) {
			for (Task task : list) {
				System.out.println("任务ID:" + task.getId());
				System.out.println("任务名称:" + task.getName());
				System.out.println("任务的创建时间:" + task.getCreateTime());
				System.out.println("任务的办理人:" + task.getAssignee());
				System.out.println("流程实例ID:" + task.getProcessInstanceId());
				System.out.println("执行对象ID:" + task.getExecutionId());
				System.out.println("流程定义ID:" + task.getProcessDefinitionId());
				System.out.println("########################################################");				
			}

7)流程向下运行(任务的完成)
单节点 向下执行即可

processEngine.getTaskService().complete(task.getId());

当节点链接了多个节点时候 map 里面要含有分支条件

processEngine.getTaskService().complete(task.getId(),map);

在这里插入图片描述
这里的map 要包含msg的信息 而且在流程图里面也要有判断方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值