如何从 Camunda 中的 EnumFormType 重置值?
Posted
技术标签:
【中文标题】如何从 Camunda 中的 EnumFormType 重置值?【英文标题】:How to reset values from EnumFormType in Camunda? 【发布时间】:2020-05-15 15:42:18 【问题描述】:我对 Camunda BMPN 有疑问。在图片“example.bmpn”的图表中,用户任务具有 ID science_area 的表单字段,它是一个枚举类型。我想获取 science_area 的表单字段并将数据从数据库中添加到该枚举中。 问题是因为在 EnumFormType 中数据仍然存在,并且每次进入控制器时都在下面 旧值被新值加入。
example.bpmn
代码示例如下:
@RequestMapping(value = "/form/processInstanceId", method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<FormFieldsDto> getSciencePaperForm(@PathVariable("processInstanceId") String processInstanceId)
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
TaskFormData tfd = formService.getTaskFormData(task.getId());
List<FormField> properties = tfd.getFormFields();
Magazine magazine = magazineService.findByName((String)runtimeService.getVariable(processInstanceId,"magazineName"));
List<ScienceField> scienceFields = magazine.getScienceFields();
for(FormField field : properties)
if(field.getId().equals("science_area"))
EnumFormType enumType = (EnumFormType) field.getType();
for(ScienceField scienceField: scienceFields)
enumType.getValues().put(scienceField.getName(), scienceField.getName());
return new ResponseEntity<>(new FormFieldsDto(task.getId(), pi.getId(), properties), HttpStatus.OK);
【问题讨论】:
【参考方案1】:我找到了解决方案。实际上我已经将 EnumFormType 转换为 Map,然后清除内容。这是我更改的代码的一部分。
for(FormField field : properties)
if(field.getId().equals("casopis"))
Map<String, String> enumType = ((EnumFormType) field.getType()).getValues();
enumType.clear();
for(MagazineDTO magazineDTO: magazines)
enumType.put(magazineDTO.getName(), magazineDTO.getName());
break;
【讨论】:
以上是关于如何从 Camunda 中的 EnumFormType 重置值?的主要内容,如果未能解决你的问题,请参考以下文章
如何配置内存中的 Camunda 数据库以接受更长的字符串过程变量?
[6]深入浅出工作开源框架Camunda: 如何远程Debug camunda-webapp的源代码
[7]深入浅出工作开源框架Camunda: camunda-webapp 用户登录功能代码分析