📄 testinitjbpm.java
字号:
package com.bjsxt.oa.managers;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Session;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.db.JbpmSession;
import org.jbpm.db.JbpmSessionFactory;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.taskmgmt.exe.TaskInstance;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.bjsxt.oa.model.Document;
import com.xiangfeng.test.HibernateUtil;
public class TestInitJbpm extends HibernateDaoSupport{
static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
public Document create_document(){
Document document= new Document();
//document.setId(299);
document.setWorkflow("订单流程");
document.setDescription("订单48");
Session session = HibernateUtil.getSession();
try {
session.beginTransaction();
session.save(document);
session.getTransaction().commit();
}catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
HibernateUtil.closeSession(session);
}
//System.out.println("id is "+document.getId());
return document;
}
public void begin() {
Document document =create_document();
JbpmContext context = getJbpmContext();
ProcessInstance processInstance=null;
Session session = HibernateUtil.getSession();
context.setSession(session);
try {
session.beginTransaction();
//context.getContextSession().
//根据公文对应的流程名称,获得流程定义对象
ProcessDefinition processDefinition = context.getGraphSession()
.findLatestProcessDefinition("订单流程");
//根据流程定义对象,创建一个流程实例
processInstance = new ProcessInstance(processDefinition);
//将流程实例与公文绑定
processInstance.setKey(""+document.getId());
processInstance.getContextInstance().setVariable("billNO", ""+document.getId());
processInstance.getContextInstance().setVariable("username", "111");
processInstance.getContextInstance().setVariable("documentId",document.getId());
context.save(processInstance);
processInstance.signal();
//Collection collection = processInstance.getTaskMgmtInstance().getTaskInstances();
//因为只有一个任务,所以
//TaskInstance taskInstance = (TaskInstance)collection.iterator().next();
//这个任务实际上是跟李四绑定在一起的
//assertEquals("李四",taskInstance.getActorId());
//李四做完了他的任务,这时候,流程节点应该继续往下流动!
//因为只有一个任务,所以在相应任务的用户已经完成任务的时候,流程将自动往下流动!
//如果有多个任务,必须在所有人都完成的情况下,才能继续往下流动!
//这时候,相当于触发调用了token.signal()方法
//taskInstance.end();
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
HibernateUtil.closeSession(session);
}
}
// 获取JbpmContext对象
private JbpmContext getJbpmContext(){
JbpmContext context = jbpmConfiguration.createJbpmContext();
//关键的一个步骤,我们需要将JBPM使用的session对象跟OA系统所使用的
//session对象整合起来。
//context.setSession(getSession());
return context;
}
public void setJbpmConfiguration(JbpmConfiguration jbpmConfiguration) {
this.jbpmConfiguration = jbpmConfiguration;
}
public void flowToNextStep(int documentId, String transitionName) {
Document document = (Document)getHibernateTemplate().load(Document.class, documentId);
JbpmContext context = getJbpmContext();
//根据流程名称获得流程定义对象
ProcessDefinition processDefinition = context.getGraphSession()
.findLatestProcessDefinition(document.getWorkflow());
//根据流程定义对象以及key值,获得流程实例
ProcessInstance processInstance = context.getProcessInstance(processDefinition, ""+documentId);
if(transitionName == null){
processInstance.signal();
}else{
processInstance.signal(transitionName);
}
//设置公文的状态为当前节点的名称
document.setStatus(processInstance.getRootToken().getNode().getName());
//如果已经是终点,则设置公文为已完成状态
//当流程到达终点
if(processInstance.getRootToken().hasEnded()){
document.setStatus(Document.STATUS_END);
}
getHibernateTemplate().update(document);
}
public List searchCurrentProcessInstances(String username) {
JbpmContext context = getJbpmContext();
List docIds = new ArrayList();
//从工作流引擎中,根据actor-id的值,获得分配给这个actor-id的所有任务!
List taskInstances = context.getTaskMgmtSession().findTaskInstances(username);
for (Iterator iter = taskInstances.iterator(); iter.hasNext();) {
TaskInstance ti = (TaskInstance) iter.next();
//如果这个任务是正在等待被完成的状态
if(ti.isSignalling()){
docIds.add(new Integer(ti.getProcessInstance().getKey()));
}
}
return docIds;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -