本篇内容主要讲解“如何理解Activiti中的表单及应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Activiti中的表单及应用”吧!
Activiti中的表单
表单属性
业务流程相关联的所有信息:
Activiti支持存储复杂的Java对象作为流程变量:
用户是在启动一个流程和完成用户任务时,与流程进行交互
表单需要某个UI技术渲染之后才能够与用户进行交互
为了能够使用不同UI技术变得容易,流程定义包含一个对流程变量中复杂的Java类型对象到一个properties的Map<String,String> 类型的转换逻辑
使用Activiti API的方法查看公开的属性信息.然后,任意UI技术都能够在这些属性上面构建一个表单.该属性专门为流程变量提供了一个视图. 表单所需要显示的属性可以返回值FormData中获取:
StartFormData FormService.getStartFormData(String processDefinitionId)
或者
TaskFormdata FormService.getTaskFormData(String taskId)
<startEvent id="start" />
formService.getStartFormData(String processDefinitionId).getFormProperties()
会是一个空值,因为没有定义一个具体的映射
表单中所有被提交的属性都将会作为流程变量被存储在Activiti使用的数据库中. 这意味着在一个表单中新添加一个简单的input输入字段,也会作为一个新的变量被存储
属性来自于流程变量,但是不一定非要作为流程变量存储:
用户提交的表单属性应该作为流程变量进行存储
使用UEL值表达式将其作为流程变量的一个嵌套属性进行存储
提交的表单属性默认的行为是作为流程变量进行存储,除非一个 formProperty 申明了其他的规则
类型转换也可以应用于表单数据和流程变量之间的处理:
<userTask id="task">
<extensionElements>
<activiti:formProperty id="room" />
<activiti:formProperty id="duration" type="long"/>
<activiti:formProperty id="speaker" variable="SpeakerName" writable="false" />
<activiti:formProperty id="street" expression="#{address.street}" required="true" />
</extensionElements>
</userTask>表单属性room将会被映射为String类型流程变量room
表单属性duration将会被映射为java.lang.Long类型流程变量duration
表单属性speaker将会被映射为流程变量SpeakerName:
writable="false" 只能够在TaskFormData对象中使用.如果属性speaker提交,将会抛出一个ActivitiException的异常
readable="false" 该属性就会在FormData进行排除,但是在提交后仍然会对其进行处理
表单属性street将会映射为Java Bean address的属性street作为String类型的流程变量:
表单数据也可以作为FormData的一部分提供类型元数据.该FormData可以从以下方法的返回值中获取:
StartFormData FormService.getStartFormData(String processDefinitionId)
TaskFormdata FormService.getTaskFormData(String taskId)
List<FormProperty> formService.getStartFormData(String processDefinitionId).getFormProperties()
或者
List<FormProperty> formService.getTaskFormData(String taskId).getFormProperties()
<br />
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>
<activiti:formProperty id="speaker"
name="Speaker"
variable="SpeakerName"
type="string" />
<activiti:formProperty id="start"
type="date"
datePattern="dd-MMM-yyyy" />
<activiti:formProperty id="direction" type="enum">
<activiti:value id="left" name="Go Left" />
<activiti:value id="right" name="Go Right" />
<activiti:value id="up" name="Go Up" />
<activiti:value id="down" name="Go Down" />
</activiti:formProperty>
</extensionElements>
</startEvent>
<startEvent ... >
<extensionElements>
<activiti:formProperty id="numberOfDays" name="Number of days" value="${numberOfDays}" type="long" required="true"/>
<activiti:formProperty id="startDate" name="First day of holiday (dd-MM-yyy)" value="${startDate}" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" />
<activiti:formProperty id="vacationMotivation" name="Motivation" value="${vacationMotivation}" type="string" />
</extensionElements>
</userTask>当使用Activiti控制台时,会被渲染成流程的启动表单
外置表单的渲染
Activiti中的API允许执行Activiti流程引擎之外的方式渲染任务表单,可以用自定义方式对任务表单进行渲染
所有需要渲染的表单属性进行装配的服务方法有两种:
表单属性提交的两种方式:
ProcessInstance FormService.submitStartFormData(String processDefinitionId, Map<String,String> properties)
void FormService.submitStartFormData(String taskId, Map<String,String> properties)
可以将任何表单模版资源放进要部署的业务文档之中(如果想要按照流程的版本进行存储).将会在部署中作为一种可用的资源
获取部署表单模版的方式有两种:
String ProcessDefinition.getDeploymentId()
InputStream RepositoryService.getResourceAsStream(String deploymentId, String resourceName)
这样就可以获取表单模版定义文件,就可以在应用中渲染或者显示表单
也可以使用该功能获取任务表单之外的其他的部署资源用于其他的目的
属性 <userTask activiti:formKey="..." 暴露方式API:
可以使用这个存储部署的模版中的全名(例如org/activiti/example/form/my-custom-form.xml) 但是这并不是必须的:
到此,相信大家对“如何理解Activiti中的表单及应用”有了更深的了解,不妨来实际操作一番吧!这里是天达云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!