package com.sxito.jbpm;
import java.util.Iterator;
import java.util.List;
import junit.framework.TestCase;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.taskmgmt.exe.TaskInstance;
public class Jbpm_07_NextNode extends TestCase {
//获取jbpm配置
static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
//某用户审批公文并继续向下流转
public void testNextNode(){
//创建jbpm上下文对象
JbpmContext context = jbpmConfiguration.createJbpmContext();
try{
int documentId = 1;
nextNode(context,"张三",documentId);//某用户审批某个公文
// nextNode(context,"李四",documentId);
// nextNode(context,"王五",documentId);
// nextNode(context,"赵六",documentId);
}catch(Exception e){
e.printStackTrace();
context.setRollbackOnly();
}finally{
context.close();
}
}
/**
*
* @param context
* @param actorId
* @param documentId
*
* 根据用户找到他的所有任务实例(TaskInstance)对象
* 遍历任务实例(TaskInstance)对象找到与该任务实例(TaskInstance)对应的流程实例(ProcessInstance)对象
* 并获得该流程实例(ProcessInstance)对象相关的公文id(documentId)
* 如果该公文就是要提交的公文即提交
*/
private void nextNode(JbpmContext context,String actorId,int documentId){
@SuppressWarnings("unchecked")
List<TaskInstance> task = context.getTaskMgmtSession().findTaskInstances(actorId);
for (Iterator<TaskInstance> iterator = task.iterator(); iterator.hasNext();) {
TaskInstance t1 = (TaskInstance) iterator.next();
Integer docId = (Integer) t1.getProcessInstance().getContextInstance().getVariable("documentId");
if(docId.equals(documentId)){
// 缺省情况下调用end()方法有两个目的:
// 1.结束TaskInstace对象
// 2.调用token对象的signal()方法
// 如果有多条离开的线他会随机选取一条
t1.end();
}
Document doc = (Document)context.getSession().load(Document.class, docId);
System.err.println("公文【"+doc.getTitle()+"】已被【"+actorId+"】审批完毕,现在继续往下流转");
}
}
}