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

How to read form fields by formKey from Activiti/Flowable API

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

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

我想将其替换为可以在表单设计器中设计并在任务中设置为 formKey 的表单(还有 formReference,似乎 formReference 是 select 表单的 Web 应用程序功能,用于设置 formKey 和部署表单应用程序)。问题是我没有看到任何 API 方法来读取基于表单键的表单属性。

使用 formKey 阅读 this question 中的答案是正确的方法,因为任务表单属性是 "deprecated",但是 是否 API 支持读取给定 formKey? 类似于 formService.getFormData(formKey, taskId).getFormProperties();?

文档(Flowable, Activiti) talks only about reading deployed form resource file my-custom-form.xml, does that mean I have to parse form file myself? I also checked Flowable Form Documentation and Sources但我不知道如何阅读表单字段。

如果你想使用用Flowable Form Designer设计的表单,那么有额外的API方法来获取Flowable中的开始表单和任务表单。 TaskService 中的 getTaskFormModel(String taskId) 方法为您提供例如与具有该 ID 的任务关联的表单定义:

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 class 时,您可以使用 getFormModel 方法检索 FormModel 接口以获取 Form 模型的实例。因为 FormModel 是可插入的,以便更容易定义自己的表单模型结构,所以您需要将 FormModel 接口转换为 SimpleFormModel。从那里您可以使用 getFormFields 方法获取表单定义的表单字段。

基于:

TaskListener (Flowable 6.7.1) 对我有用的代码
FormInfo taskFormData = Context.getProcessEngineConfiguration().getTaskService().getTaskFormModel(delegateTask.getId());
List<FormField> formFields = ((SimpleFormModel) taskFormData.getFormModel()).getFields();