jbpm中如何取得与登录人员信息相关的所有流程实例,包括完成与未完成的我的代码如下JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();

JbpmContext jbpmContext = jbpmConfiguration.getCurrentJbpmContext();
if(jbpmContext == null || jbpmContext.equals("")){
jbpmContext = jbpmConfiguration.createJbpmContext();
}
List tasks = null;
//List expenses = new ArrayList();


//登陆人员信息
LoginManager loginManager = LoginManager.getInstance();
Person person = loginManager.getPerson();
                                   TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession(); 
//我查API里面说用findPooledTaskInstances这个方法可以得到池中所有的实例(完成与未完成),可是得到的SIZE为0   
//tasks = taskMgmtSession.findPooledTaskInstances(person.getId().toString());
//但用findTaskInstances得到未完成实例SIZE不为0
tasks = jbpmContext.getTaskMgmtSession().findTaskInstances(person.getId().toString());//是代码错误还是 方法错误,求解决方法

  TaskInstance taskInstance = null;
Expense expense = null;
DynaBean bean = null;
expenseList = new ArrayList<DynaBean>();
for(int i=0;i<tasks.size();i++){
taskInstance = (TaskInstance)tasks.get(i);
Long expenseId =(Long)taskInstance.getProcessInstance().getContextInstance().getVariable("expenseID");

jbpmContext.setSessionFactory(HibernateUtil.getSessionFactory());
expense = (Expense)jbpmContext.getSession().get(Expense.class, expenseId);

bean = new LazyDynaBean();
bean.set("id",expense.getId());
 .................. expenseList.add(bean);

}

解决方案 »

  1.   

             TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession(); 
    //我查API里面说用findPooledTaskInstances这个方法可以得到池中所有的实例(完成与未完成),可是得到的SIZE为0   
                        //tasks = taskMgmtSession.findPooledTaskInstances(person.getId().toString());
    //但用findTaskInstances得到未完成实例SIZE不为0
                        tasks = jbpmContext.getTaskMgmtSession().findTaskInstances(person.getId().toString());//是代码错误还是 方法错误,求解决方法
    XML如下<?xml version="1.0" encoding="GBK"?><process-definition name="baoxiaoliucheng">
      <start-state name="kaishi">
        <transition to="shencha" name=""/>
      </start-state>
      <task-node name="shencha">
        <task>
          <assignment actor-id="12474636809068"/>
        </task>
        <transition to="shenpi" name=""/>
      </task-node>
      <task-node name="shenpi">
        <task>
          <assignment actor-id="12474636809063"/>
        </task>
        <transition to="jieshu" name=""/>
      </task-node>
      <end-state name="jieshu"/>
    </process-definition>person.getId() 是可以得到12474636809068的
    可是用这个人登录却得不到相关流程
      

  2.   

    首先你的流程实例要和用户绑定,一个用户可以对应多个流程实例(包括完成和未完成的),这些信息是存储在业务表的,我不太清楚你的业务是怎么设计的至少你应该在你的业务里记录,哪一个流程实例是此用户创建的
    List list = jbpmContext.getGraphSession().findProcessInstances(processDefinitionId);
    (取得对应流程模版的所有完成和未完成的流程实例)