【整合篇】JBPM4.4业务与流程整合之查询

我们都知道在应用工作流的过程中业务与流程的整合必不可少,那么查询时流程结合业务的查询就更是在所难免了,如何实现这种效果呢,方式有多种,下面我先简单介绍一二(目前有3种方式解决,先简单介绍一种,剩下的两种会结合Activiti再来说明)。

第一种方式:

Application(申请实体):

package com.hjy.ssh.beans;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

public class Application {

	/** 状态常量:审批中 */
	public static final String STATUS_RUNNING = "审批中";

	/** 状态常量:已通过 */
	public static final String STATUS_APPROVED = "已通过";

	/** 状态常量:未通过 */
	public static final String STATUS_REJECTED = "未通过";

	private Long id;
	private Set<ApproveInfo> approveInfos = new HashSet<ApproveInfo>();
	private User applicant;// 申请人

	private String processDefinitionKey;//所使用的流程key
	public String getProcessDefinitionKey() {
		return processDefinitionKey;
	}

	public void setProcessDefinitionKey(String processDefinitionKey) {
		this.processDefinitionKey = processDefinitionKey;
	}

	private String title;// 标题
	private String applyTime;// 申请时间
	private String status; // 当前的状态
	private String reason;
	private String executeId;//当前启动的工作流实例id

	public String getExecuteId() {
		return executeId;
	}

	public void setExecuteId(String executeId) {
		this.executeId = executeId;
	}

	public String getReason() {
		return reason;
	}

	public void setReason(String reason) {
		this.reason = reason;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public User getApplicant() {
		return applicant;
	}

	public void setApplicant(User applicant) {
		this.applicant = applicant;
	}

	public String getApplyTime() {
		return applyTime;
	}

	public void setApplyTime(String string) {
		this.applyTime = string;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;		

	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public Set<ApproveInfo> getApproveInfos() {
		return approveInfos;
	}

	public void setApproveInfos(Set<ApproveInfo> approveInfos) {
		this.approveInfos = approveInfos;
	}

}

ApproveInfo(审批实体):

package com.hjy.ssh.beans;

/**
 * 审批信息
 *
 * @author hjy
 *
 */
public class ApproveInfo {
	private Long id;
	private Application application; //
	private User approver;// 审批人

	private String approveTime;// 审批时间
	private boolean approval; // 是否通过
	private String comment; // 审批意见

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public User getApprover() {
		return approver;
	}

	public void setApprover(User approver) {
		this.approver = approver;
	}

	public String getApproveTime() {
		return approveTime;
	}

	public void setApproveTime(String approveTime) {
		this.approveTime = approveTime;
	}

	public Application getApplication() {
		return application;
	}

	public void setApplication(Application application) {
		this.application = application;
	}

	public boolean isApproval() {
		return approval;
	}

	public void setApproval(boolean approval) {
		this.approval = approval;
	}

	public String getComment() {
		return comment;
	}

	public void setComment(String comment) {
		this.comment = comment;
	}

}

TaskView(组合实体):

package com.hjy.ssh.beans;

import org.jbpm.api.task.Task;

public class TaskView {

	private Task task;
	private Application application;

	public TaskView(Task task, Application application) {
		this.task = task;
		this.application = application;
	}

	public Task getTask() {
		return task;
	}

	public void setTask(Task task) {
		this.task = task;
	}

	public Application getApplication() {
		return application;
	}

	public void setApplication(Application application) {
		this.application = application;
	}

}

查询我的待办任务:

/** 待我审批(我的任务列表) */
public String myTaskList() throws Exception {

	List<TaskView> taskViewList = applicationService.getMyTaskViewList(getCurrentUser());
	//List<TaskView> taskViewList = applicationService.getMyTaskViewList(user);
	ActionContext.getContext().put("taskViewList", taskViewList);
	return "myTaskList";
}
public List<TaskView> getMyTaskViewList(User currentUser) {
	// 查询我的任务列表
	String userId = currentUser.getUsername(); // 约定使用loginName作为JBPM用的用户标识符
	List<Task> taskList = processEngine.getTaskService().findPersonalTasks(userId);

	// 找出每个任务对应的申请信息
	List<TaskView> resultList = new ArrayList<TaskView>();
	for (Task task : taskList) {

		Application application = (Application) processEngine.getTaskService().getVariable(task.getId(), "application");
		resultList.add(new TaskView(task, application));
	}

	// 返回“任务--申请信息”的结果
	return resultList;
}

此处的返回值为TaskView,这个TaskVie的既包含了业务的内容也包括流程的内容,获取启动流程时存入的流程变量,根据taskid和map的key值来查找即可!

我的任务列表:

<!--显示数据列表-->
        <tbody id="TableData" class="dataContainer" datakey="formList">

		 <s:iterator value="#taskViewList">
			<tr class="TableDetail1 template" align="CENTER">
				<td>${application.title}</td>
				<td>${application.applicant.username} </td>
				<td>${task.activityName} </td>
				<td>${application.applyTime} </td>
				<td>
					<s:a action="flowAction_approveUI?applicationId=%{application.id}&taskId=%{task.id}">审批处理</s:a>
					<s:a action="flowAction_approveHistory?applicationId=%{application.id}">查看流转记录</s:a>
				</td>
			</tr>
		</s:iterator>	

        </tbody>

总结:

当然以上也仅仅是给我们提供了一种思路,这种结合的方式有多种,这些跟工作流不工作流没有什么关系,只需要我们在日常做项目的过程中,多多积累,所有的这些其实都是通用的,而且在项目中也很常见,所以还是要靠我们日常的积累!

时间: 2024-12-20 11:49:28

【整合篇】JBPM4.4业务与流程整合之查询的相关文章

【整合篇】Activiti业务与流程整合之查询(二)

继上篇博客:[整合篇]JBPM4.4业务与流程整合之查询 应用第二种方式:申请实体中加入需要的相应的工作流的属性 package com.tgb.itoo.basic.entity; import java.util.Date; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Co

【整合篇】Activiti业务与流程整合之查询(三)

继前两篇博客:应用第三种方式 实体中不需要引入任何与工作流相关的任何属性,单纯的做好自己即可!例如如下申请实体(Leave): package com.tgb.itoo.basic.entity; import java.util.Date; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.persistence.CascadeType; import javax.persist

【整合篇】Activiti业务与流程的整合

对于无论是Activtit还是jbpm来说,业务与流程的整合均类似,启动流程是绑定业务,流程与业务的整合放到动态代理中 [java] view plain copy print? /** * 启动修改课程流程Leave leave, * * @param leave */ @RequestMapping(value = "start", method = RequestMethod.POST) public String startWorkflow(Leave leave,Redire

【整合篇】JBPM4.4业务与流程的整合

在这次学习工作流的过程中,工作流如何与业务结合有多种方式,虽然很简单,但是每次都要再次梳理几分钟,这次拿出来整理一下,将它真正成为自己的知识. 从启动流程开始说: 申请页面:选择所用流程(即画的流程图的id) <table cellpadding="0" cellspacing="0" class="mainForm"> <tr> <td width="120px"> <div>

【整合篇】JBPM4.4与Spring整合

我们大家都知道容器的好处,那么工作流也提供了与spring整合的方式,将工作流引擎由spring容器统一管理起来,共同拥有容器的特性.下面来从代码的角度来看看整合与不整合的对比: 未整合: 引入相应的jar包,使用hibernate来持久化 配置文件: jbpm.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <jbpm-configuration> <import resource=&q

基于J2EE平台下SSH2+JBPM4.4+ExtJs4.1 框架整合&项目实战

基于J2EE平台下SSH2+JBPM4.4+ExtJs4.1 框架整合&项目实战 推荐给大家一套企业实战项目开发的教程. 课程包含了以下主要的技术面:前端采用Extjs4.x:后台使用目前中小型开发较为常用的SSH2作为框架,囊括了JBPM4.4工作流引擎. 课程经由基础学习向高阶跨进,一步一步介绍了前后台的关系,以及前后台的整合.JBPM的整合等等,都是属于目前较为重要的技术点. 咨询QQ:1609173918 课程大纲: 第1讲:课程概要_Extjs入门: 第2讲:Grid与Store的应用

基于J2EE平台下SSH2+JBPM4.4+ExtJs4.1 框架整合&amp;项目实战(HR项目开发、SSH2作为框架)

对这个课程有兴趣的朋友可以加我的QQ2059055336和我联系 课程讲师:ANDY 课程分类:Java 适合人群:中级 课时数量:46课时 用到技术:Extjs.SSH2.Mvc 涉及项目:HR项目用户管理.Extjs树形结构.流程接口 更新程度:完成 课程包含了以下主要的技术面:前端采用Extjs4.x:后台使用目前中小型开发较为常用的SSH2作为框架,囊括了JBPM4.4工作流引擎.课程经由基础学习向高阶跨进,一步一步介绍了前后台的关系,以及前后台的整合.JBPM的整合等等,都是属于目前较

基于J2EE平台下SSH2+JBPM4.4+ExtJs4.1 框架整合&amp;项目实战

基于J2EE平台下SSH2+JBPM4.4+ExtJs4.1 框架整合&项目实战(HR项目开发.SSH2作为框架) 对这个课程有兴趣的朋友可以加我的QQ2059055336和我联系 课程讲师:ANDY 课程分类:Java 适合人群:中级 课时数量:46课时 用到技术:Extjs.SSH2.Mvc 涉及项目:HR项目用户管理.Extjs树形结构.流程接口 更新程度:完成 课程包含了以下主要的技术面:前端采用Extjs4.x:后台使用目前中小型开发较为常用的SSH2作为框架,囊括了JBPM4.4工作

整合Activiti Modeler到业务系统(或BPM平台)

http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler.html 1. 为什么要整合 Activiti 5.10版本把原本独立的Activiti Modeler模块整合到了Activiti Explorer中,两者相结合使用起来很方便,通过Modeler设计的流程模型可以直接部署到引擎,也可以把已经部署的流程转换为Model从而在Modeler中编辑. 在实际应用中也有这样的需求,把Modeler整合到业务系统中可