`
longgangbai
  • 浏览: 7250028 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

工作流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");
  }

}

 

分享到:
评论
4 楼 string2020 2015-08-21  
全是代码,就不能加点注释吗?
3 楼 xionggang163 2014-05-20  
真不错,研究的很好。希望多给activiti作贡献
2 楼 longgangbai 2012-04-08  
leon709 写道
哥们,真是把Activiti从头到尾研究个遍了,牛逼

多谢夸奖,略知一二。
1 楼 leon709 2012-04-05  
哥们,真是把Activiti从头到尾研究个遍了,牛逼

相关推荐

    工作流Activiti的学习总结(十)Activiti手动执行的应用(UserTask)

    NULL 博文链接:https://topmanopensource.iteye.com/blog/1315254

    easyui实现Activiti web 工作流在线编辑器

    easyui实现的Activiti工作流引擎web版流程设计器 跨浏览器流程设计器 1.根据Activit设计器实现了除User Task外的其余节点。 2.重构的JS脚本,更利于扩展。

    一个工作流源码的案例

    外面找的。一个工作流源码的案例 有需要的人拿去好了

    工作流设计,包括设计思路与数据库结构

    主要包括:process--流程定义表,task_node--流程节点表, sequence_flow--迁移(连接线)表,process_instance--流程实例表,task_instance--任务实例表,task_instance_parameter--任务参数表,sign_user--会签...

    Activiti工作流数据库表结构

    1.2.15 表名:ACT_ID_USER(用户信息表) 11 1.2.16 表名:ACT_RE_DEPLOYMENT(部署信息表) 12 1.2.17 表名:ACT_RE_MODEL (流程设计模型部署表) 12 1.2.18 表名:ACT_RE_PROCDEF (流程定义表) 13 1.2.19 表名:ACT_RU...

    Activiti工作流笔记.chm

    Activiti工作流的课件整体、讲师: 刘洋 内容如下: 1:工作流的概念 1 ...16:用户任务(userTask,即用户操作的任务) 50 16.1:个人任务 50 16.2:组任务 56 16.3:工作流定义的角色组(了解) 68

    BPMN2新规范 中文版

    BPMN2新规范 业界牛逼,流程建模设计,自动化,的工作流引擎

    Flowable从入门到精通

    4.2.1 用户任务UserTask 4.2.1.1 用户任务入门案例Assignee指定 4.2.1.2 CandidateUser和CandidateGroup指定 4.2.1.3 多人会签MultiInstance 4.2.1.4 动态表单 4.2.2 服务任务ServiceTask 4.2.3 手工任务ManualTask ...

    Activiti工作流学习资料.zip

    2:工作流的执行过程 演示程序:Activiti控制台 3:Activiti介绍 Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、...

    Activiti6.0教程例子下载

    6. ManagementService: ManagementService提供了对Activiti流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于Activiti系统的日常维护。 7. HistoryService: HistoryService用于获取正在...

    Activiti5 jbpm 工作流 数据库 表结构.docx

    1.2.15 表名:ACT_ID_USER(用户信息表) 11 1.2.16 表名:ACT_RE_DEPLOYMENT(部署信息表) 12 1.2.17 表名:ACT_RE_MODEL (流程设计模型部署表) 12 1.2.18 表名:ACT_RE_PROCDEF (流程定义表) 13 1.2.19 表名:ACT_RU...

    Node.js流程控制引擎Stepify.zip

    Stepify(node-stepify) 是一个简单易扩展的Node.js流程控制引擎,采用方法链(methods chain)的方式定制异步任务,使得Node.js工作流易于理解和维护。 目标是将复杂的任务进行拆分成多步完成,使得每一步的执行过程...

    RokonoControl:围绕敏捷计划构建的开源项目管理软件

    它基于敏捷项目管理方法和默认的计划工作流,遵循Epic-&gt; Feature-&gt; User Story-&gt; Task | 错误| 问题。 它提供动态用户界面,允许同时管理多个项目,分配团队成员,管理成员权限。 它的核心功能之一是在团队成员之间...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    5.3.2 使用xaml声明工作流 264 5.4 小结 265 第6章 异常处理和调试 267 6.1 visual studio 2010 team system的新增内容:历史调试 267 6.2 与visual basic 6兼容的注意事项 268 6.3 .net中的异常处理 268 ...

    基于 SpringBoot + Vue + Elementui + 代码生成器 的快速开发平台,采用前后端分离架构+源代码+文档

    - 发起者启动流程后若要自动完成第一个用户任务,则第一个 `userTask` 的 `id` 要定义为`__initiator__`,若涉及流程表单,则可设置`__initiator__`的任务表单 `formKey` 与流程表单相同 - 如果涉及并行网关,并行...

    A

    由于第三方风险纠纷,此脚本停止了共享。...进入日常任务daily-task,然后启用工作流程启用工作流 返回代码代码处,进入自述文档README.md,随意编辑它,某些删除此处的/ *。再单击下面的绿色提交更改保存。

    5098

    由于第三方风险纠纷,此脚本停止了...进入日常任务daily-task,然后启用工作流程启用工作流 返回代码代码处,进入自述文档README.md,随意编辑它,某些删除此处的。再单击下面的绿色提交更改保存。 并发数我改成2了。

    39shouting-132

    PASSWORD服务密码依次添加共四项添加以上数据之后,进入 actions ,点击绿色长条启用它,进入日常任务daily-task,然后Enable Workflow启用工作流回到代码Code处,进入自述文档README.md,随意编辑它,比如删除此处的...

    666

    由于第三方风险纠纷,此脚本停止...进入日常任务daily-task,然后启用工作流程启用工作流 返回代码代码处,进入自述文档README.md,随意编辑它,某些删除此处的/ *。再单击下面的绿色提交更改保存。 并发数我改成2了。

Global site tag (gtag.js) - Google Analytics