Activiti5.2 自动完成第一节点流程

本文介绍了一种自动审批工作流的方法,即在员工提交流程后自动触发后续审批步骤,避免自我审批的情况。通过设置流程变量和比较任务ID实现了流程的自动流转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习工作流时遇到这么一种情况,就是员工在提交流程时,应该直接跳到下一级进行审批。但目前却停留在第一节点,还得自己审批一下自己的流程,才可以进入到下一节点。如下图:

员工提交完流程之后,比如请假流程,应该直接到项目经理审批环节,不应该停留在“员工提交”环节中。先说一下解决思路。

1、在画流程图时,设置办理人(Assignee)变量,假设为userName,如图1;

2、在员工提交流程时,设置变量,将userName的值设置为当前用户,然后在启动时将变量加入到启动参数中,如图2:

3、查询当前用户的代办任务,将任务的流程ID与刚刚启动的流程ID进行比较,若相等,说明是刚刚启动的任务,通过即可。

图1

接下来,在提交流程的代码块里完成自己的待办事项。

public Boolean saveStartProcess(Integer leaveId) {
		// 这两行代码是请假数据,和工作流组件没有直接关系。
		LeaveBill leaveBill = leaveBillMapper.selectById(leaveId);
		leaveBill.setState(TaskStatusEnum.CHECK.getStatus());

		String key = leaveBill.getClass().getSimpleName();
		String businessKey = key + "_" + leaveBill.getLeaveId();

		// 将当前用户设置办理人,注意,这个userName是画流程图的时候的变量。
		Map<String, Object> variables = new HashMap<>(1);
		variables.put("userName", "当前用户名(自己想办法)");

		// 启动流程,此时,已有相应的任务了。
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKeyAndTenantId(key, businessKey,variables,
				String.valueOf(TenantContextHolder.getTenantId()));

		// 查询自己所有的待办任务,若上一步启动的流程ID与查询到的流程ID匹配,说明是自己提交的流程,通过即可
		Task task = null;
		TaskQuery taskQuery = taskService.createTaskQuery().taskCandidateOrAssigned("当前用户名(自己想办法)").active();
		List<Task> todoList = taskQuery.list();
		for(Task tmp : todoList){
			if(tmp.getProcessInstanceId().equals(processInstance.getId())){
				task = tmp;
				break;
			}
		}
		taskService.complete(task.getId());

		leaveBillMapper.updateById(leaveBill);
		return Boolean.TRUE;
	}

好啦,就这样吧。大致逻辑就是员工自己提交的流程,自己给自己审批了一下。

有不了解的,可以随时提问,我也是刚学习,大家一起交流。

我是来自北京天码科技的卢泽

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值