activiti 中国式自由流任意节点的跳转
工作流目前只能支持按照预先设置好的线,判断线的预制条件才能按照模板进行跳转 。假设一个场景 a提交到 b b提交到c c提交到d d在一直提交下去。 但是退回如何控制呢。假如d-a一直退回。貌似要画很多的线进去,线上配置条件。这样流程才能运转下去。
在这里我们不想去画线,但是还期望流程能在制定的模板节点中运行。所以这个场景就是中国式流程。目前版本是5.14
1.实现的代码如如下:
import java.util.Map;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.task.Comment;
public class JumpTaskCmd implements Command<Comment> {
//完成
public static String EVENTNAME_COMPLETE="jump";
//退回
public static String EVENTNAME_TO_REVOKED="revoked";
//撤销
public static String EVENTNAME_TO_BE_RETURNED="returned";
protected String executionId;
protected ActivityImpl desActivity;
protected Map<String,Object> paramvar;
protected ActivityImpl currentActivity;
protected String JumpTaskReason;
public JumpTaskCmd(String executionId, ActivityImpl desActivity,Map<String,Object> paramvar,ActivityImpl currentActivity,String JumpTaskReason) {
super();
this.executionId = executionId;
this.desActivity = desActivity;
this.paramvar = paramvar;
this.currentActivity = currentActivity;
this.JumpTaskReason=JumpTaskReason;
}
@Override
public Comment execute(CommandContext commandContext) {
ExecutionEntity executionEntity = Context.getCommandContext()
.getExecutionEntityManager().findExecutionById(executionId);
executionEntity.setVariables(paramvar);
executionEntity.setEventSource(currentActivity);
executionEntity.setActivity(currentActivity);
for (TaskEntity taskEntity : Context.getCommandContext()
.getTaskEntityManager().findTasksByExecutionId(executionId)) {
taskEntity.fireEvent(TaskListener.EVENTNAME_COMPLETE);
Context.getCommandContext().getTaskEntityManager()
.deleteTask(taskEntity, JumpTaskReason, false);
}
executionEntity.executeActivity(desActivity);
return null;
}
}
2、程序控制
TaskServiceImpl taskServiceImpl = (TaskServiceImpl) processEngine
.getTaskService();
CommandExecutor commandExecutor = taskServiceImpl
.getCommandExecutor();
commandExecutor.execute(new JumpTaskCmd(task.getExecutionId(),
destinationActivity, param, currentActivity, jumpReason));