作者:Eddy  历史版本:1  最后编辑:龚清  更新时间:2024-11-20 15:41

编写版本:v3.5.3
适用版本:所有版本

流程设置-前后置处理器

什么是处理器

  1. 业务对象绑定,不执行。
  2. 处理器是针对流程审批动作的处理逻辑进行增强,支持:同意、反对、驳回、驳回发起人、驳回上一步、弃权、撤回、自定义等审批动作的逻辑增强;
  3. 前置处理器,即在流程审批动作逻辑前执行,代码切入点com.lc.ibps.bpmn.listener.DoNextEventListener.onApplicationEvent(DoNextEvent)com.lc.ibps.bpmn.api.service.BpmDoNextService.before(DoNextModel)
  4. 后置处理器,即在流程审批动作逻辑后执行,代码切入点com.lc.ibps.bpmn.listener.DoNextEventListener.onApplicationEvent(DoNextEvent)com.lc.ibps.bpmn.api.service.BpmDoNextService.after(DoNextModel)
  5. 处理器方法的参数必须为com.lc.ibps.bpmn.api.cmd.ActionCmd对象,如:
     public void save(ActionCmd actionCmd) {
         // 构造领域对象和保存数据
         UrlFormPo po = getData(actionCmd);
         if(BeanUtils.isEmpty(po)) {
             return;
         }
         urlForm.save(po);
     }

处理器如何使用

  1. 在流程设置中填写bean的id以及调用的方法,如:urlFormService.save

这个类必须注入的spring容器中
具体样例请参考: URL表单样例

处理器常用逻辑示例

如何获取业务数据

  1. 如何获取业务数据
    String busData = cmd.getBusData();
  2. 业务数据需要调用时设置到请求参数中,如果是外部url表单方式需要按照前端编写getFormData方法给接口返回表单数据;

如何获取动作类型

  1. 获取方式
     public void save(ActionCmd actionCmd) {
         if(actionCmd instanceof TaskFinishCmd) {
             TaskFinishCmd taskFinishCmd = (TaskFinishCmd)actionCmd;
             // 枚举详见com.lc.ibps.bpmn.api.constant.NodeStatus
             String actionName = taskFinishCmd.getActionName();            
         }
     }
  2. 使用示例,根据动作类型确定如何修改业务数据
     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

  1. 获取方式
    String destination = actionCmd.getDestination();
  2. 使用示例,根据节点确定如何修改业务数据
     public void save(ActionCmd actionCmd) {
         String destination = actionCmd.getDestination();
         if("End_Event_ssgu7".equals(destination)) {
             // 跳转到结束节点该执行什么逻辑
             // 如:将业务数据中的状态改为“审批不通过”
         }
         else if("Activiti_jfsjh&&^".equals(destination)) {
             // 跳转到下一个审批节点该执行什么逻辑
             // 如:将业务数据中的状态改为“审批中”
         }
     }