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中的第一个节点,要解决这个问题就只能自定义流程样式,用自己顶一个的属性来显示节点名称,并且自己编写流程设计器和流程图显示.
分享到:
相关推荐
本文将围绕如何在JSP页面中显示jbpm流程图这一主题进行深入探讨。 首先,我们要了解`jbpm.image.taglib`。这是一个jbpm提供的标签库,它允许开发者在JSP页面中方便地嵌入流程图。`jbpm.tld`文件就是这个标签库的...
【jbpm流程图状态显示】是关于jbpm工作流管理系统中的一个重要话题,它涉及到如何在图形界面中实时呈现流程实例的状态。jbpm是一款开源的工作流管理系统,它允许开发者设计、执行和管理业务流程。在jbpm中,流程图是...
此外,还将探讨如何通过图形化界面发布项目,并展示如何配置用于在网页上显示 jBPM 流程图的标签文件。 #### 二、JBoss jBPM 系统架构与特性 JBoss jBPM 作为一款成熟稳定的 BPM 工具,拥有以下核心特性和优势: ...
jbpm designer (基于web的图形化流程设计工具)
在本文中,我们将深入探讨如何实现jbpm流程的监控,以便于更好地理解和优化业务流程。 首先,理解jbpm流程监控的核心概念至关重要。jbpm提供了Process Instance的概念,代表了流程的一个实例。每个实例都是基于特定...
jbpm_pic这个文件可能包含了一些示例流程图或者截图,用于辅助理解jBPM4如何显示执行位置。这些图片可能展示了不同阶段的流程实例状态,比如初始状态、执行中的任务以及已完成的任务。 在实际应用中,这种功能对于...
在文件列表中的"miniui_java"可能是一个用于展示流程UI的前端库或框架,它可以帮助开发者快速构建用户界面,与JBPM后端服务进行交互,展示任务列表、启动流程实例、显示流程图等。 总的来说,JBPM工作流DEMO提供了...
本工程基于以下框架实现工作流的实例. struts+spring+hibernate3.0+jbpm3.1.4,可以tomcat下运行,可通过图形模式发布工程,配置了在网页显示jbpm流程图的标签文件。
本工程为struts1.1+spring1.2+hibernate3.0+jbpm3.1.4 可以tomcat下运行,可通过图形模式发布工程,配置了在网页显示jbpm流程图的标签文件。 由于不能上传10M以上的包,本工程分为3个部分上传
jBPM4提供了一个图形化的流程建模工具,可以创建和编辑流程图。这些流程图随后会被编译成XML格式的BPML文件,用于在系统中执行。 "extjs jbpm4流程设计器"将这两者结合,利用ExtJS的强大UI能力,为jBPM4的流程定义...
本工程为struts1.1+spring1.2+hibernate3.0+jbpm3.1.4 可以tomcat下运行,可通过图形模式发布工程,配置了在网页显示jbpm流程图的标签文件。 由于不能上传10M以上的包,本工程分为3个部分上传
JBPM利用直观的流程语言,如任务、异步等待状态、定时器、自动化动作等,来构建业务流程图,这些元素共同构成了强大的控制流机制。由于是用Java语言开发的,JBPM可以被封装成Web服务,允许第三方应用进行调用。它的...
TaskNode在流程图中表示一个任务节点,通常用于分配工作项给用户或角色。在这里,我们将其配置为不自动创建任务(create-tasks="false"),并且设置信号类型为"last-wait"。这意味着只有当所有子流程都完成时,...
"JBPM工作流实战_流程定义文件的上传处理视频 03"这一主题主要关注如何在实际操作中处理JBPM流程定义文件的上传,这在构建业务流程自动化系统时是非常关键的步骤。 首先,流程定义文件是JBPM工作流的核心组成部分,...
这个模块可能包括用于显示流程图、提交流程请求、查看流程状态等功能的页面。同时,它也可能包含了Spring Security的配置,用于控制用户访问权限。 总的来说,SSH+jbPM4.4 Demo是一个综合性的示例,展示了如何将...
JBOSS jBPM是一个强大的、可扩展的工作流管理系统,它以直观的流程语言为核心,利用任务、异步等待状态、定时器和自动化动作等元素来构建业务流程图,实现了灵活的控制流机制。由于其依赖性最小,可以像使用Java库...
2. **工作流设计**:jbpm4通过流程图(Process Diagram)来定义工作流,包括任务(Task)、事件(Event)、网关(Gateway)等元素,以及它们之间的流转规则。在请假实例中,可能会涉及到请假申请、审批、驳回等不同...