Activiti5.22 创建全局的连线监听器

Activiti5.22 创建全局的连线监听器

有时候我们想在连线处处理一些逻辑,比如在连线处设置任务的办理入参数

如果我们的流程图非常复杂,那么我们可以按照如下的方法进行处理

1,重写SequenceFlowParseHandler类的executeParse方法;

2,拿到transitionImpl为其设置监听

3,重新注入这个类即可

完整的参考代码如下

public class ConfigPersionFlowListener extends SequenceFlowParseHandler {
    @Override
    protected void executeParse(BpmnParse bpmnParse, SequenceFlow sequenceFlow) {
        ScopeImpl scope = bpmnParse.getCurrentScope();
        ActivityImpl sourceActivity = scope.findActivity(sequenceFlow.getSourceRef());
        ActivityImpl destinationActivity = scope.findActivity(sequenceFlow.getTargetRef());
        if(destinationActivity.getId().indexOf("usertask3")>=0||destinationActivity.getId().indexOf("usertask1")>=0) {
            TransitionImpl transitionImpl = sourceActivity.createOutgoingTransition(sequenceFlow.getId());
            bpmnParse.getSequenceFlows().put(sequenceFlow.getId(), transitionImpl);
            
            transitionImpl.setProperty("name",sequenceFlow.getName());
            transitionImpl.setProperty("documentation",sequenceFlow.getName());
            transitionImpl.setDestination(destinationActivity);
            
            ExecutionListener executionListeners = new ExecutionListener() {
                
                /**
                 * @Fields serialVersionUID : TODO(用一句话描述这个变量表示什么)
                 */
                private static final long serialVersionUID = 1L;
    
                @Override
                public void notify(DelegateExecution execution) throws Exception {
                    Map<String, String>  map = new HashMap<String, String>();
                    map.put("uname", "likilone");
                    map.put("uname2", "heyou");execution.setVariables(map);
                    System.out.println(execution.getVariables().get("ppp"));
                    System.out.println(execution.getVariables().get("ppp1"));
                }
            };
            List<ExecutionListener> list = new ArrayList<ExecutionListener>();
            list.add(executionListeners);
            transitionImpl.setExecutionListeners(list);
            createExecutionListenersOnTransition(bpmnParse, sequenceFlow.getExecutionListeners(), transitionImpl);
        }else {
            super.executeParse(bpmnParse, sequenceFlow);
        }
    }

以上代码为我测试代码,大家可自行测试

最后我们在配置文件里面注入这个类即可


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img