flowable / flowable/flowable-engine
"Full" history level for variable changes doesn't implemented in CMMN
- Lenguaje dominante
- Java
- Estrellas
- 9.5k
- Forks
- 2.9k
- Merge medio
- 7 h 8 min
- PR fusionados (30 d)
- 2
Descripción
**Describe the bug**
The [document of CMMN History Level](https://documentation.flowable.com/latest/develop/be/history-level#cmmn) describes when History Level = Full, the changes of variables will be stored.
But it is not implemented yet.
**Expected behavior**
If I changed variables in the runtime, the change history should be stored and can be retrieved from `act_hi_varinst` and `act_hi_detail` tables
**Code**
The BPMN engine (org.flowable.engine.impl.history.DefaultHistoryManager.java) has a method recordHistoricDetailVariableCreate that checks isHistoryLevelAtLeast(HistoryLevel.FULL) and creates a HistoricDetailVariableInstanceUpdateEntity — a separate row for every variable change. This is what powers the history/historic-detail REST endpoint with detailType: "variableUpdate" and revision numbers. So the how history stored.
```
@Override
public void recordHistoricDetailVariableCreate(VariableInstanceEntity variable, ExecutionEntity sourceActivityExecution, boolean useActivityId,
String activityInstanceId, Date createTime) {
String processDefinitionId = getProcessDefinitionId(variable, sourceActivityExecution);
if (getHistoryConfigurationSettings().isHistoryEnabledForVariableInstance(processDefinitionId, variable)
&& isHistoryLevelAtLeast(HistoryLevel.FULL, processDefinitionId)) {
HistoricDetailVariableInstanceUpdateEntity historicVariableUpdate = getHistoricDetailEntityManager().copyAndInsertHistoricDetailVariableInstanceUpdateEntity(variable, createTime);
if (StringUtils.isNotEmpty(activityInstanceId)) {
historicVariableUpdate.setActivityInstanceId(activityInstanceId);
} else {
if (useActivityId && sourceActivityExecution != null) {
HistoricActivityInstanceEntity historicActivityInstance = findHistoricActivityInstance(sourceActivityExecution, false);
if (historicActivityInstance != null) {
historicVariableUpdate.setActivityInstanceId(historicActivityInstance.getId());
}
}
}
}
}
```
The CMMN engine (DefaultCmmnHistoryManager.java) has none of this:
- Zero references to HistoryLevel.FULL anywhere in the file
- Zero references to "detail" or HistoricDetail entities
- No recordHistoricDetailVariableCreate method
- The CmmnHistoryManager interface doesn't even define such a method
**Additional context**
flowable-engine 8.0.0
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
Comienza con DefaultCmmnHistoryManager.java y la interfaz CmmnHistoryManager; después, compara su gestión del historial de variables con DefaultHistoryManager.java en el motor BPMN. Sigue las entidades existentes del historial de variables de CMMN y las asignaciones de persistencia, y verifica que el historial FULL registre los cambios de variables en act_hi_varinst y act_hi_detail y los haga recuperables a través del endpoint de historial correspondiente.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- java
- Área
- backend, databases
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 48/100