六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 25|回复: 0

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

[复制链接]

升级  31.33%

23

主题

23

主题

23

主题

秀才

Rank: 2

积分
97
 楼主| 发表于 2013-1-28 19:21:50 | 显示全部楼层 |阅读模式
jbpm4的流程监控程序[3] 流程图监控展示,基于mootools

在<<jbpm4的流程监控程序[2]>>中,我们已经可以获得流程图和流程图相关节点信息,现在我们就可以将其展示出来.
对于节点的tip显示,这里是采用mootools的tip实现的.


// 用来处理流程图请求的,这里是采用SpringMVC的
  // 用来处理流程图请求的,这里是采用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
  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页面
<!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>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表