由于activiti对于act_hi_taskinst表中的DELETE_REASON_列值是有限的,DELETE_REASON_类代表任务的完成原因,比如completed或者delete,因此我们在任意节点跳转或者撤销的时候,必须标记该字段,比如撤销可以标记可以定义为Revoke、跳转可以标记为jump等等。
写一个命令类如下:
public class UpdateHiTaskReasonCommand implements Command { protected String taskId; protected String deleteReason; public UpdateHiTaskReasonCommand(String taskId, String deleteReason) { this.taskId = taskId; this.deleteReason = deleteReason; } @Override public Void execute(CommandContext commandContext) { HistoricTaskInstanceEntity historicTaskInstance = commandContext .getDbSqlSession().selectById(HistoricTaskInstanceEntity.class,taskId); if (historicTaskInstance != null) { historicTaskInstance.markEnded(deleteReason); } return null; }}
关于historicTaskInstance.markEnded(deleteReason)操作之后数据库的数据就会更新,可以参考Activiti权威指南一书中的会话缓存章节