ActivitiDemo_LFP_HelloWorld实现
做一个最简单的HellWorld流程用代码的方式实现并且走完流程。 1.首先是需要部署流程定义。 2.启动流程实例。 3.查看流程任务以及完成流程任务。 创建一个单元测试类ActivitiHelloWorldTest,首先第一操作流程就必须要获取引擎实例: [java] view plain copy 1. <span 2. * 获取默认的流程引擎实例 会自动读取activiti.cfg.xml文件 3. */ 4. private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();</span> 把绘制的流程定义图(我在上一篇博文上绘制过),部署下: [java] view plain copy 1. <span 2. * 部署流程定义 3. */ 4. @Test 5. public void deploy(){ 6. // 获取部署对象 7. Deployment deployment=processEngine.getRepositoryService() // 部署Service 8. .createDeployment() // 创建部署 9. .addClasspathResource("diagrams/helloWorld.bpmn") // 加载资源文件 10. .addClasspathResource("diagrams/helloWorld.png") // 加载资源文件 11. .name("HelloWorld流程") // 流程名称 12. .deploy(); // 部署 13. System.out.println("流程部署ID:"+deployment.getId()); 14. System.out.println("流程部署Name:"+deployment.getName()); 15. }</span> 接着需要启动流程实例,这样一个流程才开始: [java] view plain copy 1. <span 2. * 启动流程实例 3. */ 4. @Test 5. public void start(){ 6. // 启动并获取流程实例 7. ProcessInstance processInstance=processEngine.getRuntimeService() // 运行时流程实例Service 8. .startProcessInstanceByKey("myFirstProcess"); // 流程定义表的KEY字段值 9. System.out.println("流程实例ID:"+processInstance.getId()); 10. System.out.println("流程定义ID:"+processInstance.getProcessDefinitionId()); 11. }</span> 查看一下李四这个用户的任务信息: [java] view plain copy 1. <span 2. * 查看任务 3. */ 4. @Test 5. public void findTask(){ 6. // 查询并且返回任务即可 7. List<Task> taskList=processEngine.getTaskService() // 任务相关Service 8. .createTaskQuery() // 创建任务查询 9. .taskAssignee("李四") // 指定某个人 10. .list(); 11. for(Task task:taskList){ 12. System.out.println("任务ID:"+task.getId()); 13. System.out.println("任务名称:"+task.getName()); 14. System.out.println("任务创建时间:"+task.getCreateTime()); 15. System.out.println("任务委派人:"+task.getAssignee()); 16. System.out.println("流程实例ID:"+task.getProcessInstanceId()); 17. } 18. }</span> 最后完成HelloWorld节点任务,把流程走完: [java] view plain copy 1. <span 2. * 完成任务 3. */ 4. @Test 5. public void completeTask(){ 6. <span </span>processEngine.getTaskService() // 任务相关Service 7. .complete("2504"); // 指定要完成的任务ID 8. }</span> 有个很重要的概念,流程定义和流程实例的关系,可以把这两种关系理解成是类和对象的关系。 流程定义是一个模板,而流程实例就是通过模板演变出来的具体的可用的东西。 首先当运行:deploy()部署流程定义方法,在数据库中流程定义表会发生一些变化新增了一条数据, act_re_deployment流程定义部署表: 然后act_re_prodef流程定义表也会有一条数据插入: 还有一个act_ge_bytearray表用来存储资源信息: 接着来运行start()启动流程实例: act_ru_task运行时流程任务表新增了一条数据: act_ru_execution运行时流程执行表: act_ru_identitulink是用于执行主体相关信息表: 可以查看刚刚"李四”这个用户的任务: 运行findTask()查看用户任务,控制台输出如下: [java] view plain copy 1. <span Failed to load class "org.slf4j.impl.StaticLoggerBinder". 2. SLF4J: Defaulting to no-operation (NOP) logger implementation 3. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 4. 任务ID:5004 5. 任务名称:HelloWorld 6. 任务创建时间:Mon Mar 13 11:15:18 CST 2017 7. 任务委派人:李四 8. 流程实例ID:5001</span> 查询到了数据就说明这个用户有任务可以执行,接着运行completeTask()方法完成任务: 然后数据库中ru开头的运行时候所有表的数据都没了,因为现在流程结束,不需要这些数据了。 在hi开头的表里,会新增不少数据,这些数据主要是用来归档查询用的,也就是历史数据。 act_hi_taskinst 历史流程实例任务表加了一条任务数据; act_hi_procinst 历史流程实例实例表加了一条流程实例相关信息的数据(包括开始时间,结束时间等等信息); act_hi_identitylink 历史流程实例参数者的表加了一条数据; act_hi_actinst 历史活动节点表加了三条流程活动节点信息的数据(每个流程实例具体的执行活动节点的信息);
- 1
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言-leetcode题解之70-climbing-stairs.c
- C语言-leetcode题解之68-text-justification.c
- C语言-leetcode题解之66-plus-one.c
- C语言-leetcode题解之64-minimum-path-sum.c
- C语言-leetcode题解之63-unique-paths-ii.c
- C语言-leetcode题解之62-unique-paths.c
- C语言-leetcode题解之61-rotate-list.c
- C语言-leetcode题解之59-spiral-matrix-ii.c
- C语言-leetcode题解之58-length-of-last-word.c
- 计算机编程课程设计基础教程