Flowable入门系列文章68 - 表单属性

Posted 分享牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable入门系列文章68 - 表单属性相关的知识,希望对你有一定的参考价值。

与业务流程相关的所有信息都包含在流程变量本身中,或者通过流程变量进行引用。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 id="start" />

当执行到达startEvent时,所有进程变量都可用,但是将是空的,因为没有定义具体的映射。

formService.getStartFormData(String processDefinitionId).getFormProperties()

在上述情况下,所有提交的属性将被存储为过程变量。这意味着只需在表单中添加一个新的输入字段,就可以存储一个新的变量。

属性是从过程变量派生的,但是它们不必被存储为过程变量。例如,一个流程变量可以是Address类的JPA实体。而StreetNameUI技术使用的表单属性可以与表达式链接#address.street。

模拟用户应该在表单中提交的属性可以存储为过程变量,也可以作为嵌套属性存储在其中一个过程变量中,例如UEL值表达式#address.street。

模拟提交属性的默认行为是它们将被存储为流程变量,除非formProperty声明另有规定。

也可以将类型转换作为表单属性和流程变量之间的处理的一部分应用。

例如:

<userTask id="task">
<extensionElements>
<flowable:formProperty id="room" />
<flowable:formProperty id="duration" type="long"/>
<flowable:formProperty id="speaker" variable="SpeakerName" writable="false" />
<flowable:formProperty id="street" expression="#address.street" required="true" />
</extensionElements>
</userTask>
  • Form属性room将以room字符串的形式映射到流程变量
  • Form属性duration将被映射为流程变量,duration如java.lang.Long
  • 表单属性speaker将被映射到流程变量SpeakerName。它只会在TaskFormData对象中可用。如果属性发言者被提交,将抛出一个
    FlowableException。模拟,具有属性readable=“false”,属性可以从FormData中排除,但仍然在提交中处理。
  • Form属性street将以字符串映射到street流程变量address中的Java bean属性。如果没有提供属性,required =“true”将在提交期间抛出异常。

也可以提供类型元数据作为从方法StartFormData FormService.getStartFormData(String processDefinitionId)和返回的FormData的一部分TaskFormdata FormService.getTaskFormData(String taskId)。

我们支持以下表单属性类型:

  • string (org.flowable.engine.impl.form.StringFormType
  • long (org.flowable.engine.impl.form.LongFormType)
  • enum (org.flowable.engine.impl.form.EnumFormType)
  • date (org.flowable.engine.impl.form.DateFormType)
  • boolean (org.flowable.engine.impl.form.BooleanFormType)
    对于声明的每个表单属性,以下FormProperty信息将通过List formService.getStartFormData(String processDefinitionId).getFormProperties()和提供List formService.getTaskFormData(String taskId).getFormProperties()。
public interface FormProperty 
/** the key used to submit the property in @link FormService#submitStartFormData(String, java.util.Map)
* or @link FormService#submitTaskFormData(String, java.util.Map) */
String getId();
/** the display label */
String getName();
/** one of the types defined in this interface like e.g. @link #TYPE_STRING */
FormType getType();
/** optional value that should be used to display in this property */
String getValue();
/** is this property read to be displayed in the form and made accessible with the methods
* @link FormService#getStartFormData(String) and @link FormService#getTaskFormData(String). */
boolean isReadable();
/** is this property expected when a user submits the form? */
boolean isWritable();
/** is this property a required input field *
boolean isRequired();

例如:

<startEvent id="start">
<extensionElements>
<flowable:formProperty id="speaker"
name="Speaker"
variable="SpeakerName"
type="string" />
<flowable:formProperty id="start"
type="date"
datePattern="dd-MMM-yyyy" />
<flowable:formProperty id="direction" type="enum">
<flowable:value id="left" name="Go Left" />
<flowable:value id="right" name="Go Right" />
<flowable:value id="up" name="Go Up" />
<flowable:value id="down" name="Go Down" />
</flowable:formProperty>
</extensionElements>
</startEvent>

所有这些信息都可以通过API访问。类型名称可以通过 formProperty.getType().getName()。甚至可以使用日期模式,并且可以使用
formProperty.getType().getInformation(“datePattern”)枚举值formProperty.getType().getInformation(“values”)。

以下XML片段

<startEvent>
<extensionElements>
<flowable:formProperty id="numberOfDays" name="Number of days" value="$numberOfDays" type="long"
required="true"/>
<flowable:formProperty id="startDate" name="First day of holiday (dd-MM-yyy)" value="$startDate"
datePattern="dd-MM-yyyy hh:mm" type="date" required="true" />
<flowable:formProperty id="vacationMotivation" name="Motivation" value="$vacationMotivation" type="string" />
</extensionElements>
</userTask>

可以用来渲染到一个自定义应用程序的进程开始形式。

上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:

以上是关于Flowable入门系列文章68 - 表单属性的主要内容,如果未能解决你的问题,请参考以下文章

Flowable入门系列文章69 - 外部表单呈现

Flowable入门系列文章80 - Flowable Designer部署功能

Flowable入门系列文章4-流程实例

Flowable入门系列文章18 - 部署Flowable

Flowable入门系列文章86 - Flowable Modeler应用程序

Flowable入门系列文章46 - 业务规则任务