`
shappy1978
  • 浏览: 700190 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何显示jBPM流程图

    博客分类:
  • jBPM
阅读更多
    jbpmconsole流程图采用的是jBPM自定义的标签,我没有研究过如何部署,因为我添加了几次没成功就放弃了,自定义标签的方法也许引用简单,但是部署麻烦,而且不够灵活,所以最好是自己从jBPM的附件表中调出图片,并自己绘制出当前节点和已经过节点.甚至可以在节点上提示审批意见,点击当前节点打开审批窗口等.
    先说说jBPM的附件表,默认发布时包含了流程定义和坐标两个xml文件和一个流程截图的jpg图片,流程图显示就是构建一个action,在action中读取jpg图片并输出,然后客户端用一个img指向改action就可以了,当前节点和历史节点可以自行读取并利用div或者vml叠加到图片上.
//读取附件的内容
	public byte[] getFile(String processName,int version, String fileName) throws Exception{
		byte[] bytes = null;
		JbpmContext jbpmContext = this.getContext();
		try {			
			GraphSession graphSession = jbpmContext.getGraphSession();
			ProcessDefinition pd = getDefinition(processName, version);
			if(pd==null) throw new Exception("Process not found!");
			FileDefinition fileDef = pd.getFileDefinition();
			if(fileDef==null) throw new Exception("Process filedefinition not found!");
			
			bytes = fileDef.getBytes(fileName);
		} finally { 
			closeContext();
		}
		
		return bytes;
	}

//获取图片的action
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name");
        int version = 0;
        try {
        	version = Integer.valueOf(request.getParameter("version"));
        } catch(Exception e) { }
        		
        response.setContentType("text/xml");
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Charset", "UTF-8"); //default is UTF-8        
        
        log.info("get process:" + name+"/"+version);
        
        Service jbpmSvr = new Service();
        byte[] bytes = jbpmSvr.getFile(name, version, name+".xml");
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        OutputStream out = response.getOutputStream(); 
        IoUtil.transfer(bais,out);
        out.flush();
        out.close();

        return null;
    }

在图片上叠加当前节点的图层需要先获取节点的坐标和大小
 	public int[] GetTaskinstanceBox(Long piID) throws DocumentException, UnsupportedEncodingException {
		JbpmContext jbpmContext=this.getContext(); 
		Session session = getSession(jbpmContext);
		try {
			List<String> aryToken = getProcessToken(session, piID);
			int[] ret = new int[aryToken.size()*4+2];
			ProcessInstance pi = jbpmContext.getProcessInstance(piID);
			FileDefinition fd = pi.getProcessDefinition().getFileDefinition();
			byte[] gpdBytes = fd.getBytes("gpd.xml");
			String s = new String(gpdBytes,"UTF-8");
			Document document = DocumentHelper.parseText(s);
			document.setXMLEncoding("UTF-8");
			Element root = document.getRootElement();
			ret[0] = Integer.valueOf(root.attribute("width").getValue()).intValue();
			ret[1] = Integer.valueOf(root.attribute("height").getValue()).intValue();
			for(int i=0;i<aryToken.size();i++){
				String nodeName = aryToken.get(i);
				XPath xPath = new DefaultXPath("//node[@name='" + nodeName + "']");
				Element node = (Element) xPath.selectSingleNode(root);
				
				ret[i*4+2] = Integer.valueOf(node.attribute("x").getValue()).intValue();
				ret[i*4+3] = Integer.valueOf(node.attribute("y").getValue()).intValue();
				ret[i*4+4] = Integer.valueOf(node.attribute("width").getValue()).intValue();
				ret[i*4+5] = Integer.valueOf(node.attribute("height").getValue()).intValue();
			}
			return ret;
		} finally {
			jbpmContext.close();
		}
	}

    可以看到用XPath xPath = new DefaultXPath("//node[@name='" + nodeName + "']");在xml中查找节点,所以jBPM的节点名称不能重名,一个有意思的现象,如果你手动修改流程定义的xml文件,让其中两个节点重名,打开流程图后发现同名其中一个节点连接都跑到另外一个节点上了,这说明jBPM是按节点名称查找xml中的第一个节点,要解决这个问题就只能自定义流程样式,用自己顶一个的属性来显示节点名称,并且自己编写流程设计器和流程图显示.
分享到:
评论

相关推荐

    把jbpm流程图显示在jsp页面中

    本文将围绕如何在JSP页面中显示jbpm流程图这一主题进行深入探讨。 首先,我们要了解`jbpm.image.taglib`。这是一个jbpm提供的标签库,它允许开发者在JSP页面中方便地嵌入流程图。`jbpm.tld`文件就是这个标签库的...

    jbpm流程图状态显示

    【jbpm流程图状态显示】是关于jbpm工作流管理系统中的一个重要话题,它涉及到如何在图形界面中实时呈现流程实例的状态。jbpm是一款开源的工作流管理系统,它允许开发者设计、执行和管理业务流程。在jbpm中,流程图是...

    JBoss jBPM 实例说明

    此外,还将探讨如何通过图形化界面发布项目,并展示如何配置用于在网页上显示 jBPM 流程图的标签文件。 #### 二、JBoss jBPM 系统架构与特性 JBoss jBPM 作为一款成熟稳定的 BPM 工具,拥有以下核心特性和优势: ...

    jbpm designer (基于web的图形化流程设计工具)

    jbpm designer (基于web的图形化流程设计工具)

    jbpm流程监控的实现

    在本文中,我们将深入探讨如何实现jbpm流程的监控,以便于更好地理解和优化业务流程。 首先,理解jbpm流程监控的核心概念至关重要。jbpm提供了Process Instance的概念,代表了流程的一个实例。每个实例都是基于特定...

    jbpm显示执行位置demo

    jbpm_pic这个文件可能包含了一些示例流程图或者截图,用于辅助理解jBPM4如何显示执行位置。这些图片可能展示了不同阶段的流程实例状态,比如初始状态、执行中的任务以及已完成的任务。 在实际应用中,这种功能对于...

    JBPM工作流DEMO

    在文件列表中的"miniui_java"可能是一个用于展示流程UI的前端库或框架,它可以帮助开发者快速构建用户界面,与JBPM后端服务进行交互,展示任务列表、启动流程实例、显示流程图等。 总的来说,JBPM工作流DEMO提供了...

    jbpm sample(完整,不带LIB)

    本工程基于以下框架实现工作流的实例. struts+spring+hibernate3.0+jbpm3.1.4,可以tomcat下运行,可通过图形模式发布工程,配置了在网页显示jbpm流程图的标签文件。

    ssh+jbpm+part1

    本工程为struts1.1+spring1.2+hibernate3.0+jbpm3.1.4 可以tomcat下运行,可通过图形模式发布工程,配置了在网页显示jbpm流程图的标签文件。 由于不能上传10M以上的包,本工程分为3个部分上传

    extjs jbpm4流程设计器

    jBPM4提供了一个图形化的流程建模工具,可以创建和编辑流程图。这些流程图随后会被编译成XML格式的BPML文件,用于在系统中执行。 "extjs jbpm4流程设计器"将这两者结合,利用ExtJS的强大UI能力,为jBPM4的流程定义...

    ssh+jbpm

    本工程为struts1.1+spring1.2+hibernate3.0+jbpm3.1.4 可以tomcat下运行,可通过图形模式发布工程,配置了在网页显示jbpm流程图的标签文件。 由于不能上传10M以上的包,本工程分为3个部分上传

    流程开发java插件jbpm 使用说明 个人总结

    JBPM利用直观的流程语言,如任务、异步等待状态、定时器、自动化动作等,来构建业务流程图,这些元素共同构成了强大的控制流机制。由于是用Java语言开发的,JBPM可以被封装成Web服务,允许第三方应用进行调用。它的...

    JBPM实践之:并发子流程的实现.doc

    TaskNode在流程图中表示一个任务节点,通常用于分配工作项给用户或角色。在这里,我们将其配置为不自动创建任务(create-tasks="false"),并且设置信号类型为"last-wait"。这意味着只有当所有子流程都完成时,...

    JBPM工作流实战_流程定义文件的上传处理视频 03

    "JBPM工作流实战_流程定义文件的上传处理视频 03"这一主题主要关注如何在实际操作中处理JBPM流程定义文件的上传,这在构建业务流程自动化系统时是非常关键的步骤。 首先,流程定义文件是JBPM工作流的核心组成部分,...

    SSH+jbpm4.4 demo 内含建表语句

    这个模块可能包括用于显示流程图、提交流程请求、查看流程状态等功能的页面。同时,它也可能包含了Spring Security的配置,用于控制用户访问权限。 总的来说,SSH+jbPM4.4 Demo是一个综合性的示例,展示了如何将...

    jbpm开发指南

    JBOSS jBPM是一个强大的、可扩展的工作流管理系统,它以直观的流程语言为核心,利用任务、异步等待状态、定时器和自动化动作等元素来构建业务流程图,实现了灵活的控制流机制。由于其依赖性最小,可以像使用Java库...

    jbpm4请假实例代码

    2. **工作流设计**:jbpm4通过流程图(Process Diagram)来定义工作流,包括任务(Task)、事件(Event)、网关(Gateway)等元素,以及它们之间的流转规则。在请假实例中,可能会涉及到请假申请、审批、驳回等不同...

Global site tag (gtag.js) - Google Analytics