工作流流程图:
工作流配置:
<?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");
}
}