[工作流activiti]-01.基础篇
来源:互联网 发布:有网络但是网页打不开 编辑:程序博客网 时间:2024/05/24 03:48
一、activiti发展史
链接:http://blog.csdn.net/hj7jay/article/details/68483096
二、activiti表
==注==:工作流框架底层有数据库支持,根据版本不同,表个数也不同。5.13版本对应23张表,5.16版本对应24张表,5.22版本对应25张表。JBPM4.4框架底层也有数据库支持,18张表。Activiti框架底层使用mybatis操作数据库,JBPM框架底层使用hibernate操作数据库。
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应
1. 资源库流程规则表(ACT_RE_*)
ACT_RE_*: ‘RE’表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)
ACT_RE_DEPLOYMENT #流程部署信息表ACT_RE_MODEL #流程设计模型部署表ACT_RE_PROCDEF #流程定义表
2. 运行时数据库表(ACT_RU_*)
ACT_RU_*: ‘RU’表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_RU_EVENT_SUBSCR #ACT_RU_EXECUTION #运行时流程执行实例表ACT_RU_IDENTITYLINK #运行时流程人员表,主要存储任务节点与参与者的相关信息ACT_RU_JOB #ACT_RU_TASK #运行时任务节点表ACT_RU_VARIABLE #运行时流程变量数据表
3. ACT_ID_*: ‘ID’表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_ID_GROUP #用户组信息表ACT_ID_INFO #用户扩展信息表ACT_ID_MEMBERSHIP #用户与用户组对应信息表ACT_ID_USER #用户信息表
4. 历史数据库表(ACT_HI_*)
ACT_HI_*: ‘HI’表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_HI_ACTINST #历史节点表ACT_HI_ATTACHMENT #历史附件表ACT_HI_COMMENT #历史意见表ACT_HI_DETAIL #历史详情表,提供历史变量的查询ACT_HI_IDENTITYLINK #历史流程人员表ACT_HI_PROCINST #历史流程实例表ACT_HI_TASKINST #历史任务实例表ACT_HI_VARINST #历史变量表
5. 通用数据表(ACT_GE_*)
ACT_GE_*: 通用数据, 用于不同场景下。
ACT_GE_BYTEARRAY # 二进制数据表ACT_GE_PROPERTY #属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
6. 其他
ACT_EVT_LOGACT_PROCDEF_INFO
三、入门程序
1.单独使用activiti
1. 创建一个Java项目,导入jar包
2. 在config目录下提供配置文件activiti-context.xml或者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"> <!-- 配置Activiti框架的流程引擎配置对象 --> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <!-- 注入数据源相关信息 --> <property name="jdbcDriver" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql:///activiti"/> <property name="jdbcUsername" value="root"/> <property name="jdbcPassword" value="root"/> <!-- 配置自动建表 --> <property name="databaseSchemaUpdate" value="true"/> </bean> <!-- 配置流程引擎工厂bean,用于创建一个流程引擎对象 --> <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> <!-- 注入上面的配置对象 --> <property name="processEngineConfiguration" ref="processEngineConfiguration"/> </bean></beans>
3. 调用Activiti的API,创建一个流程引擎对象,这个过程中会完成自动建表(运行test方法即可)
public class HelloWorld { /** * 使用activiti框架自动建表方式自动创建表 */ @Test public void test1() { ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); }}
2.与spring结合
<bean id="writeDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> ......</bean><!--注册事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 配置Activiti框架的流程引擎配置对象 --> <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="dataSource" ref="dataSource"/> <property name="transactionManager" ref="transactionManager"/> <!-- 配置自动建表 --> <property name="databaseSchemaUpdate" value="false"/> </bean> <!-- 配置流程引擎工厂bean,用于创建一个流程引擎对象 --> <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> <!-- 注入上面的配置对象 --> <property name="processEngineConfiguration" ref="processEngineConfiguration"/> </bean> <!--创建activiti框架的Service对象 repositoryService、identityService、runtimeService、taskService--> <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/> <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/> <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/> <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/> <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
四、基础API使用
5.16中文api:http://www.mossle.com/docs/activiti/index.html#bpmnSequenceFlow
部署流程定义
/** * 部署流程定义,框架操作表:act_re_deployment(部署表)、act_re_procdef(流程定义表)、act_ge_bytearray(二进制表) */@Testpublic void test2() { //读取默认配置文件,创建一个流程引擎对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //创建一个部署构建器对象 DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment(); //加载流程定义文件 deploymentBuilder.addClasspathResource("process/qjlc.bpmn"); Deployment deploy = deploymentBuilder.deploy();//多个数据库操作 System.out.println(deploy);}
查询流程定义
/** * 查询流程定义 */@Testpublic void test3() { //流程定义查询对象,通过这个对象可以查询act_re_procdef表 ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery(); //添加过滤条件 query.processDefinitionName("请假流程"); //添加排序条件 query.orderByProcessDefinitionVersion().asc(); //添加分页条件 List<ProcessDefinition> list = query.listPage(0, 10); for (ProcessDefinition processDefinition : list) { System.out.println(processDefinition.getId()); }}
启动流程实例
根据某个规则(流程定义)具体一次执行过程就是一个流程实例。流程定义和流程实例是一对多关系
/** * 根据流程定义启动流程实例,操作的表act_ru_execution(流程实例表)、act_ru_task(任务表) */@Testpublic void test4() { String processDefinitionId = "myProcess_qjlc:1:2504";//流程定义id ProcessInstance processInstance = processEngine.getRuntimeService(). startProcessInstanceById(processDefinitionId); System.out.println(processInstance.getId());}
查询流程实例
/** * 查询流程实例 */@Testpublic void test5() { ProcessInstanceQuery query = processEngine.getRuntimeService().createProcessInstanceQuery(); List<ProcessInstance> list = query.list(); for (ProcessInstance processInstance : list) { System.out.println(processInstance); }}
升级篇
部署流程定义两种方式
/** * 部署流程定义两种方式 * 1.加载单个流程定义文件 * 2.加载zip文件 */@Testpublic void test1() throws FileNotFoundException { //创建一个部署构造器对象 DeploymentBuilder deploymentBuilder = processEngine.getRepositoryService().createDeployment(); /* 方式一:加载单个流程定义文件 */ // deploymentBuilder.addClasspathResource("process/bxlc.bpmn"); /* 方式二:加载zip文件 */ //ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(// new File("/Users/bob/Applications/bob-workspace/github/stu-activiti/stu-activiti5/src/main/resources/process/lc.zip"))); ZipInputStream zipInputStream = new ZipInputStream(this.getClass().getClassLoader().getResourceAsStream("process/lc.zip")); deploymentBuilder.addZipInputStream(zipInputStream); Deployment deployment = deploymentBuilder.deploy();//部署流程定义 System.out.println(deployment);}
查询流程定义(最新版本的流程定义)
/** * 查询流程定义(最新版本的流程定义) */@Testpublic void test2() throws FileNotFoundException { //流程定义查询对象 ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery(); //方式一:添加过滤条件---最新版本的流程定义// query.latestVersion(); //方式二:自定义实现 query.orderByProcessDefinitionVersion().asc(); List<ProcessDefinition> list = query.list(); HashMap<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>(); for (ProcessDefinition processDefinition : list) { map.put(processDefinition.getKey(), processDefinition); } list = new ArrayList<ProcessDefinition>(map.values()); for (ProcessDefinition processDefinition : list) { System.out.println(processDefinition); } // 在Activiti框架中,提供了很多查询对象,可以查询对应的表 processEngine.getRepositoryService().createDeploymentQuery().list();//act_re_deployment processEngine.getRepositoryService().createProcessDefinitionQuery().list();//act_re_procdef processEngine.getRuntimeService().createProcessInstanceQuery().list();//act_ru_execution processEngine.getTaskService().createTaskQuery().list();//act_ru_task processEngine.getHistoryService().createHistoricActivityInstanceQuery().list();//act_hi_actinst}
删除流程定义
/** * 删除流程定义 */@Testpublic void test3() { //页面可以传递流程定义id参数 String processDefinitionId = "myProcess_qjlc:1:2504"; //根据流程定义id查询流程定义对象 ProcessDefinition processDefinition = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult(); //根据流畅定义对象获取流程部署id String deploymentId = processDefinition.getDeploymentId();//部署id(即act_re_deployment的id) processEngine.getRepositoryService().deleteDeployment(deploymentId); //级联删除,不管是否有流程定义是否正在使用(不建议使用) //processEngine.getRepositoryService().deleteDeployment(deploymentId, true);}
查询流程定义对应的流程定义文件名称和输入流
/** * 查询流程定义对应的流程定义文件名称和输入流 */@Testpublic void test4() throws IOException { String deploymentId = "17501";//部署id List<String> names = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId); for (String name : names) { System.out.println(name); InputStream inputStream = processEngine.getRepositoryService().getResourceAsStream(deploymentId, name); FileUtils.copyInputStreamToFile(inputStream, new File("/Users/bob/Applications/bob-workspace/github/" + "stu-activiti/stu-activiti5/src/main/resources/result/" + name)); }}
启动流程实例
/** * 启动流程实例 * 1.根据流程定义id启动 * 2.根据流程定义key启动(重点)--框架会自动选中最新版本的流程定义启动流程实例 */@Testpublic void test5() throws IOException { //方式一:根据流程定义id启动 //String processDefinitionId = "myProcess_qjlc:4:15006";//流程定义id //processEngine.getRuntimeService().startProcessInstanceById(processDefinitionId); //方式二:根据流程定义key启动(重点)--框架会自动选中最新版本的流程定义启动流程实例 String processDefinitionKey = "myProcess_qjlc";//流程定义key ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey); System.out.println(processInstance.getId());}
查询流程实例
/** * 查询流程实例 */@Testpublic void test6() throws IOException { List<ProcessInstance> list = processEngine.getRuntimeService().createProcessInstanceQuery().list(); for (ProcessInstance processInstance : list) { System.out.println(processInstance); }}
删除流程实例
/** * 删除流程实例 */@Testpublic void test7() { String processInstanceId = "22501";//流程实例id String deleteReason = "不请假了";//删除原因 processEngine.getRuntimeService().deleteProcessInstance(processInstanceId, deleteReason);}
查询个人任务
/** * 查询个人任务 */@Testpublic void test8() { TaskQuery query = processEngine.getTaskService().createTaskQuery(); query.taskAssignee("李四"); List<Task> list = query.list(); for (Task task : list) { System.out.println(task); }}
办理个人任务
/** * 办理个人任务 */@Testpublic void test9() { String taskId = "25002"; processEngine.getTaskService().complete(taskId);}}
总结API
#几个接口(和表有对应关系)Deployment对应act_re_deploymentProcessDefinition对应act_re_procdefProcessInstance对应act_ru_executionTask对应act_ru_task#几个Query对象,对应可以查询表DeploymentQuery对应act_re_deploymentProcessDefinitionQuery对应act_re_procdefProcessInstanceQuery对应act_ru_executionTaskQuery对应act_ru_task#几个Service对象RepositoryService:流程定义相关操作,静态资源RuntimeService:流程实例相关操作,启动流程实例、查询流程实例、删除流程实例TaskService:任务相关操作,查询任务、办理任务、查询组任务、拾取组任务IdentityService:用户身份相关操作,创建用户、创建组、将用户加入到组中HistoryServiceFormService
阅读全文
0 0
- [工作流activiti]-01.基础篇
- 工作流-Activiti-基础认识
- Activiti工作流之基础概念介绍
- Activiti-工作流
- activiti工作流
- 工作流activiti
- activiti工作流
- Activiti工作流
- activiti工作流
- 工作流 activiti
- Activiti工作流
- Activiti 工作流
- 工作流Activiti
- activiti工作流
- Activiti工作流
- Activiti 工作流
- Activiti工作流
- activiti工作流
- 安卓获取手机短信(Contentprovider)
- 最短路径—Dijkstra算法(C#)
- 无线自动轮播,获取网络上的图片+scrollView+listView 联动
- 74HC573芯片介绍
- js实现常见排序算法
- [工作流activiti]-01.基础篇
- 计算机网络之基础篇
- (七)SpringIOC容器中bean生命周期
- 建立项目的webpack配置文件
- Web开发中,用到的4种会话跟踪技术
- 周中训练笔记12
- D3D11 加载静态3D模型(.obj格式)
- 阿里开源项目
- ArrayList,LinkedList,Vestor对比