比较Activiti中三种不同的表单及其应用

简介:

这个恐怕是初次接触工作流最多的话题之一了,当然这个不是针对Activiti来说的,每个工作流引擎都会支持多种方式的表单。目前大家讨论到的大概有三种。

  1. 动态表单
  2. 外置表单
  3. 普通表单

具体选择哪种方式只能读者根据自己项目的实际需求结合现有技术或者架构、平台选择!!!

1.动态表单

这是程序员最喜欢的方式,同时也是客户最讨厌的……因为表单完全没有布局,所有的表单元素都是顺序输出显示在页面。

此方式需要在流程定义文件(bpmn20.xml)中用activiti:formProperty属性定义,可以在开始事件(Start Event)和Task上设置,而且支持变量自动替换,语法就是UEL。

1
2
3
4
5
6
7
8
9
10
< startevent  id = "startevent1"  name = "Start" >
   < extensionelements >
     < activiti:formproperty  id = "name"  name = "Name"  type = "string" ></ activiti:formproperty >
   </ extensionelements >
</ startevent >
< usertask  id = "usertask1"  name = "First Step" >
   < extensionelements >
     < activiti:formproperty  id = "setInFirstStep"  name = "SetInFirstStep"  type = "date" ></ activiti:formproperty >
   </ extensionelements >
</ usertask >

下面是一个简单的动态表单的单元测试,读者可以下载运行以便更明确执行过程和判断动态表单能不能在企业项目中使用。

下载之后复制到eclipse工程里,更改里面的路径配置使用JUnit测试即可。

当流程需要一些特殊处理时可以借助Listener或者Delegate方式实现。

注意:表单的内容都是以key和value的形式数据保存在引擎表中!!!

2.外置表单

这种方式常用于基于工作流平台开发的方式,代码写的很少,开发人员只要把表单内容写好保存到.form文件中即可,然后配置每个节点需要的表单名称(form key),实际运行时通过引擎提供的API读取Task对应的form内容输出到页面。

此种方式对于在经常添加新流程的需求比较适用,可以快速发布新流程,把流程设计出来之后再设计表单之后两者关联就可以使用了。例如公司内部各种简单的审批流程,没有业务逻辑处理,仅仅是多级审批是否通过等等情况

当流程需要一些特殊处理时可以借助Listener或者Delegate方式实现。

Activiti Explorer就是使用的这种方式,表单信息都配置在流程定义文件中。

代码片段:

1
2
3
4
< process  id = "FormKey"  name = "FormKey" >
     < startevent  id = "startevent1"  name = "Start"  activiti:formkey = "diagrams/form/start.form" ></ startevent >
    
</ process >

同样也提供了单元测试:


注意:表单的内容都是以key和value的形式数据保存在引擎表中!!!

3.普通表单

这个是最灵活的一种方式,常用于业务比较复杂的系统中,或者业务比较固定不变的需求中,例如ERP系统。

普通表单的特点是把表单的内容存放在一个页面(jsp、jsf、html等)文件中,存放方式也有两种(一体式、分离式):

1.一体式:把整个流程涉及到的表单放在一个文件然后根据处理的任务名称匹配显示,kft-activiti-demo的普通表单模式就是一体式的做法,把表单内容封装在一个div里面,div的ID以节点的名称命名,点击“办理”按钮时用对话框的方式把div的内容显示给用户。

2.分离式:对于非Ajax应用来说比较常用,每个任务对应一个页面文件,点击办理的时候根据任务的ID动态指定表单页面。

本博客发布的Activiti入门Demo中有演示:Activiti快速入门项目-kft-activiti-demo

和以上两种方式比较有两点区别:

  1. 表单:和第二种外置表单类似,但是表单的显示、表单字段值填充均由开发人员写代码实现。
  2. 数据表:数据表单独设计而不是和前两种一样把数据以key、value形式保存在引擎表中。

4.从业务数据和流程关联比较

  1. 动态表单:引擎已经自动绑定在一起了,不需要额外配置。
  2. 外置表单:和业务关联是可选的,提供的例子中是没有和业务关联的,如果需要关联只需要在提交StartForm的时候设置businessKey即可。
  3. 普通表单:这个应该是必须和业务关联,否则就是无头苍蝇了……,关联方式可以参考:工作流引擎Activiti使用总结中的2.3 业务和流程的关联方式

5.结束语

技术只是辅助工具,只能决定这件事能不能做,如何选择要看应用场合,希望简单的比较能提供一点思路。
本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/5213643.html,如需转载请自行联系原作者



相关文章
|
5月前
|
XML 关系型数据库 MySQL
工作流框架--Activiti6.0(二)
工作流框架--Activiti6.0(二)
364 1
|
5月前
|
架构师 Java 关系型数据库
工作流框架--Activiti6.0(一)
工作流框架--Activiti6.0(一)
143 0
|
存储 Java API
Activiti-如何创建Activiti项目和数据表介绍
Activiti-如何创建Activiti项目和数据表介绍
Activiti-如何创建Activiti项目和数据表介绍
|
存储 XML 算法
工作流Activiti框架中表单的使用!详细解析内置表单和外置表单的渲染
本文介绍了工作流Activiti框架中表单的使用。在工作流Activiti框架中,支持在业务流程中添加内置表单和外置表单。详细说明了工作流中的表单需要具备的属性以及表单属性在工作流中的映射关系。最后介绍了工作流Activiti框架中对支持的表单的渲染方式。通过这篇文章,可以帮助我们在工作流Activiti框架中更加熟练地运用表单。
1854 0
工作流Activiti框架中表单的使用!详细解析内置表单和外置表单的渲染
|
数据库
activiti自定义流程之整合(三):整合自定义表单创建模型
<p><br></p> <p>本来在创建了表单之后应该是表单列表和预览功能,但是我看了看整合的代码,和之前没有用angularjs的基本没有什么变化,一些极小的变动也只是基于angularjs的语法,因此完全可以参考之前说些的表单列表展示相关的内容,这里也就直接进入到下一个步骤,创建流程模型了。</p> <p> </p> <p>在之前的创建流程模型一节里,我讲代码比较多,实际上在这里
4291 0
|
Android开发
Activiti自定义设计器
原文地址:www.shareniu.com/topic/content/40.htm Activiti自定义设计器 在使用Activiti的时候,需要绘制流程文档,可以使用Activiti提供的Eclipse插件或者idea插件,抑或使用Web版的流程设计器,但是这些设计器不能很好的满足业务开发需求,因此通常情况下,在实现自己业务的同时,期望自己设计一套流程设计器,从而更加灵活的应对需求的变更和量身定制自己的Activiti设计器。
1405 0
|
JSON 数据格式 数据库
activiti自定义流程之整合(五):启动流程时获取自定义表单
流程定义部署之后,自然就是流程定义列表了,但和前一节一样的是,这里也是和之前单独的activiti没什么区别,因此也不多说。我们先看看列表页面以及对应的代码,然后在一步步说明点击启动按钮时如何调用自定义的form表单。<br><br><br> 流程定义列表页面如下:<br><img src="http://img.blog.csdn.net/20160414185557292?water
5388 0
|
前端开发 JavaScript 数据库
activiti自定义流程之自定义表单(二):创建表单
<p>注:环境配置:<a target="_blank" href="http://blog.csdn.net/tuzongxun/article/details/51088050">activiti自定义流程之自定义表单(一):环境配置</a></p> <p><br></p> <p>在上一节自定义表单环境搭建好以后,我就正式开始尝试自己创建表单,在后台的处理就比较常规,主要是针对ue
6552 0