您的位置:首页 > 产品设计 > 产品经理

jbpm4的流程监控程序[3] 流程图监控展示,基于mootools

2011-09-06 09:30 471 查看
jbpm4的流程监控程序[3] 流程图监控展示,基于mootools

在<<jbpm4的流程监控程序[2]>>中,我们已经可以获得流程图和流程图相关节点信息,现在我们就可以将其展示出来.

对于节点的tip显示,这里是采用mootools的tip实现的.

// 用来处理流程图请求的,这里是采用SpringMVC的

Java代码

// 用来处理流程图请求的,这里是采用SpringMVC的

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)

throws Exception {

String pdId = getProcessDefinitionId(request);

InputStream image = null;

if (pdId != null && pdId.length() != 0) {

image = jbpmTemplate.getResourceFromProcessDefinition(pdId, JbpmTemplate.PROCESS_IMAGE);

}

if (image == null) {

String piId = getProcessInstanceId(request);

if (piId != null && piId.length() != 0) {

image = jbpmTemplate.getResourceFromProcessInstance(piId, JbpmTemplate.PROCESS_IMAGE);

}

}

if (image != null) {

response.setContentType("image/png");

OutputStream os = response.getOutputStream();

byte[] b = new byte[BUFFER_SIZE];

int len = 0;

while ((len = image.read(b, 0, BUFFER_SIZE)) != -1) {

os.write(b, 0, len);

}

os.flush();

}

return null;

}

流程监控action

Java代码

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)

throws Exception {

String piId = request.getParameter("piId");

ProcessInstaticeActivityInfo processInstaticeActivityInfo = jbpmTemplate.getActivityCoordinatesInfo(piId);

request.setAttribute("activeActivityInfos", processInstaticeActivityInfo.getActiveActivityInfos());

request.setAttribute("processedActivityInfos", processInstaticeActivityInfo.getProcessedActivityInfos());

request.setAttribute("jbpmTemplate", jbpmTemplate);

return new ModelAndView(page);

}

流程监控的jsp页面

Html代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>查看流程实例</title>

<style>

.tip-top {

color: #000;

width: 130px;

z-index: 13000;

}

.tip{

}

.tip .tip-title {

font-weight: bold;

font-size: 14px;

font-family: 宋体 ;

margin: 0;

color: #3E4F14;

padding: 8px 8px 4px;

background: #C3DF7D;

border-bottom: 1px solid #B5CF74;

}

.tip .tip-text {

font-size: 12px;

font-family: 宋体 ;

padding: 4px 8px 8px;

background: #CFDFA7;

}

.tip-bottom{

}

.processed{

position:absolute;

border:3px yellow solid;

}

.processed:hover{

border-color:blue;

}

.active{

position:absolute;

border:3px red solid;

}

.active:hover{

border-color: green;

}

/* ie下需加个透明的背景 s.gif见附件 */

.processed,.active{

background-image:url(<%=request.getContextPath()%>/resources/img/s.gif);

}

</style>

<script

src="<%=request.getContextPath()%>/resources/script/mootools-1.2.js"></script>

</head>

<body>

<div class="processContainer">

<img style="position: absolute; left: 0px; top: 0px;"

src="./jpdlImage.bpm?piId=<%=request.getParameter("piId")%>"/>

<%

JbpmTemplate jbpmTemplate = (JbpmTemplate)request.getAttribute("jbpmTemplate");

int id = 0;

List<ActivityInfo> processedActivityInfos = (List<ActivityInfo>)request.getAttribute("processedActivityInfos"); ;

List<ActivityInfo> activeActivityInfos = (List<ActivityInfo>)request.getAttribute("activeActivityInfos");

ActivityCoordinates coordinates;

HistoryActivityInstance activityInstance;

for(ActivityInfo info : processedActivityInfos){

coordinates = info.getCoordinates();

activityInstance = info.getActivityInstance();

String elId = "_pai_" + (++id);

String title = activityInstance==null?"":activityInstance.getActivityName();

StringBuffer position = new StringBuffer();

position.append("left:").append(coordinates.getX()+2).append("px;");

position.append("top:").append(coordinates.getY()+2).append("px;");

position.append("height:").append(coordinates.getHeight()-10).append("px;");

position.append("width:").append(coordinates.getWidth()-10).append("px;");

StringBuffer text = new StringBuffer();

if (activityInstance instanceof HistoryDecisionInstanceImpl) {

text.append("<b>完成时间:</b> ").append(DateTimeUtil.formatToNice(activityInstance.getEndTime(),"yyyy-MM-dd HH:mm:dd"));

String transitionName = ((HistoryActivityInstanceImpl) activityInstance).getTransitionName();

if("completed".equals(transitionName)){

ProcessDefinition pd = jbpmTemplate.getProcessDefinitionByProcessInstanceId(request.getParameter("piId"));

if(pd!=null){

Activity activity = ((ProcessDefinitionImpl)pd).getActivitiesMap().get(activityInstance.getActivityName());

if(activity!=null){

text.append("<br/><b>流转路径:</b> ").append(StringUtil.transToHtmlStr(activity.getDefaultOutgoingTransition().getName()));

}

}

} else {

text.append("<br/><b>流转路径:</b> ").append(StringUtil.transToHtmlStr(transitionName));

}

} else if (activityInstance instanceof HistoryTaskInstanceImpl) {

HistoryTaskInstanceImpl taskInstanceImpl = (HistoryTaskInstanceImpl) activityInstance;

text.append("<b>执 行 人</b>: ").append(taskInstanceImpl.getHistoryTask().getAssignee());

text.append("<br/><b>完成时间:</b> ").append(DateTimeUtil.formatToNice(activityInstance.getEndTime(),"yyyy-MM-dd HH:mm:dd"));

String transitionName = ((HistoryActivityInstanceImpl) activityInstance).getTransitionName();

if("completed".equals(transitionName)){

ProcessDefinition pd = jbpmTemplate.getProcessDefinitionByProcessInstanceId(request.getParameter("piId"));

if(pd!=null){

Activity activity = ((ProcessDefinitionImpl)pd).getActivitiesMap().get(activityInstance.getActivityName());

if(activity!=null){

text.append("<br/><b>流转路径:</b> ").append(StringUtil.transToHtmlStr(activity.getDefaultOutgoingTransition().getName()));

}

}

} else {

text.append("<br/><b>流转路径:</b> ").append(StringUtil.transToHtmlStr(transitionName));

}

List<HistoryComment> comments = jbpmTemplate.getTaskComments(taskInstanceImpl.getHistoryTask().getId());

if(comments.size()>0){ // 显示最新的comment

text.append("<br/><br/><b>备注信息:</b> ").append(StringUtil.transToHtmlStr(comments.get(comments.size()-1).getMessage()));

}

}

%>

<div class="tip processed" id="<%=elId%>" style="<%=position%>">

</div>

<script>$('<%=elId%>').store('tip:title',"<%=title%>").store('tip:text',"<%=text.toString()%>");</script>

<%}%>

<%

id = 0;

for(ActivityInfo info : activeActivityInfos){

coordinates = info.getCoordinates();

String elId = "_aai_" + (++id);

StringBuffer position = new StringBuffer();

position.append("left:").append(coordinates.getX()+2).append("px;");

position.append("top:").append(coordinates.getY()+2).append("px;");

position.append("height:").append(coordinates.getHeight()-10).append("px;");

position.append("width:").append(coordinates.getWidth()-10).append("px;");

%>

<div class="tip active" id="<%=elId%>" style="<%=position%>">

</div>

<%} %>

</div>

<script>new Tips('.tip');</script>

</body>

</html>

本文转自:http://yy629.iteye.com/blog?page=2&show_full=true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐