工作流流程图:
工作流配置:
- <?xml version="1.0" encoding="UTF-8"?>
- <definitions id="definitions"
- xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
- xmlns:activiti="http://activiti.org/bpmn"
- targetNamespace="Examples">
- <process id="executionAndTaskListenerDelegation">
- <!-- 全局性 -->
- <extensionElements>
- <activiti:executionListener class="com.easyway.activiti.servicetask.FieldInjectedExecutionListener" event="start">
- <activiti:field name="fixedValue" stringValue="Yes, I am " />
- <activiti:field name="dynamicValue" expression="${sentenceGenerator.getSentence()}" />
- </activiti:executionListener>
- </extensionElements>
- <startEvent id="start" />
- <sequenceFlow id="flow1" sourceRef="start" targetRef="userTask" />
- <!-- 调用相关的工作流执行委托监听事件和任务监听事件-->
- <userTask id="userTask" name="Schedule meeting">
- <extensionElements>
- <activiti:executionListener event="start" delegateExpression="${myExecutionListenerBean}" />
- <activiti:taskListener event="create" delegateExpression="${myTaskListenerBean}" />
- </extensionElements>
- </userTask>
- <sequenceFlow id="flow3" sourceRef="userTask" targetRef="userTask3" />
- <!-- 调用相关的工作流执行监听事件-->
- <userTask id="userTask3">
- <extensionElements>
- <activiti:executionListener expression="${myPojo.myMethod(execution.event)}" event="end" />
- </extensionElements>
- </userTask>
- <sequenceFlow id="flow4" sourceRef="userTask3" targetRef="end" />
- <endEvent id="end" />
- </process>
- </definitions>
代码:
- package com.easyway.activiti.servicetask;
- import org.activiti.engine.runtime.ProcessInstance;
- /**
- * 1.全局性的:
- * <!-- 全局性 -->
- <extensionElements>
- <activiti:executionListener class="com.easyway.activiti.servicetask.FieldInjectedExecutionListener" event="start">
- <activiti:field name="fixedValue" stringValue="Yes, I am " />
- <activiti:field name="dynamicValue" expression="${sentenceGenerator.getSentence()}" />
- </activiti:executionListener>
- </extensionElements>
- 2.
- <userTask id="userTask" name="Schedule meeting">
- <extensionElements>
- <activiti:executionListener event="start" delegateExpression="${myExecutionListenerBean}" />
- <activiti:taskListener event="create" delegateExpression="${myTaskListenerBean}" />
- </extensionElements>
- </userTask>
- 3.
- <userTask id="userTask3">
- <extensionElements>
- <activiti:executionListener expression="${myPojo.myMethod(execution.event)}" event="end" />
- </extensionElements>
- </userTask>
- * @author longgangbai
- *
- * 2011-12-20 下午09:30:42
- */
- @ContextConfiguration("classpath:servicetaskSpringTest-context.xml")
- public class ExecutionAndTaskListenerDelegationExpressionTest extends SpringActivitiTestCase {
- @Deployment(resources={"diagrams/userTaskexecutionAndTaskListenerDelegationExpression.bpmn20.xml"})
- public void testExecutionAndTaskListenerDelegationExpression() {
- ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("executionAndTaskListenerDelegation");
- assertEquals("working", runtimeService.getVariable(processInstance.getId(), "executionListenerVar"));
- assertEquals("working", runtimeService.getVariable(processInstance.getId(), "taskListenerVar"));
- }
- }
- package com.easyway.activiti.servicetask;
- import org.activiti.engine.delegate.DelegateExecution;
- /**
- * @author longgangbai
- *
- * 2011-12-20 下午10:55:06
- */
- public class FieldInjectedExecutionListener implements ExecutionListener {
- private Expression fixedValue;
- private Expression dynamicValue;
- /* (non-Javadoc)
- * @see org.activiti.engine.delegate.ExecutionListener#notify(org.activiti.engine.delegate.DelegateExecution)
- */
- @Override
- public void notify(DelegateExecution execution) throws Exception {
- execution.setVariable("var", fixedValue.getValue(execution).toString() + dynamicValue.getValue(execution).toString());
- }
- }
- package com.easyway.activiti.servicetask;
- import org.activiti.engine.delegate.DelegateExecution;
- /**
- *
- * @author longgangbai
- *
- * 2011-12-20 下午09:32:45
- */
- public class ActivitiExecutionListenerBean implements ExecutionListener {
- public void notify(DelegateExecution execution) throws Exception {
- execution.setVariable("executionListenerVar", "working");
- }
- }