Activiti入门

Activiti从入门到入土

1. 什么是activiti?

工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在“多个参与者”之间按照某种“预定义的规则”传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现。 通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的形式就是工作流。

2.工作流管理系统(工作流框架)

工作流管理联盟(WfMC,Workflow Management Coalition)给出的关于工作流管理系统的定义是:工作流管理系统是一个软件系统,它通过执行经过计算的流程定义去支持一批专门设定的业务流程的执行。工作流管理系统被用来定义、管理、和执行工作流程。
工作流核心:
1、定义工作流:包括具体的活动、规则等。抽取请假和报销等流程
2、执行工作流:按照流程定义的规则执行,并由多个参与者进行控制。
工作流管理系统的目标:管理工作的流程以确保工作在正确的时间被期望的人员所执行——在自动化进行的业务过程中插入人工的执行和干预。

采用工作流管理系统的优点
1、提高系统的柔性,适应业务流程的变化
2、实现更好的业务过程控制,提高顾客服务质量
3、降低系统开发和维护成本

工作流框架有:Activiti、JBPM、OSWorkflow、ActiveBPEL、YAWL等。

3.环境准备

3.1 先安装eclipse插件
activiti拖拽插件,反编译插件(看源码)
3.2 导包(activiti-所需要的环境jar包)

4.代码获取ProcessEngine核心对象

4.1 硬编码方式

ProcessEngineConfiguration engineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
		
// 数据库连接信息
engineConfiguration.setJdbcUrl("jdbc:mysql:///activiti?createDatabaseIfNotExist=true");
engineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
engineConfiguration.setJdbcUsername("root");
engineConfiguration.setJdbcPassword("123456789");
engineConfiguration.setDatabaseSchemaUpdate("true");	// 自动创建表
		
// 服务核心对象 (一旦核心对象 它就会创建表结构)
ProcessEngine processEngine = engineConfiguration.buildProcessEngine();

4.2 config 配置文件

获得ProcessEngine最简单的办法是 使用org.activiti.engine.ProcessEngines类:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

它会在classpath下搜索activiti.cfg.xml, 并基于这个文件中的配置构建引擎。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

    <property name="jdbcUrl" value="jdbc:mysql:///activiti?createDatabaseIfNotExist=true" />
    <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
    <property name="jdbcUsername" value="root" />
    <property name="jdbcPassword" value="123456789" />
	<!-- 自动建表 -->
    <property name="databaseSchemaUpdate" value="true" />
  </bean>
</beans>

若配置文件未使用默认名称(activiti.cfg.xml),也可以通过

ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.xml");

获得ProcessEngine对象。

5 代码操作流程

5.1 发布流程

// 获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

// 获取仓库服务对象
RepositoryService repositoryService = processEngine.getRepositoryService();

// 获取流程发布对象
DeploymentBuilder deployment = repositoryService.createDeployment();
// 上传资源
deployment.addClasspathResource("leave.bpmn");
deployment.addClasspathResource("leave.png");
deployment.name("leave");

// 发布流程
Deployment deploy = deployment.deploy();

5.2 删除流程
物理删除

// 获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

// 获取仓库服务对象
RepositoryService repositoryService = processEngine.getRepositoryService();

String deploymentId = "1";
// 物理删除(从数据库中删除)
repositoryService.deleteDeployment(deploymentId );

逻辑删除

// 获取核心对象(服务大管家)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

// 获取仓库服务对象
RepositoryService repositoryService = processEngine.getRepositoryService();

/*
//  逻辑删除(挂起与激活) 方式一
String processDefinitionId = "myProcess:1:2504";  	// 传入procdef表的id值
// 挂起
repositoryService.suspendProcessDefinitionById(processDefinitionId);
// 激活
repositoryService.activateProcessDefinitionById(processDefinitionId);
*/

//  逻辑删除(挂起与激活) 方式二
String processDefinitionKey = "myProcess";		// 传入procdef表的key值
// 挂起
repositoryService.suspendProcessDefinitionByKey(processDefinitionKey );
// 激活
repositoryService.activateProcessDefinitionByKey(processDefinitionKey);

5.3 查询已部署流程

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();

// 创建查询对象
DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();

// 设置查询条件
//deploymentQuery.deploymentId("1");
//deploymentQuery.deploymentName("leave");
//deploymentQuery.deploymentNameLike("%lea%");

// 获取查询结果
// 获取单个查询结果
//Deployment deployment = deploymentQuery.singleResult();
// 获取多条查询结果
List<Deployment> list = deploymentQuery.list();
// 获取多条分页后的查询结果
// List<Deployment> list = deploymentQuery.listPage(0, 10);

5.4 查询定义的流程信息

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();

// 创建查询对象
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();

// 设置查询条件
// 通过id查一条 
//processDefinitionQuery.processDefinitionId("myProcess:1:4");
// 通过id查多条
// Set<String> processDefinitionIds = new HashSet<>();
// processDefinitionIds.add("myProcess:1:4");
// processDefinitionQuery.processDefinitionIds(processDefinitionIds);
// 通过key查询
//processDefinitionQuery.processDefinitionKey("myProcess");
// 通过key模糊查询
//processDefinitionQuery.processDefinitionKeyLike("%my%");
// 通过name查询
//processDefinitionQuery.processDefinitionName("My process");
// 通过name模糊查询
//processDefinitionQuery.processDefinitionNameLike("%pro%");
// 通过ResourceName查询
//processDefinitionQuery.processDefinitionResourceName("leave.bpmn");
// 通过ResourceName模糊查询
processDefinitionQuery.processDefinitionResourceNameLike("%leave%");

// 获取查询结果
// 获取单个查询结果
// ProcessDefinition definition = processDefinitionQuery.singleResult();
// 获取多条查询结果
List<ProcessDefinition> list = processDefinitionQuery.list();
// 获取多条分页后的查询结果
// List<ProcessDefinition> list = processDefinitionQuery.listPage(0, 10);

5.5 启动流程

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取运行时服务
RuntimeService runtimeService = processEngine.getRuntimeService();

String processDefinitionId = "myProcess:2:2504";
// 通过ProcessInstanceId启动流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId);
// 通过ProcessInstanceKey启动
//ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey("myProcess");

5.6 获取任务列表

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 获取任务服务
TaskService taskService = processEngine.getTaskService();
// 获取任务查询对象
TaskQuery taskQuery = taskService.createTaskQuery();

// 设置查询条件
//taskQuery.taskId("5004");
//taskQuery.task...

// 获取查询结果
// 获取单个查询结果
//Task task = taskQuery.singleResult();
// 获取多条查询结果
//List<Task> list = taskQuery.list();
// 获取多条分页后的查询结果
List<Task> list = taskQuery.listPage(0, 10);

5.7 办理任务

// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();

String taskId = "5002";
taskService.complete(taskId );	//此方法可直接办理任务

实际业务中可能会发布公共的任务,此时需要认领任务

ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();
// 完成任务
String taskId = "2504";
String userId="xx";
// 认领并办理共有任务
taskService.claim(taskId, userId);

6. 其它服务对象的功能

RepositoryService管理流程规则相关。流程定义
RuntimeService执行管理,包括启动、推进、删除流程实例等操作
TaskService任务管理,比如任务的查看、办理等
HistoryService历史管理(执行完的数据的管理)
IdentityServiceActiviti的组织机构管理
FormService一个可选服务,任务表单管理
ManagerService管理定时任务
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值