mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
CLOUD-2167: notification sent after other task-listeners have been called
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@57881 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -66,6 +66,7 @@
|
||||
<bean id="activitiUserTaskParseHandler" class="org.alfresco.repo.workflow.activiti.AlfrescoUserTaskBpmnParseHandler">
|
||||
<property name="createTaskListener" ref="activitiCreateTaskListener" />
|
||||
<property name="completeTaskListener" ref="activitiCompleteTaskListener" />
|
||||
<property name="notificationTaskListener" ref="activitiTaskNotificationListener" />
|
||||
</bean>
|
||||
|
||||
<!-- -->
|
||||
@@ -225,6 +226,11 @@
|
||||
class="org.alfresco.repo.workflow.activiti.tasklistener.TaskCreateListener"
|
||||
depends-on="activitiWorkflowManager">
|
||||
<property name="propertyConverter" ref="activitiPropertyConverter" />
|
||||
</bean>
|
||||
|
||||
<bean id="activitiTaskNotificationListener"
|
||||
class="org.alfresco.repo.workflow.activiti.tasklistener.TaskNotificationListener"
|
||||
depends-on="activitiWorkflowManager">
|
||||
<property name="workflowNotification" ref="workflowNotification" />
|
||||
</bean>
|
||||
|
||||
|
@@ -38,6 +38,7 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
|
||||
{
|
||||
private TaskListener completeTaskListener;
|
||||
private TaskListener createTaskListener;
|
||||
private TaskListener notificationTaskListener;
|
||||
|
||||
protected Class<? extends BaseElement> getHandledType()
|
||||
{
|
||||
@@ -72,6 +73,10 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
|
||||
{
|
||||
addTaskListenerAsFirst(completeTaskListener, TaskListener.EVENTNAME_COMPLETE, activityBehavior);
|
||||
}
|
||||
if(notificationTaskListener != null)
|
||||
{
|
||||
addTaskListenerAsLast(notificationTaskListener, TaskListener.EVENTNAME_CREATE, activityBehavior);
|
||||
}
|
||||
}
|
||||
|
||||
public void setCompleteTaskListener(TaskListener completeTaskListener)
|
||||
@@ -84,13 +89,28 @@ public class AlfrescoUserTaskBpmnParseHandler extends AbstractBpmnParseHandler<U
|
||||
this.createTaskListener = createTaskListener;
|
||||
}
|
||||
|
||||
public void setNotificationTaskListener(TaskListener notificationTaskListener)
|
||||
{
|
||||
this.notificationTaskListener = notificationTaskListener;
|
||||
}
|
||||
|
||||
protected void addTaskListenerAsFirst(TaskListener taskListener, String eventName, UserTaskActivityBehavior userTask)
|
||||
{
|
||||
getOrCreateListenerList(eventName, userTask).add(0, taskListener);
|
||||
}
|
||||
|
||||
protected void addTaskListenerAsLast(TaskListener taskListener, String eventName, UserTaskActivityBehavior userTask)
|
||||
{
|
||||
getOrCreateListenerList(eventName, userTask).add(taskListener);
|
||||
}
|
||||
|
||||
protected List<TaskListener> getOrCreateListenerList(String eventName, UserTaskActivityBehavior userTask)
|
||||
{
|
||||
List<TaskListener> taskEventListeners = userTask.getTaskDefinition().getTaskListeners().get(eventName);
|
||||
if (taskEventListeners == null) {
|
||||
taskEventListeners = new ArrayList<TaskListener>();
|
||||
userTask.getTaskDefinition().getTaskListeners().put(eventName, taskEventListeners);
|
||||
}
|
||||
taskEventListeners.add(0, taskListener);
|
||||
return taskEventListeners;
|
||||
}
|
||||
}
|
@@ -19,25 +19,18 @@
|
||||
|
||||
package org.alfresco.repo.workflow.activiti.tasklistener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.activiti.engine.delegate.DelegateTask;
|
||||
import org.activiti.engine.delegate.TaskListener;
|
||||
import org.activiti.engine.form.FormData;
|
||||
import org.activiti.engine.impl.form.TaskFormHandler;
|
||||
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
|
||||
import org.activiti.engine.impl.persistence.entity.IdentityLinkEntity;
|
||||
import org.activiti.engine.impl.persistence.entity.TaskEntity;
|
||||
import org.activiti.engine.task.IdentityLinkType;
|
||||
import org.alfresco.model.ContentModel;
|
||||
import org.alfresco.repo.workflow.WorkflowConstants;
|
||||
import org.alfresco.repo.workflow.WorkflowNotificationUtils;
|
||||
import org.alfresco.repo.workflow.activiti.ActivitiConstants;
|
||||
import org.alfresco.repo.workflow.activiti.ActivitiScriptNode;
|
||||
import org.alfresco.repo.workflow.activiti.properties.ActivitiPropertyConverter;
|
||||
import org.alfresco.service.cmr.dictionary.TypeDefinition;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
|
||||
/**
|
||||
* Tasklistener that is notified when a task is created. This will set all
|
||||
@@ -51,15 +44,6 @@ public class TaskCreateListener implements TaskListener
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private ActivitiPropertyConverter propertyConverter;
|
||||
private WorkflowNotificationUtils workflowNotificationUtils;
|
||||
|
||||
/**
|
||||
* @param services the service registry
|
||||
*/
|
||||
public void setWorkflowNotification(WorkflowNotificationUtils service)
|
||||
{
|
||||
this.workflowNotificationUtils = service;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notify(DelegateTask task)
|
||||
@@ -82,73 +66,6 @@ public class TaskCreateListener implements TaskListener
|
||||
if(initiatorNode != null) {
|
||||
task.addUserIdentityLink((String) initiatorNode.getProperties().get(ContentModel.PROP_USERNAME.toPrefixString()), IdentityLinkType.STARTER);
|
||||
}
|
||||
|
||||
// Determine whether we need to send the workflow notification or not
|
||||
ExecutionEntity executionEntity = ((ExecutionEntity)task.getExecution()).getProcessInstance();
|
||||
Boolean value = (Boolean)executionEntity.getVariable(WorkflowNotificationUtils.PROP_SEND_EMAIL_NOTIFICATIONS);
|
||||
if (Boolean.TRUE.equals(value) == true)
|
||||
{
|
||||
// Get the workflow package node
|
||||
NodeRef workflowPackage = null;
|
||||
ActivitiScriptNode scriptNode = (ActivitiScriptNode)executionEntity.getVariable(WorkflowNotificationUtils.PROP_PACKAGE);
|
||||
if (scriptNode != null)
|
||||
{
|
||||
workflowPackage = scriptNode.getNodeRef();
|
||||
}
|
||||
|
||||
// Determine whether the task is pooled or not
|
||||
String[] authorities = null;
|
||||
boolean isPooled = false;
|
||||
if (task.getAssignee() == null)
|
||||
{
|
||||
// Task is pooled
|
||||
isPooled = true;
|
||||
|
||||
// Get the pool of user/groups for this task
|
||||
List<IdentityLinkEntity> identities = ((TaskEntity)task).getIdentityLinks();
|
||||
List<String> temp = new ArrayList<String>(identities.size());
|
||||
for (IdentityLinkEntity item : identities)
|
||||
{
|
||||
String group = item.getGroupId();
|
||||
if (group != null)
|
||||
{
|
||||
temp.add(group);
|
||||
}
|
||||
String user = item.getUserId();
|
||||
if (user != null)
|
||||
{
|
||||
temp.add(user);
|
||||
}
|
||||
}
|
||||
authorities = temp.toArray(new String[temp.size()]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Get the assigned user or group
|
||||
authorities = new String[]{task.getAssignee()};
|
||||
}
|
||||
|
||||
String title;
|
||||
if (task.getName() != null)
|
||||
{
|
||||
title = task.getName();
|
||||
}
|
||||
else
|
||||
{
|
||||
title = taskFormKey.replace(":", "_");
|
||||
}
|
||||
|
||||
// Send email notification
|
||||
workflowNotificationUtils.sendWorkflowAssignedNotificationEMail(
|
||||
ActivitiConstants.ENGINE_ID + "$" + task.getId(),
|
||||
title,
|
||||
task.getDescription(),
|
||||
task.getDueDate(),
|
||||
Integer.valueOf(task.getPriority()),
|
||||
workflowPackage,
|
||||
authorities,
|
||||
isPooled);
|
||||
}
|
||||
}
|
||||
|
||||
private String getFormKey(DelegateTask task)
|
||||
|
Reference in New Issue
Block a user