⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testinitjbpm.java

📁 这是一个jbpm的高级应用,是一个oa工作流的系统,里面用到了spring,hibernate技术等.实为学习jbpm的好资料!
💻 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 + -