@Override public void addListenerToParent(FlowableListener listener, BaseElement parentElement) { if (parentElement instanceof UserTask) { ((UserTask) parentElement).getTaskListeners().add(listener); } } }
@Override protected void executeValidation(BpmnModel bpmnModel, Process process, List<ValidationError> errors) { List<UserTask> userTasks = process.findFlowElementsOfType(UserTask.class); for (UserTask userTask : userTasks) { if (userTask.getTaskListeners() != null) { for (FlowableListener listener : userTask.getTaskListeners()) { if (listener.getImplementation() == null || listener.getImplementationType() == null) { addError(errors, Problems.USER_TASK_LISTENER_IMPLEMENTATION_MISSING, process, userTask, "Element 'class' or 'expression' is mandatory on executionListener"); } } } } }
public static boolean writeListeners(BaseElement element, boolean didWriteExtensionStartElement, XMLStreamWriter xtw) throws Exception { if (element instanceof HasExecutionListeners) { didWriteExtensionStartElement = writeListeners(ELEMENT_EXECUTION_LISTENER, ((HasExecutionListeners) element).getExecutionListeners(), didWriteExtensionStartElement, xtw); } // In case of a usertask, also add task-listeners if (element instanceof UserTask) { didWriteExtensionStartElement = writeListeners(ELEMENT_TASK_LISTENER, ((UserTask) element).getTaskListeners(), didWriteExtensionStartElement, xtw); } // In case of a process-element, write the event-listeners if (element instanceof Process) { didWriteExtensionStartElement = writeEventListeners(((Process) element).getEventListeners(), didWriteExtensionStartElement, xtw); } return didWriteExtensionStartElement; }
/** * Similar to {@link #getFieldExpression(DelegateExecution, String)}, but for use within a {@link TaskListener}. */ public static Expression getFieldExpression(DelegateTask task, String fieldName) { String eventHandlerId = task.getEventHandlerId(); if (eventHandlerId != null && task.getProcessDefinitionId() != null) { org.flowable.bpmn.model.Process process = ProcessDefinitionUtil.getProcess(task.getProcessDefinitionId()); UserTask userTask = (UserTask) process.getFlowElementMap().get(task.getTaskDefinitionKey()); FlowableListener flowableListener = null; for (FlowableListener f : userTask.getTaskListeners()) { if (f.getId() != null && f.getId().equals(eventHandlerId)) { flowableListener = f; } } if (flowableListener != null) { List<FieldExtension> fieldExtensions = flowableListener.getFieldExtensions(); if (fieldExtensions != null && fieldExtensions.size() > 0) { for (FieldExtension fieldExtension : fieldExtensions) { if (fieldName.equals(fieldExtension.getFieldName())) { return createExpressionForField(fieldExtension); } } } } } return null; }
} else if (element instanceof UserTask) { if (isTaskListener) { ((UserTask) element).getTaskListeners().add(listener); } else { ((UserTask) element).getExecutionListeners().add(listener);
if (otherElement.getTaskListeners() != null && !otherElement.getTaskListeners().isEmpty()) { for (FlowableListener listener : otherElement.getTaskListeners()) { taskListeners.add(listener.clone());
if (otherElement.getTaskListeners() != null && !otherElement.getTaskListeners().isEmpty()) { for (FlowableListener listener : otherElement.getTaskListeners()) { taskListeners.add(listener.clone());
public void executeTaskListeners(UserTask userTask, TaskEntity taskEntity, String eventType) { for (FlowableListener listener : userTask.getTaskListeners()) { String event = listener.getEvent(); if (event.equals(eventType) || event.equals(TaskListener.EVENTNAME_ALL_EVENTS)) { BaseTaskListener taskListener = createTaskListener(listener); if (listener.getOnTransaction() != null) { planTransactionDependentTaskListener(ExecutionHelper.getExecution(taskEntity.getExecutionId()), (TransactionDependentTaskListener) taskListener, listener); } else { taskEntity.setEventName(eventType); taskEntity.setEventHandlerId(listener.getId()); try { CommandContextUtil.getProcessEngineConfiguration().getDelegateInterceptor() .handleInvocation(new TaskListenerInvocation((TaskListener) taskListener, taskEntity)); } catch (Exception e) { throw new FlowableException("Exception while invoking TaskListener: " + e.getMessage(), e); } finally { taskEntity.setEventName(null); } } } } }
BpmnJsonConverterUtil.convertListenersToJson(((UserTask) activity).getTaskListeners(), false, propertiesNode);
for (FlowableListener taskListener : userTask.getTaskListeners()) { taskDefinition.addTaskListener(taskListener.getEvent(), createTaskListener(bpmnParse, taskListener, userTask.getId()));