Camunda流程引擎启动一条流程实例

简介: Camunda完成一条简单的流程实例

上文提到如何部署【发布】一个流程定义,本篇将使用部署成功的流程定义来完成一条简单的流程实例

ResultReturn是自定义的返回值类,有需要的可以私信我获取,返回值改一下,这部分代码与本文无关就不贴出来了】  

创建流程定义

在发起人节点的任务代理人这里设置变量

在经理审批节点也设置一个任务代理人变量

完成后拿到xml内容去项目中替换之前的one.bpmn文件

那么bpmn文件更新后是需要重新部署的【也是我在上一篇博文中不设置参数的原因,为了说明这一步】

注意:如果bpmn文件中的这个id没有改变,则重新部署流程定义后,流程引擎会认为是版本迭代,并取最新版本来发起流程实例    

这个id也就是下文中的processDefinitionKey

相关代码

首先创建一个流程实例服务接口

public interface ProcessInstanceService {
   
public ResultReturn startProcessInstanceByKey(String processDefinitionKey, String businessKey);
}

其实现类:

@Service("processInstanceService")
public class ProcessInstanceServiceImpl implements ProcessInstanceService {
   
@Autowired
   
private RuntimeService runtimeService;
   
@Autowired
   
private IdentityService identityService;
   
@Override
   
public ResultReturn startProcessInstanceByKey(String processDefinitionKey, String businessKey,String initiator) {
           
Map<String,Object> map = new HashMap<>();
         
map.put("userOne","userOne");
         
map.put("userTwo","userTwo");
         
//设置流程发起人
           
identityService.setAuthenticatedUserId("initiator");
           
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey(processDefinitionKey,businessKey,map);
   }
}

流程实例接口类

@RestController
@RequestMapping
("/processInstance")
public class ProcessInstanceController {
   
@Autowired
   
ProcessInstanceService processInstanceService;
   
@PostMapping("/startProcess")
   
public ResultReturn startProcess(String processDefinitionKey,String businessKey,String initiator){
     
returnprocessInstanceService.startProcessInstanceByKey(processDefinitionKey,businessKey,initiator);
   }
}

然后启动项目,重新部署流程定义

然后发起流程:  

然后使用上篇提到的camunda view查看   有我们开启流程时设置的业务ID、流程定义版本号、当前节点的任务处理人

其实完成任务和处理人没关系,处理人的设置是用来查询待办,能看见才有机会完成。

所以接下来写个查询待办服务。首先创建一个任务服务接口

public interface ProcessTaskService {

      public ResultReturn queryMyToDo(String userId);

}

其实现类

@Service
public class ProcessTaskServiceImpl implements ProcessTaskService {

   
@Autowired
   
private TaskService taskService;
   
@Autowired
   
private IdentityService identityService;
   
@Autowired
   
private RuntimeService runtimeService;
   
@Autowired
   
private HistoryService historyService;                                     @Override
public ResultReturn queryMyToDo(String userId) {
   
try {
       
List<Task> tasks = taskService.createTaskQuery().taskAssignee(userId).list();
       
return ResultReturnUtil.success(tasks);
   }
catch(Exception e){
       
e.printStackTrace();
       
throw new ProcessException(ResponseEnums.QUERY_TASK_MY_TO_DO_FAIL.getMsg());
   }
}                                                                                        }

controller

@RestController
@RequestMapping
("/processTask")
public class ProcessTaskController {
   
@Autowired
   
ProcessTaskService processTaskService;                                            @GetMapping("/queryMyToDo")
public ResultReturn queryMyToDo(String userId){
   
return processTaskService.queryMyToDo(userId);
}                                                                                       }

请求后

此时也就可以控制谁可以看见哪些任务,有了待办就需要去完成,再来写一个完成任务的接口

还是在ProcessTaskService 中来写,很简单哈,传一个任务ID即可。

@Override
public ResultReturn taskPass(String taskId) {
   
taskService.complete(taskId);
   
return ResultReturnUtil.success("审批通过");
}

@PostMapping("/taskPass")
public ResultReturn taskPass(String taskId){
 
return processTaskService.taskPass(taskId);
}

在刚刚查询待办的返回数据中就可以获取到TaskId

拿到这个值就可以测试一下审批通过是否可以使用

此时再去看一下,camunda view,说明确实审批通过了

同样的步骤完成【经理审批】节点,也就结束了本条简单的流程。

相关文章
|
SQL XML 存储
Flowable 流程部署与删除
Flowable 流程部署与删除
|
7月前
Activiti 流程发布
Activiti 流程发布
57 0
|
数据库
19activiti - 流程管理定义(启动流程实例)
19activiti - 流程管理定义(启动流程实例)
51 0
|
存储 Java API
流程引擎Activiti流程实例讲解
流程引擎Activiti流程实例讲解
279 0
|
XML SQL Java
玩转 Flowable 流程实例
玩转 Flowable 流程实例
|
数据库
Activiti进阶篇-流程实例
Activiti进阶篇-流程实例
Activiti进阶篇-流程实例
|
Java 数据库连接 API
Activiti-流程操作2
Activiti-流程操作2
Activiti-流程操作2
|
Java API 数据库
Activiti-流程操作
Activiti-流程操作
Activiti-流程操作
flowable 三种方式部署流程
flowable 三种方式部署流程
494 0
|
XML 缓存 Java
项目中工作流部署详细解析!Spring中部署Activiti流程定义的三种姿势
本文对工作流Activiti框架中流程定义的部署进行了详细说明介绍。介绍了工作流Activiti框架中业务流程部署的两种方式,包括编程式部署以及通过Activiti Explorer控制台部署。介绍了流程部署时需要使用到的外部资源,流程定义部署不同的版本生成不同的流程定义的图片。通过这篇文章,基本上对工作流Activiti框架中流程定义的部署就可以很熟练了。
470 0
项目中工作流部署详细解析!Spring中部署Activiti流程定义的三种姿势

热门文章

最新文章