我想知道这两个API之间有什么区别。看起来 setAssignee 是细粒度的,而声明是粗粒度的。这是唯一的区别吗?
这些方法之间的区别在Activiti的Javadocs中提到。
void claim(String taskId, String userId):
与setAssignee(String,String)的区别在于,如果任务>已经分配了用户,则在此处进行检查。不检查标识组件是否知道用户。
回答我自己的问题。
查看了声明的方法源代码,以下是摘录:
if (!task.getAssignee().equals(userId))
{
throw new ActivitiTaskAlreadyClaimedException(task.getId(), task.getAssignee());
}
else
{
task.setAssignee(userId);
}
commandContext.getHistoryManager().recordTaskClaim(taskId);
从上面很明显,这是对索赔的额外帮助:
- 如果任务已分配,则引发异常
- 记录已声明任务的历史记录