如何通过Activiti / Flowable API中的formKey读取表单字段

时间:2019-01-08 13:37:13

标签: activiti bpmn flowable

使用Flowable 6.4.0(也适用于Activiti 6.0.0),我正在通过读取任务表单属性在应用程序中呈现任务表单:

for (FormProperty formProperty : formService.getTaskFormData(taskId).getFormProperties()) {
//... render form field
}

我想用可以在表单设计器中设计并在任务上设置为formKey的Forms替换它(也是formReference,似乎formReference是Web应用程序的功能,用于选择表单以设置formKey并将表单部署到应用程序)。问题是我看不到任何用于根据表单密钥读取表单属性的API方法。

由于“不建议使用”任务表单属性,因此使用formKey在this question中读取答案是正确的方法,但是是否有API支持读取给定formKey的表单字段?formService.getFormData(formKey, taskId).getFormProperties();一样?

文档(FlowableActiviti)仅讨论读取已部署的表单资源文件my-custom-form.xml,这是否意味着我必须自己解析表单文件?我还检查了Flowable Form DocumentationSources,但看不到如何读取表单字段。

1 个答案:

答案 0 :(得分:2)

如果要使用由Flowable Form Designer设计的表单,则还有其他API方法可在Flowable中获取启动表单和任务表单。 TaskService中的getTaskFormModel(String taskId)方法为您提供了与具有以下ID的Task相关联的表单定义:

https://github.com/flowable/flowable-engine/blob/master/modules/flowable-engine/src/main/java/org/flowable/engine/TaskService.java#L323

如果查看此方法的实现,您会发现它使用userTask元素的formKey属性来基于键查找表单定义。

要获取流程定义的开始表单,可以使用以下代码查找startEvent元素的formKey属性,并通过FormEngine的键获取表单定义:

https://github.com/flowable/flowable-engine/blob/master/modules/flowable-rest/src/main/java/org/flowable/rest/service/api/repository/ProcessDefinitionResource.java#L145

getTaskFromModel 方法检索 FormInfo 类时,可以使用 getFormModel 方法检索 FormModel 接口以获取Form模型的实例。因为 FormModel 可插拔,以便更轻松地定义自己的Form模型结构,所以您需要将 FormModel 接口转换为 SimpleFormModel 。从那里可以使用 getFormFields 方法访问表单定义的表单字段。