jbpm4任务列表分页显示【转】

关键时刻发现我并不会,于是下定决心研究一下,发现jbpm4还是有些不尽人意,比如历史变量的保存问题就很让人郁闷。

获得jbpm4 hibernate session

/***@author yhy
* 获得JBPM session
* @return Session:hibernate Session
*/
public Session getTaskSession(){
   EnvironmentFactory environmentFactory = (EnvironmentFactory)
      getProcessEngine();
   Environment environment = environmentFactory.openEnvironment();
   Session session = null;
   try{     
    session = environment.get(Session.class);
   }catch(Exception e){
    e.printStackTrace();
   }

   return session;
}

 

创建query()
/**
* 创建query查询
* @param hql hql查询语句
* @return Query query查询器
*/
public Query creatQuery(String hql){
        return getTaskSession().createQuery(hql);
}

分页查询
/**
* 分页查询
* @param sql hql sql
* @param pageSize 每页显示的数量
* @param ipage 页码
* @param parameterMap 参数map
* @return List 结果
*/
public List pageQuery(String sql, int pageSize,int ipage,Map<String, Object> parameterMap){
   Query query = creatQuery(sql);
   int startResult = (ipage -1)*pageSize + 1;
  
   if (pageSize > 0 && startResult > 0) {
            query.setFirstResult(startResult);
            query.setMaxResults(pageSize);
        }
  
   //设置hql查询参数
   parameterMap = parameterMap == null ? new HashMap<String, Object>() : parameterMap;
        for (String key : parameterMap.keySet()) {
            if (key != null && !"".equals(key)) {
                Object value = parameterMap.get(key);
                if (value != null) {
                    query.setParameter(key, value);
                }
            }
        }
        //返回结果
        return query.list();
}

统计方法
/**
* 普通HQL统计查询
* @param sql 统计HQL
* @param parameterMap 参数map
* @return int 统计数
*/
@SuppressWarnings("unchecked")
public int query(String countSql, Map<String, Object> parameterMap){
   Query query = creatQuery(countSql);
   parameterMap = parameterMap == null ? new HashMap<String, Object>() : parameterMap;
        for (String key : parameterMap.keySet()) {      //进行迭代
            if (key != null && !"".equals(key)) {
                Object value = parameterMap.get(key);
                if (value != null) {
                    query.setParameter(key, value);     //加入查询条件
                }
            }
        }
   List list = query.list();
  
   return ((Long) list.get(0)).intValue();
}


查询方法
/**
* 任务查询
* @return FindResult 查询结果
*/
public FindResult queryTask(int ipage,Map<String, String> formMap){
   List result = new ArrayList();
   String taskName = formMap.get("taskName");
  
   Integer userId = (Integer) WebUtils.getAttribute("userId");
   if(userId == null){
    logger.info("[session已过期或者没有登录!请重新登录再试!]");
    return new FindResult();
   }
   Map<String, Object> paramsMap = new HashMap();
   paramsMap.put("userId", userId.toString());
  
        String sql = "from org.jbpm.pvm.internal.task.ParticipationImpl t where t.userId = :userId";
        String countsql = "select count(t.dbid) from org.jbpm.pvm.internal.task.ParticipationImpl t where t.userId = :userId";
       
        if(StringUtils.isNotBlank(taskName)){
        sql = sql + " and t.task.name = :taskName";
        countsql = countsql + " and t.task.name = :taskName";
        paramsMap.put("taskName", taskName);
        }
        int rowCount = JbpmUtils.query(countsql, paramsMap);
   List<ParticipationImpl> list = JbpmUtils.pageQuery(sql, QcConstant.PAGE_SIZE, ipage, paramsMap);
  
   for(ParticipationImpl task : list){
    String exerciser = (String) task.getTask().getVariable("users");
    Map map = new HashMap();
    map.put("任务ID", task.getTask().getId());
    map.put("任务名称", task.getTask().getName());
    map.put("创建时间", task.getTask().getCreateTime());
    map.put("执行人", exerciser.substring(exerciser.indexOf(",")+1));
    map.put("form", task.getTask().getFormResourceName());
    map.put("recordingId", JbpmUtils.getTaskService().getVariable(task.getTask().getId(), "recordingId"));
    result.add(map);
   }
  
   FindResult findResult = new FindResult();
   findResult.setResult(result);
   findResult.setRowCount(rowCount);
   findResult.setPageCount(getPageNum(rowCount));
  
   return findResult;
}

FindResult的代码如下:

public class FindResult<T> {

/**
* 总页数
*/
private int pageCount;

/**
* 总行数
*/
private int rowCount;

/**
* 结果集
*/
private List<T> result;

public int getPageCount() {
   if (result == null)
    pageCount = 0;
   return pageCount;
}

public void setPageCount(int pageCount) {
   this.pageCount = pageCount;
}

public List<T> getResult() {
   if (result == null)
    result = new java.util.ArrayList<T>();
   return result;
}

public void setResult(List<T> result) {
   this.result = result;
}

public int getRowCount() {
   if (result == null)
    rowCount = 0;
   return rowCount;
}

public void setRowCount(int rowCount) {
   this.rowCount = rowCount;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值