工作流Activiti框架中表单的使用!详细解析内置表单和外置表单的渲染 (2)

或者

List<FormProperty> 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> <extensionElements> <activiti:formProperty variable="SpeakerName" type="string" /> <activiti:formProperty type="date" datePattern="dd-MMM-yyyy" /> <activiti:formProperty type="enum"> <activiti:value /> <activiti:value /> <activiti:value /> <activiti:value /> </activiti:formProperty> </extensionElements> </startEvent>

所有的表单属性的信息都是可以通过API进行访问的:

formProperty.getType().getName(): 获取类型的名称

formProperty.getType().getInformation("datePattern"): 获取日期的匹配方式

formProperty.getType().getInformation("values"): 可以获取到枚举值

Activiti控制台支持表单属性并且可以根据表单定义对表单进行渲染:

<startEvent ... > <extensionElements> <activiti:formProperty value="${numberOfDays}" type="long" required="true"/> <activiti:formProperty value="${startDate}" datePattern="dd-MM-yyyy hh:mm" type="date" required="true" /> <activiti:formProperty value="${vacationMotivation}" type="string" /> </extensionElements> </userTask>

当使用Activiti控制台时,会被渲染成流程的启动表单

外置表单的渲染

Activiti中的API允许执行Activiti流程引擎之外的方式渲染任务表单,可以用自定义方式对任务表单进行渲染

所有需要渲染的表单属性进行装配的服务方法有两种:

StartFormData FormService.getStartFormData(String processDefinitionId)

TaskFormdata FormService.getTaskFormData(String taskId)

表单属性提交的两种方式:

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:

String FormService.getStartFormData(String processDefinitionId).getFormKey()

String FormService.getTaskFormData(String taskId).getFormKey()

可以使用这个存储部署的模版中的全名(例如org/activiti/example/form/my-custom-form.xml) 但是这并不是必须的:

可以在表单属性中存储一个通用的key,然后运用一种算法或者换转去得到你实际使用的模版

当需要通过不同UI技术渲染不同的表单会更加方便:

使用正常屏幕大小的web应用程序的表单

移动手机小屏幕的表单

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypjdd.html