{"record":{"id":"2f5cb16f2ca14313","repo":"theonedev/onedev","slug":"undefined-field-fieldname","errorCode":null,"errorMessage":"Undefined field: ${fieldName}","messagePattern":"Undefined field: (.+?)","errorType":"exception","errorClass":"ExplicitException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/model/support/issue/field/FieldUtils.java","lineNumber":153,"sourceCode":"\t\t\tHierarchicalContext.pop();\n\t\t}\n\t}\n\n\tpublic static Map<String, Object> getFieldValues(Project project, List<FieldInstance> fieldInstances) {\n\t\tMap<String, Object> fieldValues = new HashMap<>();\n\t\tSerializable fieldBean;\n\t\ttry {\n\t\t\tfieldBean = getFieldBeanClass(false).getDeclaredConstructor().newInstance();\n\t\t} catch (InstantiationException | IllegalAccessException | IllegalArgumentException\n\t\t\t\t| java.lang.reflect.InvocationTargetException | NoSuchMethodException | SecurityException e) {\n\t\t\tthrow new RuntimeException(e);\n\t\t}\n\t\tBeanDescriptor beanDescriptor = new BeanDescriptor(fieldBean.getClass());\n\t\tGlobalIssueSetting issueSetting = OneDev.getInstance(SettingService.class).getIssueSetting();\n\t\tfor (FieldInstance fieldInstance : fieldInstances) {\n\t\t\tFieldSpec fieldSpec = issueSetting.getFieldSpec(fieldInstance.getName());\n\t\t\tif (fieldSpec == null)\n\t\t\t\tthrow new ExplicitException(\"Undefined field: \" + fieldInstance.getName());\n\t\t\t// EditContext for scripting values that read sibling fields via getInputValue(...)\n\t\t\tHierarchicalContext.push(newHierarchicalContext(project, beanDescriptor, fieldBean));\n\t\t\ttry {\n\t\t\t\tObject fieldValue = fieldSpec.convertToObject(fieldInstance.getValueProvider().getValue());\n\t\t\t\tfieldValues.put(fieldInstance.getName(), fieldValue);\n\t\t\t\tString propertyName = getPropertyName(beanDescriptor, fieldInstance.getName());\n\t\t\t\tif (propertyName != null)\n\t\t\t\t\tbeanDescriptor.getProperty(propertyName).setPropertyValue(fieldBean, fieldValue);\n\t\t\t} finally {\n\t\t\t\tHierarchicalContext.pop();\n\t\t\t}\n\t\t}\n\t\treturn fieldValues;\n\t}\n\t\n\tprivate static void validateFieldValue(FieldSpec fieldSpec, String fieldName, List<String> fieldValue) {\n\t\ttry {\n\t\t\tfieldSpec.convertToObject(fieldValue);","sourceCodeStart":135,"sourceCodeEnd":171,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/model/support/issue/field/FieldUtils.java#L135-L171","documentation":"getFieldValues resolves each FieldInstance against the issue setting's field specs. If a stored field instance's name has no matching FieldSpec (field was deleted or renamed), an ExplicitException 'Undefined field: <name>' is thrown because the value cannot be converted.","triggerScenarios":"Reading field values of an issue whose custom field was removed from issue settings, or renamed, leaving stale FieldInstance records; scripts importing issues with unknown field names.","commonSituations":"Admin deletes a custom field while old issues still reference it; restoring issues from backup/export into a project without those field definitions.","solutions":["Re-add or restore the missing field spec in Administration > Issue Settings","Remove or migrate the stale field values on the affected issues","Use getFieldValues overload with fieldEdits only after verifying field names via issueSetting.getFieldSpec()"],"exampleFix":"// before\nMap<String,Object> values = FieldUtils.getFieldValues(issue);\n// after\nif (OneDev.getInstance(SettingService.class).getIssueSetting().getFieldSpec(\"MyField\") != null) {\n    Map<String,Object> values = FieldUtils.getFieldValues(issue);\n}","handlingStrategy":"try-catch","validationCode":"for (FieldInstance f : fieldInstances)\n    if (issueSetting.getFieldSpec(f.getName()) == null)\n        return Result.fail(\"Undefined field: \" + f.getName());","typeGuard":null,"tryCatchPattern":"try {\n    values = FieldUtils.getFieldValues(subject, project, issue);\n} catch (ExplicitException e) {\n    logger.warn(\"Skipping issue with undefined field: {}\", e.getMessage());\n    values = Collections.emptyMap();\n}","preventionTips":["Never delete custom fields without cleaning up issue field values first","Run a maintenance job detecting field instances without matching specs","Re-check field specs after restoring issues from exports"],"tags":["issue-fields","schema","migration"],"backgroundTag":"entity-not-found","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}