请不要骂我,我在别人的基础上改的,但是可以跑通的。
完成子任务:
public void signal(ActivityExecution activityExecution, String signalName,
Map<String, ?> parms) throws Exception {
ExecutionImpl executionImpl = (ExecutionImpl) activityExecution;
Object obj = executionImpl.getVariable("finalResult") ;
if(obj == null || "".equals(obj))
{
executionImpl.setVariable("finalResult", true) ;
}
boolean finalResult = (Boolean) executionImpl.getVariable("finalResult") ;
boolean temp = (Boolean)executionImpl.getVariable("tempResult") ;
executionImpl.setVariable("finalResult", finalResult & temp) ;
ProcessInstance pi = (ProcessInstance) executionImpl
.getProcessInstance();
TaskService taskService = Configuration.getProcessEngine()
.getTaskService();
Activity activity = executionImpl.getActivity();
List<Task> tasks = taskService.createTaskQuery().processInstanceId(
pi.getId()).list();
List<Task> subTask_list = taskService.getSubTasks(tasks.get(0).getId());
Iterator<Task> iter = subTask_list.iterator();
while (iter.hasNext()) {
Task subtask = iter.next();
if (parms.get("username").equals(subtask.getAssignee())) {
taskService.completeTask(subtask.getId());
}
}
if (subTask_list == null || subTask_list.size() == 1) {
Transition transition = null;
Transition transition1 = null;
Transition transition2 = null;
if ((signalName == null)
|| ((Task.STATE_COMPLETED.equals(signalName))
&& (activity.getOutgoingTransitions() != null) && (activity
.getOutgoingTransitions().size() == 1))) {
transition1 = activity.getOutgoingTransitions().get(0);
transition2 = activity.getOutgoingTransitions().get(1);
} else {
// 审批完成的情况
transition1 = activity.findOutgoingTransition(signalName);
}
// 判断走那一条路径
finalResult = (Boolean) executionImpl.getVariable("finalResult") ;
if(finalResult)
{
transition = transition1.getName().equals("归档") ? transition1 : transition2 ;
}
else
{
transition = transition1.getName().equals("审稿") ? transition1 : transition2 ;
}
// -----------------------------------------------------
executionImpl.setHistoryActivityInstanceDbid(executionImpl.getHistoryActivityInstanceDbid()-1);
DbSession dbsession = EnvironmentImpl.getFromCurrent(DbSession.class);
dbsession.update(executionImpl) ;
dbsession.flush() ;
// -----------------------------------------------------
taskService.completeTask(tasks.get(0).getId());
executionImpl.take(transition);
} else {
executionImpl.waitForSignal();
}
}
完成子任务:
public void signal(ActivityExecution activityExecution, String signalName,
Map<String, ?> parms) throws Exception {
ExecutionImpl executionImpl = (ExecutionImpl) activityExecution;
Object obj = executionImpl.getVariable("finalResult") ;
if(obj == null || "".equals(obj))
{
executionImpl.setVariable("finalResult", true) ;
}
boolean finalResult = (Boolean) executionImpl.getVariable("finalResult") ;
boolean temp = (Boolean)executionImpl.getVariable("tempResult") ;
executionImpl.setVariable("finalResult", finalResult & temp) ;
ProcessInstance pi = (ProcessInstance) executionImpl
.getProcessInstance();
TaskService taskService = Configuration.getProcessEngine()
.getTaskService();
Activity activity = executionImpl.getActivity();
List<Task> tasks = taskService.createTaskQuery().processInstanceId(
pi.getId()).list();
List<Task> subTask_list = taskService.getSubTasks(tasks.get(0).getId());
Iterator<Task> iter = subTask_list.iterator();
while (iter.hasNext()) {
Task subtask = iter.next();
if (parms.get("username").equals(subtask.getAssignee())) {
taskService.completeTask(subtask.getId());
}
}
if (subTask_list == null || subTask_list.size() == 1) {
Transition transition = null;
Transition transition1 = null;
Transition transition2 = null;
if ((signalName == null)
|| ((Task.STATE_COMPLETED.equals(signalName))
&& (activity.getOutgoingTransitions() != null) && (activity
.getOutgoingTransitions().size() == 1))) {
transition1 = activity.getOutgoingTransitions().get(0);
transition2 = activity.getOutgoingTransitions().get(1);
} else {
// 审批完成的情况
transition1 = activity.findOutgoingTransition(signalName);
}
// 判断走那一条路径
finalResult = (Boolean) executionImpl.getVariable("finalResult") ;
if(finalResult)
{
transition = transition1.getName().equals("归档") ? transition1 : transition2 ;
}
else
{
transition = transition1.getName().equals("审稿") ? transition1 : transition2 ;
}
// -----------------------------------------------------
executionImpl.setHistoryActivityInstanceDbid(executionImpl.getHistoryActivityInstanceDbid()-1);
DbSession dbsession = EnvironmentImpl.getFromCurrent(DbSession.class);
dbsession.update(executionImpl) ;
dbsession.flush() ;
// -----------------------------------------------------
taskService.completeTask(tasks.get(0).getId());
executionImpl.take(transition);
} else {
executionImpl.waitForSignal();
}
}