Activiti(二)流程实例
来源:互联网 发布:在数据库中存储的是 编辑:程序博客网 时间:2024/04/24 14:53
一、创建Activiti项目,
创建好的项目结构如图所示:
打开windows-preferences,如图如示:
二、创建Demo测试类
注意:别忘了导入开发所需的jar包,jar包下载地址:http://www.activiti.org/download.html
方法一、java配置开发环境
import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngineConfiguration; import org.junit.Test; public class TextActiviti { /** * 使用代码创建工作流需要的23张表 * * 调用ACtiviti的API * 流程引擎ProcessEngine[ˈprɑsˌɛs ˌɛndʒəˈnɪr]对象(所有操作都离不开引擎对象) * * @throws Exception */ @Test public void createTable(){ ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); //定义连接数据库的配置 configuration.setJdbcDriver("com.mysql.jdbc.Driver"); configuration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?useUnicode=true&charEncoding=utf8"); configuration.setJdbcUsername("root"); configuration.setJdbcPassword("4052"); /** * public static final String DB_SCHEMA_UPDATE_FALSE = "false"; 不能自动创建表,需要表存在 * * public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop"; 先删除表再创建表 * * public static final String DB_SCHEMA_UPDATE_TRUE = "true"; 如果表不存在,自动创建表 * */ configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); //工作流的核心对象 流程引擎 ProcessEngine对象 ProcessEngine engine = configuration.buildProcessEngine(); System.out.println("engine:"+engine); }}
运行结果如下所示,表明创建成功:
方法二、配置文件(activiti.cfg.xml)内配置开发环境
在项目工程中找到activiti.cg.xml文件,如图如示:
在activiti.cfg.xml中写入如下配置信息:
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration" > <!-- 加载驱动 --> <property name="jdbcDriver" value="com.mysql.jdbc.Driver" ></property> <!-- 连接数据库 --> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&ampcharEncoding=utf8" ></property> <!-- 用户名 --> <property name="jdbcUsername" value="root" ></property> <!-- 密码 --> <property name="jdbcPassword" value="4052" ></property> <!-- 没有表创建表 --> <property name="databaseSchemaUpdate" value="true" ></property> </bean>
activiti.cfg.xml配置好之后,代码如下所示:
/** * 使用配置文件创建工作流需要的23张表 */ @Test public void createTable_2(){ //加载配置文件 ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml"); //工作流的核心对象 流程引擎 ProcessEngine对象 ProcessEngine engine = configuration.buildProcessEngine(); System.out.println("engine:"+engine); }
运行结果如下所示,表明创建成功::
好了,项目准备工作完成,接下来进行流程图的创建,如下所示:
为了方便修改,使用properties来编辑:
使用properties打开的流程图如下所示:
进行编辑:
保存好之后,会生成一个.png的图片
创建HelloWorld.class
代码如下:
//流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /** * 部署流程定义 */ @Test public void deploymentProcessDefinition(){ Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的service RepositoryService .createDeployment() //创建一个部署对象 .name("helloworld入门程序")//添加部署的名称 .addClasspathResource("diagrams/helloword.bpmn")//从classpath的资源中加载,一次只能加载一个文件 .addClasspathResource("diagrams/helloword.png")//从classpath的资源中加载,一次只能加载一个文件 .deploy();//完成部署 System.out.println("部署ID:"+deployment.getId()); System.out.println("部署名称:"+deployment.getName()); }
输出结果:
数据库中会出现相应的数据:
部署完流程之后,接下来就是启动流程:
/** * 启动流程实例 */ @Test public void startProcessInstance(){ String processDefinitionKey = "helloworld"; ProcessInstance p1 = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的service .startProcessInstanceByKey(processDefinitionKey);/*使用流程定义的key启动流程实例 ,key对应helloword.bpmn文件中id的属性值,使用key启动, 默认是按照最新版本的流程定义启动 */ System.out.println("流程实例ID:"+p1.getId()); //流程实例ID System.out.println("流程定义ID:"+p1.getProcessDefinitionId()); //流程定义ID }
输出结果:
数据库中出现对应的数据:
/** * 查询当前人的个人任务 */ @Test public void findMyPersonalTask(){ String assignee = "张三"; List<Task> list = processEngine.getTaskService()//与正在任务管路相关的service .createTaskQuery()//创建任务查询对象 .taskAssignee(assignee)//指定个人任务查询,指定办理人 .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("流程实例IP:"+task.getProcessInstanceId()); System.out.println("执行对象IP:"+task.getExecutionId()); System.out.println("流程定义IP:"+task.getProcessDefinitionId()); System.out.println("--------------------------------------------------"); } } }
结果如下:
/** * 完成我的任务 */ @Test public void completeMyPersonalTask(){ //任务ID String taskId = "501"; processEngine.getTaskService() .complete(taskId); System.out.println("完成任务:任务ID:"+taskId); }
结果如下:
/** * 查询流程状态(判断流程正在执行,还是结束) * 查询正在执行的流程 若没有 则说明已结束 */ @Test public void idProcessEnd(){ String processInstanceId = "101"; ProcessInstance result = processEngine.getRuntimeService()//表示正在执行的流程实例和执行对象 .createProcessInstanceQuery()//创建一个流程实例查询 .processInstanceId(processInstanceId)//使用流程实例ID进行查询 .singleResult(); if(result==null){ System.out.println("流程已结束"); }else{ System.out.println("流程正在运行"+result.getActivityId()); } }
运行效果:
/** * 查询历史任务 */ @Test public void findHistoryTask(){ String taskAssignee = "张三"; List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据(历史表)相关的service .createHistoricTaskInstanceQuery()//创建历史任务实例查询 .taskAssignee(taskAssignee)//指定历史人物的办理人 .list(); if(!list.isEmpty()){ for (HistoricTaskInstance historicTaskInstance : list) { System.out.println("id:"+historicTaskInstance.getId()); System.out.println("name:"+historicTaskInstance.getName()); System.out.println("流程实例ID:"+historicTaskInstance.getProcessInstanceId()); System.out.println("流程开始时间:"+historicTaskInstance.getStartTime()); System.out.println("流程结束时间:"+historicTaskInstance.getEndTime()); System.out.println("----------------------------------------------------"); } } }
运行效果:
/** * 查询历史流程实例 */ @Test public void findHistoryProcessInstance(){ String processInstanceId = "101"; HistoricProcessInstance result = processEngine.getHistoryService()//与历史数据(历史表)相关的service .createHistoricProcessInstanceQuery()//创建历史流程实例查询 .processInstanceId(processInstanceId)//使用流程实例ID查询 .singleResult(); System.out.println(result.getId()); System.out.println(result.getProcessDefinitionId()); System.out.println(result.getStartTime()); System.out.println(result.getEndTime()); System.out.println(result.getDurationInMillis());//持续多少毫秒 }
运行效果:
0 0
- Activiti(二)流程实例
- Activiti(二)流程
- activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
- activiti自定义流程之Spring整合activiti-modeler实例(二):创建流程模型
- activiti学习笔记(二) 获取流程实例
- activiti 流程定义(二)
- activiti 多方向流程实例(六)
- Activiti 流程定义实例
- Activiti 流程定义实例
- Activiti流程管理学习笔记(二)
- Activiti系列(二)--审批流程
- Activiti工作流入门实例(二)
- activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示
- activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
- activiti自定义流程之Spring整合activiti-modeler5.16实例(五):流程定义列表
- activiti自定义流程之Spring整合activiti-modeler5.16实例(六):启动流程
- activiti自定义流程之Spring整合activiti-modeler实例(三):流程模型列表展示
- activiti自定义流程之Spring整合activiti-modeler实例(四):部署流程定义
- Android 自定义线程池
- 练习四1005
- XListView的使用
- Rxjava四步走到高级掌握
- Java(object类及方法简介)
- Activiti(二)流程实例
- 百度地图 5.0手机报错java.lang.UnsatisfiedLinkError: No implementation found for int
- 个人简历
- 【hibernate进阶】hibernate基本映射
- 通过HTML的方式给textview设置不同的颜色
- Java学习笔记
- Google 面试题
- 连续子数组的最大和
- 算法之插入排序