如何从 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 数据库以接受更长的字符串过程变量?

用于嵌入式安装的 Camunda 身份服务

[6]深入浅出工作开源框架Camunda: 如何远程Debug camunda-webapp的源代码

[7]深入浅出工作开源框架Camunda: camunda-webapp 用户登录功能代码分析

[7]深入浅出工作开源框架Camunda: camunda-webapp 用户登录功能代码分析

如何更改 Camunda 数据库以接受长字符串变量?