- 1. 简介
- 2. 开始
- 3. 配置
- 4. Flowable API
- 5. 集成 Spring
- 6. 部署
- 7. BPMN 2.0 介绍
- 8. BPMN 2.0 结构
- 9. 表单
- 10. JPA
- 11. 历史
- 12. 身份管理
- 13. Eclipse Designer
- 14. Flowable UI 应用
- 15. REST API
- 16. 集成 CDI
- 17. 集成 LDAP
- 18. 高级
- 19. 工具
9.2. 表单参数
所有与业务流程相关的信息,要么包含在流程变量里,要么可以通过流程变量引用。Flowable也支持将复杂的Java对象,以Serializable
对象、JPA实体,或整个XML文档存储为String
等方式,存储为流程变量。
启动流程与完成用户任务是用户参与流程的地方,所以需要使用UI界面渲染表单。为了简化UI设计,可以在流程定义中,将流程变量中的复杂的Java对象转换为Map<String,String>
格式的参数。
这样UI就可以使用Flowable API方法,在这些参数的基础上构建表单。这些参数可看做是专用(也更受限)的流程变量视图。可以使用FormData返回值,获取用于显示表单的参数。如
StartFormData FormService.getStartFormData(String processDefinitionId)
或
TaskFormData FormService.getTaskFormData(String taskId)
默认情况下,内建表单引擎能够“看到”参数与流程变量。因此如果任务表单参数一对一对应流程变量,则不需要专门进行声明。例如,对于如下声明:
<startEvent />
当执行到达startEvent时,所有流程变量都可用。但
formService.getStartFormData(String processDefinitionId).getFormProperties()
将为空,因为并未指定映射。
在上面的例子中,所有提交的参数都存储为流程变量。也就是说,只要简单地在表单中添加输入框,就可以存储新变量。
参数从流程变量衍生而来,但并不是必须存储为流程变量。例如,流程变量可以是Address类的JPA实体。而UI使用的StreetName
表单参数,则通过#{address.street}
表达式获取。
类似的,表单中用户需要提交的参数,可以存储为流程变量,也可以使用UEL值表达式,保存至某个流程变量的参数。如#{address.street}
。
除非使用formProperty
声明,否则提交参数时,默认将其存储为流程变量。
在表单参数与流程变量的处理过程中,也可以进行类型转换。
例如:
<userTask>
<extensionElements>
<flowable:formProperty />
<flowable:formProperty type="long"/>
<flowable:formProperty variable="SpeakerName" writable="false" />
<flowable:formProperty expression="#{address.street}" required="true" />
</extensionElements>
</userTask>
room
表单参数将作为String,映射为room
流程变量duration
表单参数将作为java.lang.Long,映射为duration
流程变量speaker
表单参数将被映射为SpeakerName
流程变量。将只在TaskFormData对象中可用。若提交了speaker参数,将抛出FlowableException。对应地,使用readable="false"
属性,参数可以提交,但不会在FormData中提供。street
表单参数将作为String,映射为address
流程变量的Java bean参数street
。如果在提交时没有提供这个字段,required="true"将抛出异常。
StartFormData FormService.getStartFormData(String processDefinitionId)
与TaskFormdata FormService.getTaskFormData(String taskId)
方法返回的FormData同样提供类型元数据。
支持下列表单参数类型:
string
(org.flowable.engine.impl.form.StringFormTypelong
(org.flowable.engine.impl.form.LongFormType)double
(org.flowable.engine.impl.form.DoubleFormType)enum
(org.flowable.engine.impl.form.EnumFormType)date
(org.flowable.engine.impl.form.DateFormType)boolean
(org.flowable.engine.impl.form.BooleanFormType)
可以通过List<FormProperty> formService.getStartFormData(String processDefinitionId).getFormProperties()
与List<FormProperty> formService.getTaskFormData(String taskId).getFormProperties()
方法,获取每个表单参数的下列FormProperty
信息:
public interface FormProperty {
/**
* 在{@link FormService#submitStartFormData(String, java.util.Map)}
* 或{@link FormService#submitTaskFormData(String, java.util.Map)}
* 中提交参数时使用的key
*/
String getId();
/** 显示标签 */
String getName();
/** 在本接口中定义的类型,例如{@link #TYPE_STRING} */
FormType getType();
/** 可选。这个参数需要显示的值 */
String getValue();
/** 这个参数是否可以读取:在表单中显示,并可通过
* {@link FormService#getStartFormData(String)}
* 与{@link FormService#getTaskFormData(String)}
* 方法访问。
*/
boolean isReadable();
/** 用户提交表单时是否可以包含这个参数? */
boolean isWritable();
/** 输入框中是否必填这个参数 */
boolean isRequired();
}
例如:
<startEvent>
<extensionElements>
<flowable:formProperty
name="Speaker"
variable="SpeakerName"
type="string" />
<flowable:formProperty
type="date"
datePattern="dd-MMM-yyyy" />
<flowable:formProperty type="enum">
<flowable:value name="Go Left" />
<flowable:value name="Go Right" />
<flowable:value name="Go Up" />
<flowable:value name="Go Down" />
</flowable:formProperty>
</extensionElements>
</startEvent>
所有这些信息都可以通过API获取:用formProperty.getType().getName()
获取类型名、formProperty.getType().getInformation("datePattern")
获取日期格式、formProperty.getType().getInformation("values")
获取枚举值。
下面的XML代码片段
<startEvent>
<extensionElements>
<flowable:formProperty name="Number of days" value="${numberOfDays}" type="long" required="true"/>
<flowable:formProperty name="First day of holiday (dd-MM-yyy)" value="${startDate}" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" />
<flowable:formProperty name="Motivation" value="${vacationMotivation}" type="string" />
</extensionElements>
</userTask>
可以在自定义应用中用于渲染流程启动表单。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论