在<<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;
- 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("").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("").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