提交 35a572c1 编写于 作者: F fheremans

ACT-1627: Not throwing assignment event on every update

上级 31a4491e
......@@ -43,6 +43,7 @@ import org.activiti.engine.task.DelegationState;
import org.activiti.engine.task.IdentityLink;
import org.activiti.engine.task.IdentityLinkType;
import org.activiti.engine.task.Task;
import org.apache.commons.lang3.StringUtils;
/**
* @author Tom Baeyens
......@@ -61,6 +62,7 @@ public class TaskEntity extends VariableScopeImpl implements Task, DelegateTask,
protected String owner;
protected String assignee;
protected String initialAssignee;
protected DelegationState delegationState;
protected String parentTaskId;
......@@ -528,7 +530,7 @@ public class TaskEntity extends VariableScopeImpl implements Task, DelegateTask,
if (assignee==null && this.assignee==null) {
// ACT-1923: even if assignee is unmodified and null, this should be stored in history
// ACT-1923: even if assignee is unmodified and null, this should be stored in history.
if (commandContext!=null) {
commandContext
.getHistoryManager()
......@@ -550,7 +552,10 @@ public class TaskEntity extends VariableScopeImpl implements Task, DelegateTask,
getProcessInstance().involveUser(assignee, IdentityLinkType.PARTICIPANT);
}
fireEvent(TaskListener.EVENTNAME_ASSIGNMENT);
if(!StringUtils.equals(initialAssignee, assignee)) {
fireEvent(TaskListener.EVENTNAME_ASSIGNMENT);
initialAssignee = assignee;
}
if(commandContext.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
if(dispatchAssignmentEvent) {
......@@ -569,6 +574,9 @@ public class TaskEntity extends VariableScopeImpl implements Task, DelegateTask,
/* plain setter for persistence */
public void setAssigneeWithoutCascade(String assignee) {
this.assignee = assignee;
// Assign the assignee that was persisted before
this.initialAssignee = assignee;
}
public void setOwner(String owner) {
......
......@@ -64,6 +64,54 @@ public class TaskListenerTest extends PluggableActivitiTestCase {
runtimeService.deleteProcessInstance(processInstance.getProcessInstanceId(), "");
}
/**
* Validate fix for ACT-1627: Not throwing assignment event on every update
*/
@Deployment(resources = {"org/activiti/examples/bpmn/tasklistener/TaskListenerTest.bpmn20.xml"})
public void testTaskAssignmentListenerNotCalledWhenAssigneeNotUpdated() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("taskListenerProcess");
Task task = taskService.createTaskQuery().singleResult();
assertEquals("TaskCreateListener is listening!", task.getDescription());
// Set assignee and check if event is received
taskService.setAssignee(task.getId(), "kermit");
task = taskService.createTaskQuery().singleResult();
assertEquals("TaskAssignmentListener is listening: kermit", task.getDescription());
// Reset description and assign to same person. This should NOT trigger an assignment
task.setDescription("Clear");
taskService.saveTask(task);
taskService.setAssignee(task.getId(), "kermit");
task = taskService.createTaskQuery().singleResult();
assertEquals("Clear", task.getDescription());
// Set assignee through task-update
task.setAssignee("kermit");
taskService.saveTask(task);
task = taskService.createTaskQuery().singleResult();
assertEquals("Clear", task.getDescription());
// Update another property should not trigger assignment
task.setName("test");
taskService.saveTask(task);
task = taskService.createTaskQuery().singleResult();
assertEquals("Clear", task.getDescription());
// Update to different
task.setAssignee("john");
taskService.saveTask(task);
task = taskService.createTaskQuery().singleResult();
assertEquals("TaskAssignmentListener is listening: john", task.getDescription());
//Manually cleanup the process instance.
runtimeService.deleteProcessInstance(processInstance.getProcessInstanceId(), "");
}
@Deployment(resources = {"org/activiti/examples/bpmn/tasklistener/TaskListenerTest.bpmn20.xml"})
public void testTaskCompleteListener() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("taskListenerProcess");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册