已经可以比较好的运行JBPM了,但是如果能以图形化的方式显示工作流,并且把当前节点高亮显示,这样可用性就更好了,用户可以很轻松的看到当前流程到哪个节点了。
我发现JBPM的starters-kit的例子中就有类似的效果,所以决定分析一下它是怎么实现的。
打开网页,浏览到有显示当前工作流节点的页面,查看到此页面的地址为task.jsp,发现其中的核心代码如下:
<jbpm:processimage task="${taskBean.taskInstanceId}"/>
这里使用了JBPM提供的jbpm:processimage标签,此标签定义在jbpm.tld中,这个Tag的类为org.jbpm.webapp.tag.ProcessImageTag。所以只要使用这个标签我们就可以很轻松的在Web页面中显示图形化的工作流了。
那么如果是在Swing、SWT等非Web界面中也想显示这种效果怎么办呢?那么让我们来分析一下ProcessImageTag类。
private void retrieveByteArrays() {
try {
FileDefinition fileDefinition = processDefinition.getFileDefinition();
gpdBytes = fileDefinition.getBytes("gpd.xml");
imageBytes = fileDefinition.getBytes("processimage.jpg");
} catch (Exception e) {
e.printStackTrace();
}
}
gpd.xml中记录的是节点的位置关系,processimage.jpg是图形化的图片(只是基图,没有高亮显示当前节点),这两个文件是JBPM的Eclipse插件自动生成的。
得到流程实例当前节点的方法:
private void initialize() {
JbpmContext jbpmContext = JbpmContext.getCurrentJbpmContext();
if (this.taskInstanceId > 0) {
TaskInstance taskInstance = jbpmContext.getTaskMgmtSession().loadTaskInstance(taskInstanceId);
currentToken = taskInstance.getToken();
}
else
{
if (this.tokenInstanceId > 0)
currentToken = jbpmContext.getGraphSession().loadToken(this.tokenInstanceId);
}
processDefinition = currentToken.getProcessInstance().getProcessDefinition();
}
从currentToken中可以得到当前节点在显示的时候的长度、宽度、横纵坐标等值。得到的方式如下:
private int[] extractBoxConstraint(Element root) {
int[] result = new int[4];
String nodeName = currentToken.getNode().getName();
XPath xPath = new DefaultXPath("//node[@name='" + nodeName + "']");
Element node = (Element) xPath.selectSingleNode(root);
result[0] = Integer.valueOf(node.attribute("x").getValue()).intValue();
result[1] = Integer.valueOf(node.attribute("y").getValue()).intValue();
result[2] = Integer.valueOf(node.attribute("width").getValue()).intValue();
result[3] = Integer.valueOf(node.attribute("height").getValue()).intValue();
return result;
}
这样用<div/>标签就可以将当前节点框上一个红色的框框了:
jspOut.println("<div style='position:relative; background-image:url(" + imageLink + "); width: " + imageDimension[0] + "px; height: " + imageDimension[1] + "px;'>");
//详细代码参考:writeTable方法
原来高亮显示是在原有的图片上叠加一个高亮的框框实现的。所以如果要显示在Swing、SWT中的话也只要参考这个思路,在当前节点位置显示一个高亮的框框就可以了!
转自:http://www.blogjava.net/huanzhugege/archive/2007/11/19/161678.html
分享到:
相关推荐
JBPM流程监控的实现过程
JBPM是JBOSS公司的一个开源工作流产品,它功能强大,商业工作流所提供的功能它基本上都有。然而在JBPM中没有提供流程监控的功能的相关API,这点让很多使用JBPM做企业应用的开发人员颇为头疼。
jbpm designer (基于web的图形化流程设计工具)
jbpm流程监控的实现
JBPM3.2 表初始化,流程发布,案例一
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
jbpm5 持久化及流转流程剖析 使用线程启动TaskServer,初始化持久化OrganizationEntity,将流程中需要使用到的 groupId,actorId.全部初始化到表中。
jBPM2-流程图与JBPM API.ppt jBPM2-流程图与JBPM API.ppt
jbpm5_持久化及流转流程剖析
jbpm工作流程jbpm工作流程jbpm工作流程jbpm工作流程jbpm工作流程
jbpm4整合流程例子及附代web流程设计器可以进行流程设计
jbpm4.4流程图
jbpm4.3,jbpm4.3工作流程管理例子
jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍
1.6 JBPM_DELEGATION:流程代理类表(用于实例化jbpm中的action类) 6 1.7 JBPM_TASK:流程任务表 6 1.8 JBPM_TASKCONTROLLER:流程任务控制器 7 1.9 JBPM_VARIABLEACCESS:流程变量表 7 1.10 JBPM_MODULEDEFINITION...
JBPM流程代码演示
一个Jbpm员工请假流程的实例(doc)
注意:该文件是免费版,具备的功能是:图形化流程设计器,生成流程代码。 该软件是我从网上找设计器时候找到的,如果你有兴趣购买付费版,可以上网搜索该软件,有官网的,该软件不是我的,我也不是推广,这个软件...
文档详细介绍了如何利用JBPM开发流程应用,从框架构造到节点处理。