Activiti中表单大概分为三种:
1.动态表单
2.外置表单
3.普通表单
一. 动态表单
在插件中设置:
获取动态表单的值:
StartFormDataImpl startFormData = (StartFormDataImpl) formService.getStartFormData(processDefinitionId);
startFormData.setProcessDefinition(null);
List<FormProperty> formProperties = startFormData.getFormProperties();
注意:表单的内容都是以key和value的形式数据保存在引擎表中!!!
二. 外置表单
这种方式常用于基于工作流平台开发的方式,代码写的很少,开发人员只要把表单内容写好保存到.form文件中即可,然后配置每个节点需要的表单名称(form key),实际运行时通过引擎提供的API读取Task对应的form内容输出到页面。
此种方式对于在经常添加新流程的需求比较适用,可以快速发布新流程,把流程设计出来之后再设计表单之后两者关联就可以使用了。例如公司内部各种简单的审批流程,没有业务逻辑处理,仅仅是多级审批是否通过等等情况
form 文件需要与bpmn文件一同发布,且需处于同一目录下
读取外置表单:
Object renderedTaskForm = formService.getRenderedTaskForm(taskId);
return renderedTaskForm;
注意:表单的内容都是以key和value的形式数据保存在引擎表中!!!
三. 普通表单
这个是最灵活的一种方式,常用于业务比较复杂的系统中,或者业务比较固定不变的需求中,例如ERP系统。
普通表单的特点是把表单的内容存放在一个页面(jsp、jsf、html等)文件中,存放方式也有两种(一体式、分离式):
1.一体式:把整个流程涉及到的表单放在一个文件然后根据处理的任务名称匹配显示,kft-activiti-demo的普通表单模式就是一体式的做法,把表单内容封装在一个div里面,div的ID以节点的名称命名,点击“办理”按钮时用对话框的方式把div的内容显示给用户。
2.分离式:对于非Ajax应用来说比较常用,每个任务对应一个页面文件,点击办理的时候根据任务的ID动态指定表单页面。
和以上两种方式比较有两点区别:
表单:和第二种外置表单类似,但是表单的显示、表单字段值填充均由开发人员写代码实现。
数据表:数据表单独设计而不是和前两种一样把数据以key、value形式保存在引擎表中。