|
发表于 2013-11-28 14:22:44
|
显示全部楼层
本帖最后由 hecr 于 2013-11-28 14:23 编辑
可以在“部门总监”的biz层流转查询后事件中,修改返回的ProcessControl, 如果发现是回退到首环节的模式,则流转到回退的环节, 否则按正常的流程图运行。 代码类似如下:- public static void bizActivity2AfterAdvanceQuery() {
- String rootActivity = "bizActivity1"; //入口环节
- Set<String> items = new HashSet<String>(); //回退后按流程图运行的环节
- items.add("bizActivity1");
- items.add("bizActivity2");
- ActivityInstance startBackAI = getStartBackAI(rootActivity, items);
- if (startBackAI != null){
- modifyProcessControl(startBackAI);
- }
- }
- private static ActivityInstance getStartBackAI(String rootActivity, Set<String> items){
- ActivityInstance ai = ProcessUtils.getCurrentAI();
- while (true){
- ActivityInstance prevAI = ai.getPrevAI(); //当前场景下,只有一个前序
- if (prevAI == null){
- break;
- }
- //当前环节是入口环节,且前序环节不在指定的范围内
- if (ai.getActivityID().equals(rootActivity)
- && prevAI.getTask().getStatus().equals(TaskStatus.RETURNED)
- && !items.contains(prevAI.getActivityID())){
- return prevAI;
- }
- ai = prevAI;
- }
- return null;
- }
- private static void modifyProcessControl(ActivityInstance startBackAI){
- ProcessControl control = new ProcessControl();
- String id = CommonUtils.createGUID();
- RunnableActivity run = new RunnableActivity(startBackAI.getActivityID(), "true", "false", startBackAI.getActivityLabel(), id);
- control.setRunableActivity(run);
- ProcessControlItem item = new ProcessQueryEngine(ProcessUtils.getProcessContext()).createProcessControlItemWithTask(startBackAI.getTask(), TaskStatus.RETURNED, id);
- item.getTask().setCURL(TemplateHelper.getURL(ActionUtils.getRequestContext().getActionContext().getActivity()));
- control.addFlowTo(item);
- ContextHelper.getActionContext().setActionResult(control);
- }
复制代码 其中
String rootActivity = "bizActivity1"; //入口环节
Set<String> items = new HashSet<String>(); //回退后按流程图运行的环节
items.add("bizActivity1");
items.add("bizActivity2");
这两个地方需要改成你自己的环节标识
|
|