创建公文 并把公文与流程定义文件相互绑定
首先创建公文类文件
package com.sxito.jbpm;
public class Document {
private int id;
private String title;
private String context;
private long processInstanceId;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
public long getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(long processInstanceId) {
this.processInstanceId = processInstanceId;
}
}
配置Document.hbm.xml文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.sxito.jbpm.Document" table="_document">
<id name="id" >
<generator class="native"></generator>
</id>
<property name="title" />
<property name="context" />
<property name="processInstanceId" />
</class>
</hibernate-mapping>
在hibernate.cfg.xml文件中最后一个<property>标签后加入以下代码
<!-- mapping 要放在property后面 不能放在前面 -->
<mapping resource="com/sxito/jbpm/Document.hbm.xml"/>
然后创建公文
package com.sxito.jbpm;
import java.util.Random;
import junit.framework.TestCase;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
public class Jbpm_03_CreateDocument extends TestCase {
//获取jbpm配置
static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
/**
* 创建公文
* 通过jbpmConfiguration得到JbpmComtext
* 创建新公文 并保存
* 通过流程定义名称取到流程定义对象
* 根据流程定义对象创建新的流程实例 保存流程实例
* 把流程实例编号绑定在公文上
* 把公文Id绑定到流程实例中去
* 把日期放到流程实例里去
*/
public void testCreateDocument(){
//创建jbpm上下文对象
JbpmContext context = jbpmConfiguration.createJbpmContext();
try{
//创建公文对象
Document doc = new Document();
doc.setTitle("测试公文"+new Random().nextInt(999));
//保存公文
context.getSession().save(doc);
//创建流程实例对象
//1.首先从数据库中根据流程定义对象名称 加载ProcessDeinition对象
ProcessDefinition def = context.getGraphSession().findLatestProcessDefinition("test05");
//2.根据流程定义对象创建新的流程实例
ProcessInstance instance = new ProcessInstance(def);
//保存流程实例
context.save(instance);
//互相绑定
//把流程实例编号绑定到公文上
doc.setProcessInstanceId(instance.getId());
//把文档编号绑定到流程实例上
instance.getContextInstance().setVariable("documentId",doc.getId());
//将days变量放到流程实例里面
instance.getContextInstance().setVariable("days", 2);
System.err.println("新创建的公文Id为【"+doc.getId()+"】公文名称为【"+doc.getTitle()+"】");
}catch(Exception e){
e.printStackTrace();
// 如果部署不成功则回滚
context.setRollbackOnly();
// System.err.println("exception!!!");
}finally{
context.close();
}
}
}