工作流引擎Activity

工作流引擎详解
本文深入解析了工作流引擎的概念,重点介绍了Activiti的工作原理、核心功能和服务,以及如何在实际项目中部署和使用。涵盖了从流程设计到任务处理的全过程,同时提供了数据库支持和表结构的详细说明。

工作流

一、工作流是什么?

        是工作流程及各操作步骤之间业务规则的抽象、概述和描述。

        或者说多个参与者,按照某种预定义的规则,传递业务信息,进行审核的功能框架。

 

工作流引擎是什么?

       所谓工作引擎流是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案。

主要功能

       包括流程的节点管理、流向管理、流程样例管理等重要功能。

 

二、为什么选用activiti

  • 工作流引擎有哪些?
  1. WWF
  2. NetBPM
  3. OSWorkFlow
  4. JBPM
  5. Activiti

 

  • 对比分析

  • Activiti发展史

 

三、主要知识点

  • 支持的数据库类型
  1. H2
  2. Oracle
  3. Db2
  4. Mysql

    

  • 数据库表

     23张表(25) 5大类

  • 1. act_re_  : “Repository”(仓库),保存‘静态’信息
  • 2. act_ ru_ : “Runtime”(运行时),这些表中保存一些流程实                   例、用户任务、变量等的运行时数据
  • 3. act_ge_:“General”(通用),用在各种情况下
  • 4. act_hi_ :“History”(历史)历史数据
  • 5.act_id_   :“Identity”(身份),这些表中保存的都是身份信息
  • ……

 

  • 六大服务

1. RepositoryService

2. RuntimeService

3. TaskService

4. IdentityService

5. HistoryService

6. ManagementService

 

  • Activiti核心对象

ProcessEngine管理6大服务

 

四、怎么使用

  1. 画模型
  2. 保存部署模型图
  3. 启动流程
  • RuntimeService.start…         act_ru_execution
    • 1.processDefinitionKey
    • 2.processDefinitionId
    • 3.message(复杂)
    • 4.processInstanceBuilder.processDefinitionKey

(processDefinitionKey值)

4.设置审批人

TaskService            act_ru_  

    • Assignee个人任务          setAssignee
    • Candidate users组任务   addCandidateUser

5.任务处理

  •  TaskService            act_ru_
  • 方式:
    • 1.completeTask 办理
    • 2.delegateTask  委派
    • 3.resolveTask    转办
    • 4.claim               签收
  • 委托人:        taskService.delegateTask     
  • 被委托人 :taskService.resolveTask              
  • 流向下一级:taskService.complete

6.查询任务

  • TaskService            act_ru_task
    • 个人任务          taskAssignee
    • 组任务              taskCandidateUser

 

五、遇见的问题

数据一致性

 

Activiti是一个轻量级且强大的Java工作流引擎,可将业务系统中复杂的业务程抽取出来,使用专门的建模语言BPMN进行定义,让业务程按照预先定义的程执行,实现系统程由Activiti管理,减少业务系统因程变更进行系统升级改造的工作量,提高系统的健壮性,同时降低系统开发维护成本[^1][^2]。 工作流是将一条信息根据角色、分工、条件不同进行固定的向上传递,数据按固定向传输,这种场景在OA、CRM/ERP中应用较多。虽然可以通过逻辑实现,但复杂度高且不便维护,因此通常采用第三方引擎框架,Activiti就是这样的框架,它简化了操作且方便维护[^3]。 下面是Activiti在Java中的使用方法: 1. **部署程定义** ```java ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); // 部署 BPMN 文件 Deployment deployment = repositoryService.createDeployment() .addClasspathResource("processes/leave-request.bpmn20.xml") .deploy(); System.out.println("程部署ID: " + deployment.getId()); ``` 此步骤使用Activiti提供的API将业务程定义(.bpmn文件)存储起来,在执行过程中可查询定义内容,包括程定义表存储的基本信息和程定义数据表存储的bpmn数据[^4][^5]。 2. **启动程实例** ```java RuntimeService runtimeService = processEngine.getRuntimeService(); // 设置程变量(如申请人、请假天数) Map<String, Object> variables = new HashMap<>(); variables.put("employee", "张三"); variables.put("days", 3); // 启动程 ProcessInstance instance = runtimeService.startProcessInstanceByKey("leaveRequest", variables); ``` 启动一个程实例表示开始一次业务程的运行,不同实例的执行互不影响,如员工请假,不同员工请假可分别启动程实例[^4][^5]。 3. **处理用户任务** ```java TaskService taskService = processEngine.getTaskService(); // 查询某用户的任务列表 List<Task> tasks = taskService.createTaskQuery() .taskAssignee("经理李四") .list(); // 完成任务 for (Task task : tasks) { taskService.complete(task.getId(), Collections.singletonMap("approved", true)); } ``` 用户可查询待办任务并完成任务,例如经理查询自己的待审批请假任务并完成审批操作[^4][^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值