作者:Eddy 历史版本:1 最后编辑:龚清 更新时间:2024-11-20 15:41
编写版本:v3.5.3
适用版本:所有版本
流程设置-前后置处理器
什么是处理器
- 业务对象绑定
无
,不执行。 - 处理器是针对流程审批动作的处理逻辑进行增强,支持:
同意、反对、驳回、驳回发起人、驳回上一步、弃权、撤回、自定义
等审批动作的逻辑增强; - 前置处理器,即在流程审批动作逻辑前执行,代码切入点
com.lc.ibps.bpmn.listener.DoNextEventListener.onApplicationEvent(DoNextEvent)
、com.lc.ibps.bpmn.api.service.BpmDoNextService.before(DoNextModel)
; - 后置处理器,即在流程审批动作逻辑后执行,代码切入点
com.lc.ibps.bpmn.listener.DoNextEventListener.onApplicationEvent(DoNextEvent)
、com.lc.ibps.bpmn.api.service.BpmDoNextService.after(DoNextModel)
; - 处理器方法的参数必须为
com.lc.ibps.bpmn.api.cmd.ActionCmd
对象,如:public void save(ActionCmd actionCmd) { // 构造领域对象和保存数据 UrlFormPo po = getData(actionCmd); if(BeanUtils.isEmpty(po)) { return; } urlForm.save(po); }
处理器如何使用
- 在流程设置中填写bean的id以及调用的方法,如:
urlFormService.save
;
这个类必须注入的spring容器中
具体样例请参考: URL表单样例
处理器常用逻辑示例
如何获取业务数据
- 如何获取业务数据
String busData = cmd.getBusData();
- 业务数据需要调用时设置到请求参数中,如果是外部url表单方式需要按照前端编写getFormData方法给接口返回表单数据;
如何获取动作类型
- 获取方式
public void save(ActionCmd actionCmd) { if(actionCmd instanceof TaskFinishCmd) { TaskFinishCmd taskFinishCmd = (TaskFinishCmd)actionCmd; // 枚举详见com.lc.ibps.bpmn.api.constant.NodeStatus String actionName = taskFinishCmd.getActionName(); } }
- 使用示例,根据动作类型确定如何修改业务数据
public void save(ActionCmd actionCmd) { if(actionCmd instanceof TaskFinishCmd) { TaskFinishCmd taskFinishCmd = (TaskFinishCmd)actionCmd; // 枚举详见com.lc.ibps.bpmn.api.constant.NodeStatus String actionName = taskFinishCmd.getActionName(); if(NodeStatus.AGREE.getKey().equals(actionName)) { // 执行同意动作该执行什么逻辑 // 如:将业务数据中的状态改为“审批中” } else if(NodeStatus.OPPOSE.getKey().equals(actionName)) { // 执行反对动作该执行什么逻辑 // 如:将业务数据中的状态改为“审批不通过” } } }
如何获取选择的下一个节点ID
- 获取方式
String destination = actionCmd.getDestination();
- 使用示例,根据节点确定如何修改业务数据
public void save(ActionCmd actionCmd) { String destination = actionCmd.getDestination(); if("End_Event_ssgu7".equals(destination)) { // 跳转到结束节点该执行什么逻辑 // 如:将业务数据中的状态改为“审批不通过” } else if("Activiti_jfsjh&&^".equals(destination)) { // 跳转到下一个审批节点该执行什么逻辑 // 如:将业务数据中的状态改为“审批中” } }