jbpm使用

流程定义文件
test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition name="新流程">
<start-state name="开始">
<transition name="找王八" to="王八审批"></transition>
</start-state>
<task-node name="王八审批">
<task name="审1">
<assignment actor-id="王八"/>
</task>
<transition name="找赵明" to="赵明审批"></transition>
</task-node>
<task-node name="赵明审批">
<task name="审2">
<assignment actor-id="赵明"/>
</task>
<transition name="找总经理" to="总经理审批"></transition>
</task-node>
<task-node name="总经理审批">
<task name="审3">
<assignment actor-id="总经理"/>
</task>
<transition name="批完" to="结束"></transition>
</task-node>
<end-state name="结束"></end-state>
</process-definition>

使用:

//创建数据库
JbpmConfiguration.getInstance().createSchema();

//读取流程定义文件,创建processdefinition对象
ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("test.xml");
//context对象类似于hibernate session对象的功能
//创建jbpmContext对象
JbpmContext context = jbpmConfiguration.createJbpmContext();
try{
//部署流程到数据库
context.deployProcessDefinition(processDefinition);
}finally{
//context对象需要关闭
context.close();
}


创建文档:
Session session = HibernateUtils.getSession();
try{
session.beginTransaction();
Document doc = new Document();
doc.setTitle("测试gjs");
doc.setContent("测试gjs的内容");
doc.setCreator("gjs");
session.save(doc);
session.getTransaction().commit();
}catch(Exception e){
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}


绑定流程与文档
		JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());

//从数据库中加载ProcessDefinition对象
ProcessDefinition definition = context.getGraphSession().findLatestProcessDefinition("新流程");//流程文件根元素name值
//从流程中创建一个流程实例
ProcessInstance processInstance = new ProcessInstance(definition);

//存储流程实例
context.save(processInstance);

//加载公文
Document doc = (Document)context.getSession().load(Document.class, 1);

//绑定流程实例到公文
doc.setProcessIntanceId(processInstance.getId());

//绑定公文到流程实例(ContextInstance相当于一个变量的容器)
processInstance.getContextInstance().createVariable("document", doc.getId());

context.close();


使流程到下一步:
		JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());

Document doc = (Document)context.getSession().load(Document.class, 1);

ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());
//触发流程实例走向下一步
processInstance.getRootToken().signal();

context.close();


获取当前结点:

		JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
Document doc = (Document)context.getSession().load(Document.class, 1);
ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());
//当前节点?
System.err.println(processInstance.getRootToken().getNode().getName());
context.close();


查询特定对象拥有的文档:
		JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
List tasks = context.getTaskMgmtSession().findTaskInstances("王八");
System.err.println("王八的文档有:");
for (Iterator iter = tasks.iterator(); iter.hasNext();) {
TaskInstance taskInstance = (TaskInstance) iter.next();
Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
System.err.println(docId);
}
context.close();

审批提交所有:
		JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
List tasks = context.getTaskMgmtSession().findTaskInstances("总经理");
System.err.println("总经理的文档有:");
for (Iterator iter = tasks.iterator(); iter.hasNext();) {
TaskInstance taskInstance = (TaskInstance) iter.next();
Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
System.err.println(docId);
}
//依次对张三的公文进行提交
for (Iterator iter = tasks.iterator(); iter.hasNext();) {
TaskInstance taskInstance = (TaskInstance) iter.next();
//张三已经审批结束,继续提交,这将触发流程继续向下流动!
taskInstance.end();
Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
System.err.println(docId+"已被审批完成");
}
context.close();
}


测试流程是否结果:
		JbpmContext context = jbpmConfiguration.createJbpmContext();
context.setSessionFactory(HibernateUtils.getSessionFactory());
Document doc = (Document)context.getSession().load(Document.class, 1);
ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());
System.err.println("流程已结束? - "+processInstance.hasEnded());
context.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值