关键时刻发现我并不会,于是下定决心研究一下,发现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;
}
}
分享到:
相关推荐
jbpm4.3表结构和表字段说明文档通常会详细介绍jbpm4中涉及的数据库表,包括实体如任务实例(TaskInstance)、流程实例(ProcessInstance)、工作项(WorkItem)等的表结构和字段。这些信息对于开发者来说至关重要,...
7. **Web界面**:"jbpm4web"可能是指jbpm4的Web应用程序部分,用于用户交互,提交任务,查看待办事项等。这部分可能包含前端页面和后端控制器,通过HTTP与工作流引擎通信。 在下载的压缩包中,"jbpm4web"可能包括...
jbpm4的核心功能包括流程定义、流程执行、任务管理、事件处理和监控等。流程定义是通过Business Process Definition Language (BPMN) 2.0标准来完成的,这使得流程图具有高度的可读性和可维护性。流程执行服务则负责...
每个任务都是流程中的一环,待办任务列表显示了当前用户需要处理的所有未完成的工作。这些任务可能是由其他用户分配过来的,或者是流程自动分配的。通过查看待办任务,用户可以清晰地了解自己的工作职责,按照优先级...
jBPM4作为该系列的一个版本,提供了一套完整的流程管理和执行框架,允许开发者构建灵活的工作流应用,以实现业务流程自动化。本指南由胡奇编写,旨在为开发者提供一个全面的参考,帮助他们快速学习和掌握使用jBPM4...
jbpm4web提供了一个用户友好的任务列表,让用户能够查看并处理待办任务。参与者可以完成任务、分配任务给其他人,或者对任务进行评论和附件上传等操作。 4. **流程控制**: 在jbpm4web中,用户还可以进行流程控制...
JBPM4作为其一个版本,具有丰富的功能及特性,尤其在流程管理和任务分配方面表现突出。下面将详细介绍JBPM4中各个表的作用及相关字段说明。 #### 1. **JBPM4_DEPLOYMENT** - 流程定义表 - **描述**: 此表用于存储...
- **JBPM4_JOB**:定时任务表。 - **JBPM4_LOB**:存储大对象数据。 - **JBPM4_PARTICIPATION**:参与者表。 - **JBPM4_SWIMLANE**:泳道表,用于表示流程中的并行处理。 - **JBPM4_TASK**:任务表。 - **JBPM4_...
jBPM4的核心特性包括流程建模、流程实例管理、任务服务、规则引擎等。通过使用jBPM4,开发者可以定义复杂的业务流程,并且能够灵活地进行流程更改和监控。 文档教程将引导你完成以下几个关键步骤: 1. **环境搭建*...
3. **示例代码(.java)**:展示如何使用jbpm4 API来启动流程实例、查询任务、完成任务等操作。 4. **数据库脚本(.sql)**:用于创建jbpm4所需的数据库表结构。 5. **配置文件(如jbpm.cfg.xml)**:定义jbpm4的...
【jBPM4学习总结】 jBPM,全称为Java Business Process Management,是一个开源的、灵活且可扩展的业务流程管理框架,涵盖了业务流程管理、工作流和服务协作等多个领域。自2004年10月加入JBoss组织后,jBPM逐渐成为...
**jbPM4工作流示例jbpmDemo**是一款基于jBPM4的工作流管理系统实例,旨在帮助用户深入了解和掌握jBPM4工作流引擎的使用方法。jBPM4是一款强大的开源工作流管理系统,它提供了流程建模、执行以及监控等功能,广泛应用...
jBPM 4包含一个内置的任务服务,用于管理流程中的任务分配和完成。任务可以分配给特定的用户或角色,通过工作台或自定义接口进行处理。此外,任务服务提供了监听器和工作流事件处理机制,便于扩展和定制。 ### 6. ...
1. **流程定义(Process Definition)**: 在JBPM4中,业务流程以BPMN2(Business Process Model and Notation 2.0)的XML文件形式进行定义,包含了流程图中的各个节点和连接线,如任务(Task)、事件(Event)、网关...
3. **任务管理**:jbpm4提供任务服务,允许用户领取、完成任务,以及对任务进行查询和管理,支持自定义任务表单和工作流审批规则。 4. **规则引擎**:jbpm4集成了Red Hat的JBoss Drools规则引擎,使得流程决策可以...
jbpm4的任务服务管理流程中的任务实例,包括任务的创建、分配、领取、完成等操作。任务可以分配给特定的用户或组,支持工作流的协同处理。 4. **规则引擎** jbpm4集成了如Drools这样的规则引擎,允许在流程中插入...
【JBPM4 Java源代码分包详解】 JBPM4是一个流行的开源工作流管理系统,它提供了一整套用于设计、执行和管理业务流程的工具。在深入研究JBPM4的源代码时,我们可以从其包结构中了解到框架的核心功能和设计理念。 1....
2. **任务管理**:jbpm4提供了任务服务,用于处理流程中的任务分配和执行。例如,在员工提交请假申请后,系统会自动创建一个待审批的任务,分配给对应的部门经理。任务可以包含相关数据,如请假天数、原因等。 3. *...
在"jBPM请假工作流"中,我们可以看到一个全面的任务列表,这个列表涵盖了请假流程中的各个阶段,使得整个请假过程变得规范、高效。 1. **我要请假**: 这是流程的起点,员工通过jBPM发起请假申请。用户在系统中填写...
4. **任务(Tasks)**:jbpm4的任务管理允许创建和分配任务给不同的参与者。源码中会展示如何启动任务,如何完成任务,以及如何进行任务查询和任务监听。 5. **流程实例(Process Instance)**:每个流程定义可以被...