package com.vci.server.workflow.server.event; import java.sql.Connection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jbpm.api.Configuration; import org.jbpm.api.Execution; import org.jbpm.api.ProcessEngine; import org.jbpm.api.TaskService; import org.jbpm.api.cmd.Environment; import org.jbpm.api.model.OpenExecution; import org.jbpm.api.task.Assignable; import org.jbpm.api.task.AssignmentHandler; import org.jbpm.api.task.Participation; import org.jbpm.api.task.Task; import org.jbpm.jpdl.internal.activity.TaskActivity; import org.jbpm.pvm.internal.env.EnvironmentImpl; import org.jbpm.pvm.internal.history.HistoryEvent; import org.jbpm.pvm.internal.history.events.TaskActivityStart; import org.jbpm.pvm.internal.history.model.HistoryTaskImpl; import org.jbpm.pvm.internal.model.ActivityImpl; import org.jbpm.pvm.internal.model.ExecutionImpl; import org.jbpm.pvm.internal.session.DbSession; import org.jbpm.pvm.internal.task.OpenTask; import org.jbpm.pvm.internal.task.TaskImpl; import org.jbpm.pvm.internal.util.Clock; import com.vci.server.base.persistence.dao.HibernateTemplate; import com.vci.server.workflow.server.template.ProcessTemplateService; public class AssignTaskForWuYuan implements AssignmentHandler{ private static final long serialVersionUID = 1L; List participants; ProcessEngine processEngine=Configuration.getProcessEngine(); TaskService taskService=processEngine.getTaskService(); @SuppressWarnings("unchecked") public void assign(Assignable assignable, OpenExecution execution) throws Exception { Connection cn = new HibernateTemplate().getSessionConnection(); String activityName = ((ExecutionImpl)execution).getActivityName(); String pid = execution.getProcessInstance().getId(); List taskList = this.taskService.createTaskQuery().processInstanceId(pid).activityName(activityName).list(); Task task = null; for (int i = 0; i < taskList.size(); i++) { task = (Task)taskList.get(i); if (task.getActivityName().equals(activityName)) { break; } } this.participants = ((List)this.taskService.getVariable(task.getId(), "participants")); int i = 1; if (this.participants != null) { for (String participant : this.participants) { Task subTask = ((OpenTask)task).createSubTask(); subTask.setName(task.getActivityName() + "-处理" + i); subTask.setPriority(1); subTask.setAssignee(participant); this.taskService.addTaskParticipatingUser(task.getId(), participant, Participation.CLIENT); i++; } cn.commit(); } } }