activiti 工作流会签 / 多人审批时若一人通过即可

equenceFlow 
流程定义文件leave-formkey.bpmn20.xml:
[html] 
          请假流程演示                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ============================================================================

5.流程启动前传入后续节点办理人;

//下面name2和name3是前台传过来的第二个和第三个节点的办理人

Map variables = new HashMap();        variables.put("leaveId", leaveId);        variables.put("name2", "XXX");//(前台传过来的第二个节点的办理人)        variables.put("name3", "YYY");//(前台传过来的第三个节点的办理人)        // 启动流程        pi = runtimeService.startProcessInstanceByKey("activitiemployeeProcess", variables);

在第一个节点指定第二个节点的监听

public class MyTaksListener2 implements TaskListener {    public void notify(DelegateTask delegateTask) {        Map variables=delegateTask.getVariables();       variables.get("name2");(前台传过来的第二个节点的办理人)        //拆分variables        List assigneeList = new ArrayList();         assigneeList.add("wangba");        delegateTask.setVariable("publicityList",assigneeList);    }}

activiti 工作流会签 / 多人审批时若一人通过即可_第1张图片

在第三个节点指定本节点的办理人监听

public class MyTaksListener3 implements TaskListener {    public void notify(DelegateTask delegateTask) {        Map variables=delegateTask.getVariables();        System.out.println(variables);        variables.get("name3");//        String result=(String) variables.get("name3");(前台传过来的第三个节点的办理人)        String[] empLoyees = {"szx"};        delegateTask.addCandidateUsers(Arrays.asList(empLoyees));    }}

activiti 工作流会签 / 多人审批时若一人通过即可_第2张图片

============================================================================

6、节点设置多个监听

在同一节点设置两个监听,一个是设置本节点的监听,指定办理人;另一个是设置下一个节点的监听,指定会签人。

activiti 工作流会签 / 多人审批时若一人通过即可_第3张图片

设置本节点的监听,指定办理人

public class MyTaksListener3 implements TaskListener {    public void notify(DelegateTask delegateTask) {        Map variables=delegateTask.getVariables();        System.out.println(variables);        String result=(String) variables.get("name3");                String[] empLoyees = {"szx"};        delegateTask.addCandidateUsers(Arrays.asList(empLoyees));    }}

设置下一个节点的监听,指定会签人

public class MyTaksListener4 implements TaskListener {    public void notify(DelegateTask delegateTask) {        Map variables=delegateTask.getVariables();        String result=(String)variables.get("name2");                List assigneeList = new ArrayList();         assigneeList.add("ss");        delegateTask.setVariable("publicityList",assigneeList);    }}

至此,项目中遇到的各(奇)种(葩)问题迎刃而解。“中国式”工作流有时确实很让人头疼,但也体现了中国程序猿的强大。希望看到这里的你也能从中得到启发,尽早解决您在项目当中遇到的问题。

你可能感兴趣的:(activiti)