1 创建流程

首先选中存放图形的目录(本次我们选择 resources 下的 bpmn 目录),点击菜单: New-BpmnFile,如
下图所示:

起完名字 holiday 后(默认扩展名为 bpmn),就可以看到进入了流程设计页面,如图所示

绘制流程 :

图形绘制好后会生成两个文件:

指定流程定义 key

流程定义 key 即流程定义的标识,在 eclipse 中通过 properties 视图查看流程的 key
建议:相同的业务流程,流程定义的 key 名字定义一样,比如,如果需要创建新的业务流程,请假
流程则使用新的 key。

指定任务负责人

在 properties 视图指定每个任务结点的负责人,
比如下边是填写请假单的负责人为 zhangsan

2  部署流程定义

部署流程定义

    //流程定义部署
public static void main(String[] args) {
//1.创建ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RepositoryService实例
RepositoryService repositoryService = processEngine.getRepositoryService(); //3.进行部署
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("diagram/holiday.bpmn") //添加bpmn资源
.addClasspathResource("diagram/holiday.png")
.name("请假申请单流程")
.deploy(); //4.输出部署的一些信息
System.out.println(deployment.getName());
System.out.println(deployment.getId());
}

执行此操作后 activiti 会将上边代码中指定的 bpm 文件和图片文件保存在 activiti 数据库。

3 流程实例

启动一个流程实例
流程定义部署在 activiti 后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流
程可以使用了。
针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于 java 类与 java 对象的关
系,类定义好后需要 new 创建一个对象使用,当然可以 new 多个对象。对于请假申请流程,张三发
起一个请假申请单需要启动一个流程实例, 请假申请单发起一个请假单也需要启动一个流程实例。
代码如下

/**
* @author WGR
* @create 2019/11/13 -- 19:35
*/
public class ActivitiInstance { public static void main(String[] args) {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance holiday = runtimeService.startProcessInstanceByKey("holiday"); System.out.println(holiday.getDeploymentId());
System.out.println(holiday.getId());
System.out.println(holiday.getActivityId()); }
}

4 任务查询

流程启动后,各各任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户
的待办任务

/**
* 查询当前用户的任务列表
*/
public class ActivitiTaskQuery { //wangwu完成自己任务列表的查询
public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象
TaskService taskService = processEngine.getTaskService(); //3.根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
Task task = taskService.createTaskQuery()
.processDefinitionKey("holiday")
.taskAssignee("wangwu")
.singleResult(); //4.任务列表的展示
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("任务ID:"+task.getId()); //
System.out.println("任务负责人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName()); } //lishi完成自己任务列表的查询
// public static void main(String[] args) {
// //1.得到ProcessEngine对象
// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//
// //2.得到TaskService对象
// TaskService taskService = processEngine.getTaskService();
//
// //3.根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
// Task task = taskService.createTaskQuery()
// .processDefinitionKey("holiday")
// .taskAssignee("lisi")
// .singleResult();
//
// //4.任务列表的展示
// System.out.println("流程实例ID:"+task.getProcessInstanceId());
// System.out.println("任务ID:"+task.getId()); //5002
// System.out.println("任务负责人:"+task.getAssignee());
// System.out.println("任务名称:"+task.getName());
//
//// 流程实例ID:2501
//// 任务ID:5002
//// 任务负责人:lisi
//// 任务名称:部门经理审批
//
//
// } //zhangsan任务列表的查询
/* public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象
TaskService taskService = processEngine.getTaskService(); //3.根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
List<Task> taskList = taskService.createTaskQuery()
.processDefinitionKey("holiday")
.taskAssignee("zhangsan")
.list(); //4.任务列表的展示
for(Task task :taskList){
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("任务ID:"+task.getId());
System.out.println("任务负责人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName());
}
// 流程实例ID:2501
// 任务ID:2505
// 任务负责人:zhangsan
// 任务名称:填写请假申请单 } */
}

5 任务处理

任务负责人查询待办任务,选择任务进行处理,完成任务。

/**
* 处理当前用户的任务
* 背后操作的表:
* act_hi_actinst
act_hi_identitylink
act_hi_taskinst
act_ru_identitylink
act_ru_task
*/
public class ActivitiCompleteTask { //查询当前用户wangwu的任务并处理掉
public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象
TaskService taskService = processEngine.getTaskService(); //3.查询当前用户的任务
Task task = taskService.createTaskQuery()
.processDefinitionKey("holiday")
.taskAssignee("wangwu")
.singleResult(); //4.处理任务,结合当前用户任务列表的查询操作的话,任务ID:task.getId()
taskService.complete(task.getId()); //5.输出任务的id //
System.out.println(task.getId());
} //lishi完成自己的任务
/* public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象
TaskService taskService = processEngine.getTaskService(); //3.处理任务,结合当前用户任务列表的查询操作的话,任务ID:5002
taskService.complete("5002"); } */ //zhangsan完成自己的任务
/*public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象
TaskService taskService = processEngine.getTaskService(); //3.处理任务,结合当前用户任务列表的查询操作的话,任务ID:2505
taskService.complete("2505"); }*/
}

整个流程走完以后:

最新文章

  1. [LeetCode] Coin Change 硬币找零
  2. 开园第一篇 - 论移动开发环境 IOS与Android的差异
  3. 使用MVVM-Sidekick开发Universal App(二)
  4. selenium+eclispse里代码备注
  5. Eclipse下link方式安装插件
  6. 如何在Linux上实现文件系统的自动检查和修复?
  7. MySQL Spatial Extensions 地理信息
  8. 基于jsp+servlet图书管理系统之后台用户信息查询操作
  9. 探讨socket引发SIGPIPE信号的问题
  10. Material Design说明
  11. java异常回顾
  12. Erlang OTP gen_event
  13. 极光推送集成——iOS10 接受消息问题及解决
  14. encodeURIComponent() 函数
  15. proxymysql的安装与应用
  16. microsoft office如何在菜单里显示“开发工具”
  17. 用.NET WebService Studio调试Web Service解决SOAPAction的问题
  18. String对象中的正则表达式
  19. UVA-712-满二叉树
  20. 如何使用chrome devtool调试Mobile网页?

热门文章

  1. netcat命令用法
  2. springboot项目中使用maven resources
  3. (4.25)Sqlserver中 登录用户只能看到自己拥有权限的库
  4. 剑指Offer编程题(Java实现)——复杂链表的复制
  5. linux-导入python自定义模块的使用方法
  6. I-最短的名字
  7. spring boot 枚举使用的坑
  8. C#GC垃圾回收和析构函数和IDisposable的使用
  9. maven联通网络下中央仓库不能访问的解决办法
  10. Python 余弦相似度与皮尔逊相关系数 计算