流程顺序的执行规则中可以设置多个人按照顺序的默认是执行即从环节1流转到环节2,选择了A、B、C三个人
默认3个人默认的待办任务生成顺序是先生成A的,A流转后生成B的,B流转后再生成C的
但是在环节1设置通知规则,在流转时给A、B、C三个人发通知时,默认3个人是同时收到任务的,如果需要收到通知的顺序跟收到任务的顺序一样,就不能通过设置通知规则实现
需要在环节1的onAfterAdvance事件中给A手动发通知,在环节2的onAfterAdvance事件中通过判断给B或C发通知,具体实现如下:
public static void businessActivity1AfterAdvance() { ProcessControl flowControl = (ProcessControl) ContextHelper.getActionContext().getParameter("control"); for (ProcessControlItem to : flowControl.getFlowTos()) { OrgUnit ect = to.getExecutors().get(0);//获取顺序执行选择的执行者中的第一个人 String executorFid = ect.getFID(); String executorFname = ect.getFName(); String sData1 = ProcessUtils.getProcessData1(); // 给第一个人发通知 sendNotice(executorFid, executorFname, sData1); } } public static void businessActivity2AfterAdvance() { //获取获取流程上下文中的当前环节实例的任务中的执行者任务 List<Task> tasks = com.justep.system.process.ProcessUtils.getAI().getTask().getExecutorTasks(); for (Task task : tasks) { //判断任务状态为tesExecuting的,获取其执行者信息 if (task.getStatus().equals("tesExecuting")) { String executorFid = task.getExecutorFID(); String executorFname = task.getExecutorFName(); String sData1 = ProcessUtils.getProcessData1(); //给任务状态为tesExecuting的任务执行者发通知 sendNotice(executorFid, executorFname, sData1); } } } //手动发通知 public static void sendNotice(String fid, String fname, String sData1) { List<OrgUnit> ls = new ArrayList<OrgUnit>(); OrgUnit unit = new OrgUnit(fid, fname); ls.add(unit); //设置通知为打开时抢占、打开后自动结束 Map<String, Object> varMap = new HashMap<String, Object>(); varMap.put("sExecuteMode2", com.justep.system.process.TaskExecuteMode2.FINISH_WHEN_OPEN); varMap.put("sPreemptMode", com.justep.system.process.TaskPreemptMode.OPEN); // // 创建通知,执行保存方法,即发送通知 Task t = TaskHelper.createNotice("按顺序发通知:活动环节1", "/appdemo/test/process/SequentialFlow/sequentialFlowProcess", "businessActivity1", "/appdemo/test/process/SequentialFlow/businessActivity1.a", "/appdemo/test/process/SequentialFlow/businessActivity1.a", sData1, ls.get(0), varMap); t.save(); }
评一波