public class JumpTask implements Command<Void> {
protected String executionId;
protected ActivityImpl desActivity;
protected Map<String, Object> paramvar;
protected ActivityImpl currentActivity;
//获取默认的流程引擎
protected static ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
// String[] v = { "shareniu1", "shareniu2", "shareniu3", "shareniu4" };
// vars.put("assigneeList", Arrays.asList(v));
map.put("leader", "hty");
map.put("day", "7");
RepositoryService repositoryService = pe.getRepositoryService();
ReadOnlyProcessDefinition processDefinitionEntity = (ReadOnlyProcessDefinition) repositoryService
.getProcessDefinition("StaffLeaveProcess:4:42504");
// 目标节点
ActivityImpl destinationActivity = (ActivityImpl) processDefinitionEntity
.findActivity("usertask4");
String executionId = "45001";
// 当前节点
ActivityImpl currentActivity = (ActivityImpl)processDefinitionEntity
.findActivity("usertask1");
pe.getManagementService().executeCommand(
new JumpTask(executionId, destinationActivity, map,
currentActivity));
}
public Void execute(CommandContext commandContext) {
ExecutionEntityManager executionEntityManager = Context
.getCommandContext().getExecutionEntityManager();
// 获取当前流程的executionId,因为在并发的情况下executionId是唯一的。
ExecutionEntity executionEntity = executionEntityManager
.findExecutionById(executionId);
executionEntity.setVariables(paramvar);
executionEntity.setEventSource(this.currentActivity);
executionEntity.setActivity(this.currentActivity);
// 根据executionId 获取Task
Iterator<TaskEntity> localIterator = Context.getCommandContext()
.getTaskEntityManager()
.findTasksByExecutionId(this.executionId).iterator();
while (localIterator.hasNext()) {
TaskEntity taskEntity = (TaskEntity) localIterator.next();
// 触发任务监听
taskEntity.fireEvent("complete");
// taskEntity.setAssignee("hty");
// 删除任务的原因
Context.getCommandContext().getTaskEntityManager()
.deleteTask(taskEntity, "completed", false);
}
executionEntity.executeActivity(this.desActivity);
return null;
}
/**
* 构造参数 可以根据自己的业务需要添加更多的字段
* @param executionId
* @param desActivity
* @param paramvar
* @param currentActivity
*/
public JumpTask(String executionId, ActivityImpl desActivity,
Map<String, Object> paramvar, ActivityImpl currentActivity) {
this.executionId = executionId;
this.desActivity = desActivity;
this.paramvar = paramvar;
this.currentActivity = currentActivity;
}
来源:oschina
链接:https://my.oschina.net/u/2671514/blog/703932