工作流Activiti的学习总结(十二) activiti官方十分钟快速学习 (zhuan)
http://topmanopensource.iteye.com/blog/1315341
******************************************************
根据activiti官方提供的 编写
1.财务部门填写月财务报告
2.股东审核月财务审计报告
流程图:

流程配置:
- <?xml version="1.0" encoding="UTF-8"?>
- <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://activiti.org/bpmn20">
- <process id="financialReport" name="Monthly financial report reminder process">
- <startEvent id="startevent1" name="月财务报告审核开始"></startEvent>
- <!-- 采用用户组为accountancy编写财务报告 -->
- <userTask id="usertask1" name="财务编写月财务报告" activiti:candidateGroups="accountancy"></userTask>
- <userTask id="usertask2" name="股东审核月财务审计报告" activiti:candidateGroups="management"></userTask>
- <endEvent id="endevent1" name="月财务报告审核结束"></endEvent>
- <sequenceFlow id="flow1" name="" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
- <sequenceFlow id="flow2" name="" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>
- <sequenceFlow id="flow3" name="" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>
- </process>
- <bpmndi:BPMNDiagram id="BPMNDiagram_financialReport">
- <bpmndi:BPMNPlane bpmnElement="financialReport" id="BPMNPlane_financialReport">
- <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
- <omgdc:Bounds height="35" width="35" x="30" y="200"></omgdc:Bounds>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
- <omgdc:Bounds height="55" width="105" x="125" y="190"></omgdc:Bounds>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">
- <omgdc:Bounds height="55" width="105" x="290" y="190"></omgdc:Bounds>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
- <omgdc:Bounds height="35" width="35" x="455" y="200"></omgdc:Bounds>
- </bpmndi:BPMNShape>
- <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
- <omgdi:waypoint x="65" y="217"></omgdi:waypoint>
- <omgdi:waypoint x="125" y="217"></omgdi:waypoint>
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
- <omgdi:waypoint x="230" y="217"></omgdi:waypoint>
- <omgdi:waypoint x="290" y="217"></omgdi:waypoint>
- </bpmndi:BPMNEdge>
- <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
- <omgdi:waypoint x="395" y="217"></omgdi:waypoint>
- <omgdi:waypoint x="455" y="217"></omgdi:waypoint>
- </bpmndi:BPMNEdge>
- </bpmndi:BPMNPlane>
- </bpmndi:BPMNDiagram>
- </definitions>
编码如下:
- package com.easyway.spring.activiti;
- import java.util.List;
- import org.activiti.engine.HistoryService;
- import org.activiti.engine.ProcessEngine;
- import org.activiti.engine.ProcessEngineConfiguration;
- import org.activiti.engine.RepositoryService;
- import org.activiti.engine.RuntimeService;
- import org.activiti.engine.TaskService;
- import org.activiti.engine.history.HistoricProcessInstance;
- import org.activiti.engine.task.Task;
- /**
- * 根据activiti官方提供的 编写
- * 1.财务部门填写月财务报告
- * 2.股东审核月财务审计报告
- *
- *
- * activiti提供的财务报告审核
- * <!-- 采用用户组为accountancy编写财务报告 -->
- * <userTask id="usertask1" name="财务编写月财务报告" activiti:candidateGroups="accountancy"></userTask>
- * <!-- 采用用户组为management编写财务报告 -->
- * <userTask id="usertask2" name="股东审核月财务审计报告" activiti:candidateGroups="management"></userTask>
- *
- * 备注:
- * 默认的两个用户:
- * <pre>
- * 用户名 密码 用户组
- Table 2.1. The demo users
- UserId Password Security roles
- kermit kermit admin
- gonzo gonzo manager
- fozzie fozzie user
- * </pre>
- *
- * @author longgangbai
- *
- * 2011-12-18 下午04:08:46
- */
- public class CustomFinancialReportActiviti {
- public static void main(String[] args) {
- // Create Activiti process engine
- //创建一个流程引擎对象
- // ProcessEngine processEngine = ProcessEngineConfiguration
- // .createStandaloneProcessEngineConfiguration()
- // .buildProcessEngine();
- //创建一个流程引擎对象(为了便于多册测试,修改 name="databaseSchemaUpdate" value="create-drop" 默认为ture)
- ProcessEngine processEngine=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
- // Get Activiti services
- //获取流程相关的服务
- RepositoryService repositoryService = processEngine.getRepositoryService();
- RuntimeService runtimeService = processEngine.getRuntimeService();
- // Deploy the process definition
- //部署相关的流程配置
- repositoryService.createDeployment()
- .addClasspathResource("diagrams/financialReport.bpmn20.xml")
- .deploy();
- // Start a process instance
- //获取流程实例
- String procId = runtimeService.startProcessInstanceByKey("financialReport").getId();
- // Get the first task
- TaskService taskService = processEngine.getTaskService();
- //获取accountancy组可能要操作的任务
- List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("accountancy").list();
- for (Task task : tasks) {
- System.out.println("Following task is available for accountancy group: " + task.getName());
- //设置fozzie代办 claim it
- taskService.claim(task.getId(), "fozzie");
- }
- // Verify Fozzie can now retrieve the task
- //审核fozzie当前的获取的任务数量
- tasks = taskService.createTaskQuery().taskAssignee("fozzie").list();
- for (Task task : tasks) {
- System.out.println("Task for fozzie: " + task.getName());
- // Complete the task
- //设置forzze完毕
- taskService.complete(task.getId());
- }
- System.out.println("Number of tasks for fozzie: "
- + taskService.createTaskQuery().taskAssignee("fozzie").count());
- // Retrieve and claim the second task
- //管理者审核报告并让kermit代办
- tasks = taskService.createTaskQuery().taskCandidateGroup("management").list();
- for (Task task : tasks) {
- System.out.println("Following task is available for accountancy group: " + task.getName());
- taskService.claim(task.getId(), "kermit");
- }
- // Completing the second task ends the process
- //完成报告
- for (Task task : tasks) {
- taskService.complete(task.getId());
- }
- // verify that the process is actually finished
- //查询流程实例完成事件
- HistoryService historyService = processEngine.getHistoryService();
- HistoricProcessInstance historicProcessInstance =
- historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).singleResult();
- System.out.println("Process instance end time: " + historicProcessInstance.getEndTime());
- }
- }
运行结果如下:
- 信息: ProcessEngine default created
- 2011-12-18 17:06:00 org.activiti.engine.impl.jobexecutor.JobAcquisitionThread run
- 信息: JobAcquisitionThread starting to acquire jobs
- 2011-12-18 17:06:00 org.activiti.engine.impl.bpmn.deployer.BpmnDeployer deploy
- 信息: Processing resource diagrams/financialReport.bpmn20.xml
- 2011-12-18 17:06:01 org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributes
- 信息: XMLSchema currently not supported as typeLanguage
- 2011-12-18 17:06:01 org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributes
- 信息: XPath currently not supported as expressionLanguage
- Following task is available for accountancy group:<span style="color: #ff0000;"> 财务编写月财务报告</span>
- <span style="color: #ff0000;">Task for fozzie: 财务编写月财务报告</span>
- <span style="color: #ff0000;">Number of tasks for fozzie: 0</span>
- <span style="color: #ff0000;">Following task is available for accountancy group: 股东审核月财务审计报告</span>
- <span style="color: #ff0000;">Process instance end time: Sun Dec 18 17:06:01 CST 2011
- </span>
工作流Activiti的学习总结(十二) activiti官方十分钟快速学习 (zhuan)的更多相关文章
- 《Django By Example》第十二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
- SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关
0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...
- 第十二课 CSS基本选择器 css学习2
基础选择器一.标签选择器(元素选择器)标签选择器是指用HTML标签名称作为选择器,按标签名称分类语法:标签名{属性1:属性值1;属性2:属性值2;属性3:属性值3;} 二.类选择器1.类选择器使用&q ...
- Redis数据类型简介(十分钟快速学习Redis)
如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...
- TensorFlow学习笔记(二)-- MNIST机器学习入门程序学习
此程序被称为TF的 Hello World,19行代码,给人感觉很简单.第一遍看的时候,不到半个小时,就把程序看完了.感觉有点囫囵吞枣的意思,没理解透彻.现在回过头来看,感觉还可以从中学到更多东西. ...
- 第十二章 Net 5.0 快速开发框架 YC.Boilerplate --千万级数据处理解决方案
在线文档:http://doc.yc-l.com/#/README 在线演示地址:http://yc.yc-l.com/#/login 源码github:https://github.com/linb ...
- 30分钟快速学习Shell脚本编程
什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch ...
- 我的MYSQL学习心得(十二) 触发器
我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数 ...
- 201521123122 《java程序设计》第十二周学习总结
## 201521123122 <java程序设计>第十二周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将St ...
随机推荐
- HTML:图片和视频标签的使用
介绍:在html网页中,图片和视频是基本的元素,在网页中插入图片和视频有自己的标签,分别是img.embed,来源都是使用src来链接. 插入图片: <img src="图片的来源&q ...
- c++中三种参数引用方式
传值调用 是默认的参数传递机制,实参会复制给形参,调用的语义是每次取得实参的副本并将该复本用作形参,即会有复本的开销,并且不改变实参的值. 适用于:传值调用用于不应该被函数改变的小型对象. 例子:vo ...
- MYSQL三个默认库的介绍
数据库INFORMATION_SCHEMA:提供了访问数据库元数据的方式. 元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等.有些时候用于表述该信息的其他术语包括“数据词典”和“系 ...
- go语言基础之递归函数的调用流程
一.递归函数的调用流程 package main //必须 import "fmt" func test(a int) { if a == 1 { //函数终止调用的条件,非常重要 ...
- Maven核心概念之仓库,生命周期与插件
宏观图 一.仓库 统一存储全部Maven项目共享的构建的位置就是仓库. 仓库分为本地仓库和远程仓库.远程仓库又分为中央仓库(中央仓库是Maven核心自带的远程仓库),伺服(还有一种特殊的远程仓库,为节 ...
- (转)更新Java final常量后,请重新编译你的class
程序中使用的各种常量用一个类来统一管理,类似: public class AppConst { public static final String STR_1 = "String1&quo ...
- TP框架中ajax post请求时提示404
ajax post请求时提示404错误 TP框架中ajax post请求时提示404 找了半天是 控制器中方法有错误! 下次再遇到去控制器方法中找一步一步找,肯定能找到,我是单词拼错了!
- CLR_Via_C#学习笔记之CLR的执行模型
1:公共语言运行时(Common Language Runtime,CLR)是一个可由多种编程语言使用的“运行时”.CLR的核心功能(比如内存管理.程序集加载.安全性.异常处理和线程同步)可由面向CL ...
- taro 填坑之路(三)taro 缓存
1.taro 缓存 /** * 缓存数据 H5 小程序 * {food.id:{菜品信息 Num}, } */ import Taro from '@tarojs/taro'; // 取值 let s ...
- LInux下inode空间报警-CROND出错导致/var/spool/postfix/maildrop/堆积
Linux下显示磁盘空间不足,,通过 df -ih 查询发现/dev/mapper/*****var 下的inode用满.inode介绍 通过 du -sh * 查询/目录下的问题,最终查到/var/ ...