{"record":{"id":"935ecea8abd22643","repo":"flowable/flowable-engine","slug":"operator-operator-is-not-supported-for-the-vari-935ece","errorCode":null,"errorMessage":"Operator ${operator} is not supported for the variable value","messagePattern":"Operator (.+?) is not supported for the variable value","errorType":"exception","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/BatchDeleteProcessConfig.java","lineNumber":394,"sourceCode":"                        break;\n                    case LIKE_IGNORE_CASE:\n                        query.variableValueLikeIgnoreCase(variableName, (String) extractVariableValue(variableValue, engineConfiguration));\n                        break;\n                    case EQUALS_IGNORE_CASE:\n                        query.variableValueEqualsIgnoreCase(variableName, (String) extractVariableValue(variableValue, engineConfiguration));\n                        break;\n                    case EXISTS:\n                        query.variableExists(variableName);\n                        break;\n                    case NOT_EXISTS:\n                        query.variableNotExists(variableName);\n                        break;\n                    case NOT_EQUALS_IGNORE_CASE:\n                        //Not exposed on the public API\n                        //query.variableValueNotEqualsIgnoreCase(variableName, (String) extractVariableValue(variableValue, engineConfiguration));\n                        //break\n                    default:\n                        throw new FlowableIllegalArgumentException(\"Operator \" + operator + \" is not supported for the variable value\");\n                }\n            }\n\n        }\n\n    }\n\n    protected static Object extractVariableValue(JsonNode variableValueNode, ProcessEngineConfigurationImpl engineConfiguration) {\n        String type = variableValueNode.path(\"type\").stringValue(null);\n        if (type == null) {\n            throw new FlowableIllegalArgumentException(\"The variable value does not have a type\");\n        }\n\n        VariableType variableType = engineConfiguration.getVariableTypes()\n                .getVariableType(type);\n        return variableType.getValue(new VariableValueJsonNodeValueFields(variableValueNode));\n    }\n","sourceCodeStart":376,"sourceCodeEnd":412,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine/src/main/java/org/flowable/engine/impl/delete/BatchDeleteProcessConfig.java#L376-L412","documentation":"After mapping the operator string to QueryOperator, populateQueryVariableValues applies it to the HistoricProcessInstanceQuery. Several operators (including NOT_EQUALS_IGNORE_CASE and any others not exposed on the public query API) are deliberately not supported here, hitting the default branch and throwing this FlowableIllegalArgumentException.","triggerScenarios":"A batch configuration variableValue declares an operator such as NOT_EQUALS_IGNORE_CASE, or any operator that HistoricProcessInstanceQuery has no corresponding variable-filter method for in this code path.","commonSituations":"Copying operator names from the full QueryOperator enum without checking which are supported for batch delete queries; API changes between Flowable versions moving operators into the unsupported set.","solutions":["Use a supported operator such as EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN, LIKE etc.","Replace NOT_EQUALS_IGNORE_CASE with an EQUALS filter plus client-side filtering, or restructure the query","Check the Flowable version's switch statement in BatchDeleteProcessConfig for the exact supported operator set"],"exampleFix":"// before\n{ \"name\": \"status\", \"operator\": \"NOT_EQUALS_IGNORE_CASE\", \"value\": \"done\" }\n// after\n{ \"name\": \"status\", \"operator\": \"NOT_EQUALS\", \"value\": \"done\" }","handlingStrategy":"validation","validationCode":"Set<String> supported = Set.of(\"EQUALS\",\"NOT_EQUALS\",\"GREATER_THAN\",\"GREATER_THAN_OR_EQUAL\",\"LESS_THAN\",\"LESS_THAN_OR_EQUAL\",\"LIKE\",\"LIKE_IGNORE_CASE\",\"EQUALS_IGNORE_CASE\",\"IN\");\nif (!supported.contains(operatorString)) {\n    throw new IllegalArgumentException(\"Unsupported operator for batch delete query: \" + operatorString);\n}","typeGuard":null,"tryCatchPattern":"try {\n    config = BatchDeleteProcessConfig.create(partId, engineConfiguration);\n} catch (FlowableIllegalArgumentException e) {\n    logger.error(\"Unsupported operator in batch config: \" + e.getMessage());\n}","preventionTips":["Use only operators exposed on HistoricProcessInstanceQuery's variable filters","Do not assume every QueryOperator enum value works for batch delete queries","Check the engine version's supported operator list"],"tags":["batch","query","operators","variables"],"backgroundTag":"unsupported-enum-value","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}