工作流UserTask的使用

工作流流程图:

工作流配置:

<?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");
  }

}

猜你喜欢

转载自topmanopensource.iteye.com/blog/1319395