activiti终止流程

朋友们~初学工作流,想请教一下activiti终止流程后,ACT_HI_TASKINST表的,Assignee字段为空。是咋回事呀,想存进去,有可以使用的API嘛


```java
    public void cancelApply(String instanceId, String deleteReason) {
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId).singleResult();
        applicationEventPublisher.publishEvent(new WorkflowEvent(this, processInstance, WorkflowEvent.EVENT_CANCEL_APPLY));
        // 执行此方法后未审批的任务 act_ru_task 会被删除,流程历史 act_hi_taskinst 不会被删除,并且流程历史的状态为finished完成
        runtimeService.deleteProcessInstance(instanceId, deleteReason);
    }

```

该回答通过自己思路及引用到各个渠道搜索综合及思考,得到内容具体如下:

在Activiti中,当流程实例结束(包括正常结束和终止结束)时,对应的历史任务记录会保存在ACT_HI_TASKINST表中。如果在流程实例终止时,历史任务的Assignee字段为空,可能是因为在流程实例终止前,该任务的Assignee被设置为了null,或者该任务本来就没有Assignee。

如果您想在流程实例终止时保存Assignee字段,可以考虑在终止流程实例前,通过Activiti的API获取所有未完成的任务,并将其Assignee字段设置为需要保存的值。

例如:

List<Task> tasks = taskService.createTaskQuery().processInstanceId(instanceId).list();
for (Task task : tasks) {
    task.setAssignee(assignee);
    taskService.saveTask(task);
}

这样,当流程实例终止时,对应的历史任务记录的Assignee字段就会保存为您设置的值。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/332930
  • 除此之外, 这篇博客: Activiti工作流的正确打开方式中的 5,监听器方式实现activiti流程assignee设置 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在界面中添加监听器。

    在这里插入图片描述

    定义任务监听类,该类必须实现org.activiti.delegate.TaskListener接口。

    public class MyTaskListener implements TaskListener(){
        @Override
        public void notify(Delegate delegate){
            //这里指定任务负责人
            delegate.setAssignee("张三");
        }
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^