JBPM外接任务表单简述

作者:   gsccnu

JBPM外接任务表单简述   

      目前我看过采用JBPM的工作流有web-console (JBPM 3.2.1自带)、RUNA WFESMART,就这三个我做一个比较:

RUNA WFE

    RUNA WFE是上面提到的三个中,唯一可以直接部署应用的,当然也有它的缺点,下面我会提到。这个框架采用的是Struts作为表示层,流程管理和组织架构管理都做的不错,良好的国际化,文档很全。如果只打算研究可以看下它的permission部分,它已经实现了对流程查看、启动、结束等的权限控制,JBPM自身在这部分基本还是TODO状态。 

    OK,再说就偏题了,下面讲了它的Taskform实现。RUNA采用了Web-Consoleforms.xml这种文件与Task的映射方法,但有它自己的特色:forms.xml里包含有variable 信息,没有采用xhtml。下面我贴一点他的Taskform代码

代码

<tr title="since" >  

          <td style="padding-right: 20px;">  

            Since <i><font size="-1"> (dd.mm.yyyy) font><i>  

          td>  

          <td>  

            <customtag var="since" delegation="ru.runa.wf.web.html.vartag.DateTimeInputVarTag" />  

          td>  

        tr>  

  不是很难吧,呵呵。值得注意的只有那个<customtag >。由于看它的代码已经过了一段时间,所以具体代码的位置已经忘了,只记得实现的原理。大致如下,从数据库把上述文件的字节流读出,通过一个匹配方法找到整个 <customtag >,根据参数Var 和一个委托delegation得到这个组件的HTML代码,用这段代码将原来的<customtag >替换掉,最后将所有的HTML一次输入到response中去。

     RUNA提供了很多vartag ,通过继承它自带的几个抽象类你也可以扩展你自己的。然而它最大的缺点就是在原有的JBPM又进行了封装,产生了自己的IDE插件、流程定义语言,可以说比较封闭。

WEB-CONSOLE

    web-console (3.2.1),主要使用了一个jbpm4jsf.jar来完成这部分工作。使用过JBPM的朋友都知道,在JBPM的最近流程设计器里多了一个Generate Form的按钮,通过它我们可以创建一个描述Variablesxhtml文件。在发布的时候,我们可以将它和processdefinition.xmlprocessimage.jpg等一起发布到数据库(多句嘴,通过简单的配置JBPM也可以从本地的文件系统读取上述文件),然后jbpm4jsf就可以通过读取这个xhtml文件产生一个很灵活的Task-form。具体如下:(所有文件来自jbpm-jpdl-3.2.1,代码都是节选的)

sa / task.xhtml

xml 代码

   <j4j:includeProcessFile file="#{taskForms[task.name]}" process="# {task.processInstance.processDefinition}">  

        <ui:param name="var" value="#{taskVariableMap}"/>  

        <ui:param name="comment" value="#{comment}"/>  

        <ui:param name="taskName" value="#{task.name}"/>  

j4j:includeProcessFile>  

注意这里使用了<j4j:includeProcessFile >这个标签,对应它在jbpm4jsf.jar

org.jbpm.jsf.core.handler.IncludeProcessFileHandler.java

     java 代码    

final FileDefinition fileDefinition = processDefinition.getFileDefinition();   

if (fileDefinition == null) {   

    throw new TagException(tag, "Process has a null fileDefinition property");   

}   

if (! fileDefinition.hasFile(file)) {   

    throw new TagException(tag, "Process does not contain file '" + file + "'");   

}   

VariableMapper orig = ctx.getVariableMapper();   

final VariableMapperWrapper newVarMapper = new VariableMapperWrapper(orig);   

ctx.setVariableMapper(newVarMapper);   

try {   

    final StringBuffer buffer = new StringBuffer();   

    buffer.append(processDefinition.getId());   

    buffer.append("/");   

    buffer.append(file);   

    nextHandler.apply(ctx, parent);   

    ctx.includeFacelet(parent, new URL("par", "", 0, buffer.toString(), new FileDefinitionURLStreamHandler(fileDefinition, file)));   

} finally {   

    ctx.setVariableMapper(orig);   

}  

       用这种方式就将数据库中的xhtml文件取出,通过创建一个URL对象,将这部分加入到当前FaceletContext中,并作为UIComponent parent的子UIComponent 。然后我们再看一个表单文件,选用自带的websale例子

examples/websale/src/main/jpdl/form.create.xhtml

xml 代码

<f:facet name="header">  

  <h:outputText value="Quantity:"/>  

f:facet>  

<h:inputText  

    value="#{var['quantity']}"  

    converter="javax.faces.Integer"  

    converterMessage="The quantity must be numeric."  

    validatorMessage="The quantity must be at least 1.">  

  <f:validateLongRange minimum="1"/>  

h:inputText>  

    有点JSF基础的应该很容易看出上面的代码,转换、验证、FORM组件都可以在这里定义。这里使用了JSF RI <xmlns:h="http://java.sun.com/jsf/html>,我们有理由相信使用第三方的UIComponent以及定义自己的UIComponent(来满足一些国内的BT需求)将不是什么难事。

         

 jbpm4jsf要求JSF 1.2,所以目前无法使用Myfaces(JSF 1.1),本人喜欢的Tomahawk Tobago 一并被毙了,非常.十分以及极其不爽。 目前只好慢慢等Myfaces1.2 release

    总之相对于其他2个流程框架我还是看好JBPM4JSF。喜欢struts的朋友也不用急,JBPM 好象计划在3.3版本的时候推出支持Struts的东东,不过目前在CVS上还没有看到JBPM4STRUTS这个项目

 

2017年jBPM 正式发布了全新的 7版本。jBPM 是一个完全开源的业务流程管理(BPM)和案例管理解决方案。它支持流程和案例的完整生命周期,从编写工具到执行一直到监控和管理。 在核心引擎之上,提供了许多功能和工具来支持整个生命周期中的业务流程: 基于Eclipse和基于Web的编辑器,用于支持业务流程的图形化创建(拖放)。 基于JPA / JTA的可插拔持久性和事务。 基于WS-HumanTask的可插拔人工任务服务,用于包含需要由人类执行者执行的任务。 管理控制台支持流程实例管理,任务列表和任务表单管理以及报告。 部署流程的可选流程仓库(和其他相关知识)。 历史记录(用于查询/监视/分析)。 与Seam,Spring,OSGi等集成 BPM通过以业务用户和开发人员喜欢的方式提供流程管理功能和工具,从而实现业务分析师,开发人员和最终用户之间的桥梁。域特定的节点可以插入调色板,使业务用户更容易理解这些过程。 jBPM支持自适应和动态过程,需要灵活性来模拟复杂的现实生活中的情况,这些情况不能用刚性过程轻松描述。我们通过允许他们控制进程的哪些部分来执行,动态地偏离进程等,使控制回到终端用户。 jBPM也不仅仅是一个独立的流程引擎。复杂的业务逻辑可以被建模为业务流程与业务规则和复杂事件处理的组合。jBPM可以与Drools项目相结合,以支持将这些范例集成到一起的统一环境,您可以将业务逻辑作为过程,规则和事件的组合进行建模。 工作是MAVEN+eclipse jBPM jars也可以在中央maven仓库中使用 (也可以在JBoss maven仓库中)。 如果您使用Maven,只需添加一个依赖关系pom.xml: org.jbpm jbpm-test 7.3.0.Final 这与Gradle,Ivy和Buildr类似。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值