流程执行任务管理
- 流程部署+启动
- 查看当前任务
- 办理任务
- 查询历史任务
- 查询历史流程实例
查看流程状态
创建流程实例时,缺省为创建2条记录,其中一条是开始事件的执行实例,这个一直存在,只到流程结束后才会自动删除,另一条是普通的节点,所以它的流程实例id和PARENT_ID_字段即主干执行实例id字段值是一样的,完成任务时,它会第二转入历史任务和历史活动表中,如果创建的下一个节点还是普通节点,则它的第二条记录会变化。
// 执行对象表 act_ru_execution
@Test
public void isProcessEnd() {
String processInstanceId = "2501";
long count = runtimeService.createExecutionQuery()
.processInstanceId(processInstanceId)
.count();
System.out.println(count>0?"路程未结束":"流程已经结束");
}
流程变量
作用
- 传递变量
- 指定连线完成任务(批准/驳回)
- 动态指定任务的办理人
使用方法
设置变量
- runtimeService.setVariable(String taskId, String variableName, Object value)
- runtimeService.setVariables(String taskId, Map<String, ? extends Object> variables)
- taskService.setVariable(String taskId, String variableName, Object value)
- taskService.setVariables(String taskId, Map<String, ? extends Object> variables)
获取变量
- runtimeService.getVariable
- runtimeService.getVariables
- taskService.getVariable
- taskService.getVariables
连线
<sequenceFlow id="flow10" name="退回" sourceRef="exclusivegateway2" targetRef="backtenant"></sequenceFlow>
主要参数:
- id: 连线id
- name: 图中连线名称
- sourceRef: 连线起点
- targetRef: 连线终点
若从网关开出来可以增加条件表达式子标签
<sequenceFlow id="flow10" name="退回" sourceRef="exclusivegateway2" targetRef="backtenant">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${approved == "rejected"}]]></conditionExpression>
</sequenceFlow>
网关
排他网关(有条件)
当满足某一条件就能通过的业务.
eg:某一家公司最近在给一个单位做一个财务审批的OA。具体需求是这样的:当部门申请的金额小于一万块的时候,财务部可以直接决策。当部分申请的金额大于一万块并且小于三十万的时候,财务部经理决策,当金额超出了或者等于三十万的时候,需要财务主管来决策。
并行网关(没条件)
并行网关是不需要设置流程变量的,并行网关不在流程变量的范围内.
eg: 在开完某个产品设计会以后,需要对会议约定一些事项进行签字画押涉及到两个部门(产品部/研发部)的主管和经理
确认的顺序:
a:产品部的主管确认然后产品部的经理确认
b:研发部的主管确认 然后研发部的经理确认
注意:以上两个处理步骤可以同时进行,都完成以后,代表流程结束
特性
分支(fork):所有出口顺序流都会被计算,对于计算为true的分支都会被执行。
聚合(join):所有到达包容网关的并行执行,都会在网关处等待,直到每一条具有流程标志的入口顺序流,都有一个执行到达。这是与并行网关的重要区别。换句话说,包容网关只会等待将会被执行的入口顺序流。在合并后,流程穿过合并并行网关继续
任务权限管理
- 持有人(owner):只有一个
- 代理人(ASSIGNEE_): 只有一个(委派)
- 候选人(组):可能多个