专栏首页Linyb极客之路工作流引擎之activiti三种不同的表单及其应用

工作流引擎之activiti三种不同的表单及其应用

开篇语

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

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

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

1.动态表单

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

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

<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>

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

2.外置表单

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

此种方式对于在经常添加新流程的需求比较适用,可以快速发布新流程,把流程设计出来之后再设计表单之后两者关联就可以使用了。例如公司内部各种简单的审批流程,没有业务逻辑处理,仅仅是多级审批是否通过等等情况,当流程需要一些特殊处理时可以借助Listener或者Delegate方式实现。Activiti Explorer就是使用的这种方式,表单信息都配置在流程定义文件中。

代码片段:

<process
id="FormKey"
name="FormKey">

    <startevent
id="startevent1"
name="Start"
activiti:formkey="diagrams/form/start.form"></startevent>

    …

</process>

3.普通表单

这个是最灵活的一种方式,常用于业务比较复杂的系统中,或者业务比较固定不变的需求中,例如ERP系统。普通表单的特点是把表单的内容存放在一个页面(jsp、jsf、html等)文件中,存放方式也有两种(一体式、分离式):

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

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

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

a、表单:和第二种外置表单类似,但是表单的显示、表单字段值填充均由开发人员写代码实现。

b、数据表:数据表单独设计而不是和前两种一样把数据以key、value形式保存在引擎表中。

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

1、动态表单:引擎已经自动绑定在一起了,不需要额外配置。

2、外置表单:和业务关联是可选的,提供的例子中是没有和业务关联的,如果需要关联只需要在提交StartForm的时候设置businessKey即可。

3、普通表单:这个应该是必须和业务关联,否则就是无头苍蝇了……

本文分享自微信公众号 - Linyb极客之路(gh_c420b2cf6b47),作者:白乔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • IntelliJ IDEA 使用心得与常用快捷键

    一.黑色主题 Darcula 眼睛舒服,最重要的是酷! 设置方式:FILE--Settings--Edit--Colors&Fonts--Scheme nam...

    lyb-geek
  • Java中&lt;? extends T&gt;和&lt;? super T&gt;的理解

    比如,我们现在定义:List<? extends T>首先你很容易误解它为继承于T的所有类的集合,你可能认为,你定义的这个List可以用来put任何T的子类,那...

    lyb-geek
  • Java面试中常问的计算机网络方面问题

    (GET)请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?name1=value1&name2=...

    lyb-geek
  • 基于Vue,ElementUI开发的一款表单设计器

    基于Vue,ElementUI开发的一款表单设计器,提高表单开发效率的利器,让开发者从枯燥的表单代码编写中解放出来

    程序源代码
  • js之浏览器自动填充表单的危害(三)

    上一篇文章提到(点击即可访问) :在进行xss攻击时,如果cookie中被添加了httponly属性,我们可以尝试获取浏览器中由于记住密码而自动填充的表单里面的...

    Jumbo
  • 微信小程序|表单数据绑定及提示弹窗

    一个小程序应用,总是会出现注册时填写个人界面的情况,这个界面就是一个双向数据绑定的表单,而如何实现一个表单的数据绑定以及如何在提交信息时跳出一个提示弹窗,则需要...

    算法与编程之美
  • jQuery插件 -- Form表单插件jquery.form.js

    jQuery Form插件是一个优秀的Ajax表单插件,可以非常容易地、无侵入地升级HTML表单以支持Ajax。jQuery Form有两个核心方法 -- aj...

    joshua317
  • ExtJs二(实现登录)

      在上一次http://www.cnblogs.com/aehyok/archive/2013/04/17/3025957.html主要是搭建Ext环境,本次...

    aehyok
  • ExtJs二(实现登录)

      在上一次http://www.cnblogs.com/aehyok/archive/2013/04/17/3025957.html主要是搭建Ext环境,本次...

    aehyok
  • jQuery validate 表单验证插件

    最近写了两个组表单提交的页面,好久没用jQuery,在写的时候总遇到一些莫名其妙的为难题,这里记录一下。

    libo1106

扫码关注云+社区

领取腾讯云代金券