环境:Eclipse 3.5 + java 6 + MySQL 5.5 + jBPM 4.4
 
1、建立 Java Project;
2、拷贝 XML配置文件放进工程目录;
3、 建立 JPDL文件,画流程图;
4、编写测试类;
 
完成的项目目录:
  
 
jBPM 流程图:
 
 
helloword.jpdl.xml:
<?xml version="1.0" encoding="UTF-8"?>

<process name="helloword" xmlns="http://jbpm.org/4.4/jpdl">
<start g="132,24,48,48" name="start1">
<transition g="-52,-22" name="to task1" to="提交申请"/>
</start>
<end g="132,456,48,48" name="end1"/>
<task g="108,108,92,52" name="提交申请" assignee="员工">
<transition g="-49,-13" name="to task2" to="部门经理审批"/>
</task>
<task g="108,228,92,52" name="部门经理审批" assignee="部门经理">
<transition g="-48,-12" name="to task3" to="总经理审批"/>
</task>
<task g="108,348,92,52" name="总经理审批" assignee="总经理">
<transition g="-48,-11" name="to end1" to="end1"/>
</task>
</process>
 
 
测试类:Helloword.java
package com.guilin.jbpm;

import java.util.List;

import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.task.Task;
import org.junit.Test; public class Helloword { private ProcessEngine processEngine = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine(); // 部署流程定义
@Test
public void deployProcessDefinition() {
processEngine.getRepositoryService().createDeployment()
.addResourceFromClasspath("com/guilin/jbpm/helloword.jpdl.xml")
.addResourceFromClasspath("com/guilin/jbpm/helloword.png")
.deploy();
System.out.println("部署流程完毕!");
} // 启动流程实例
@Test
public void startProcessInstance() {
processEngine.getExecutionService().startProcessInstanceByKey("helloword");
System.out.println("启动流程实例成功!");
} // 查询我的任务列表
@Test
public void findMyTaskList() {
String[] userIds = { "员工", "部门经理", "总经理" }; for (int i = 0; i < userIds.length; i++) {
// 查询任务
List<Task> tasks = processEngine.getTaskService()
.findPersonalTasks(userIds[i]); // 显示任务信息
for (Task task : tasks) {
System.out.println("-------------------------------------------------");
System.out.println("任务ID=" + task.getId() + ", 任务名称="
+ task.getName() + ", 任务办理人=" + task.getAssignee()
+ ", 任务创建时间=" + task.getCreateTime());
}
}
} // 办理任务
@Test
public void completeTask() {
// 任务 ID
String taskId = "60001";
processEngine.getTaskService().completeTask(taskId);
System.out.println(taskId + "任务完成!");
} }
 
测试过程:
    灰色部分为控制台输出:
  • 执行部署流程:deployProcessDefinition

        部署流程完毕!
  • 启动第一个流程实例:startProcessInstance
        启动流程实例成功!
  • 查询任务列表:findMyTaskList
    -------------------------------------------------

    任务ID=10002, 任务名称=提交申请, 任务办理人=员工, 任务创建时间=2013-07-16 11:20:18.0

  • 再启动第二个流程实例:startProcessInstance
  • 查询任务列表:findMyTaskList

    任务ID=, 任务名称=提交申请, 任务办理人=员工, 任务创建时间=2013-07-16 11:22:11.0
    任务ID=20002, 任务名称=提交申请, 任务办理人=员工, 任务创建时间=2013-07-16 11:20:18.0

    任务ID=30002, 任务名称=提交申请, 任务办理人=员工, 任务创建时间=2013-07-16 11:22:19.0
    -------------------------------------------------
    -------------------------------------------------
  • 办理任务:completeTask; taskId 改为:10002
        10002任务完成!
  • 查询任务列表:findMyTaskList

    任务ID=20002, 任务名称=提交申请, 任务办理人=员工, 任务创建时间=2013-07-16 11:22:11.0
    任务ID=30002, 任务名称=提交申请, 任务办理人=员工, 任务创建时间=2013-07-16 11:22:19.0
    -------------------------------------------------
    任务ID=, 任务名称=部门经理审批, 任务办理人=部门经理, 任务创建时间=2013-07-16 11:24:45.0
    -------------------------------------------------

    -------------------------------------------------

  • 办理任务:completeTask; taskId 改为:40001

        40001任务完成!
  • 查询任务列表:findMyTaskList
    任务ID=20002, 任务名称=提交申请, 任务办理人=员工, 任务创建时间=2013-07-16 11:22:11.0
    任务ID=30002, 任务名称=提交申请, 任务办理人=员工, 任务创建时间=2013-07-16 11:22:19.0
    -------------------------------------------------
    -------------------------------------------------
    任务ID=, 任务名称=总经理审批, 任务办理人=总经理, 任务创建时间=2013-07-16 11:28:52.0

    -------------------------------------------------

  • 办理任务:completeTask; taskId 改为:50001
        50001任务完成!
  • 查询任务列表:findMyTaskList
    任务ID=20002, 任务名称=提交申请, 任务办理人=员工, 任务创建时间=2013-07-16 11:22:11.0
    任务ID=30002, 任务名称=提交申请, 任务办理人=员工, 任务创建时间=2013-07-16 11:22:19.0
    -------------------------------------------------
    -------------------------------------------------

    -------------------------------------------------

    到此,第一个流程实例完成。
 
 

工作流_JBPM之Helloword的更多相关文章

  1. activity(工作流)初步学习记录

    1.概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现某个预期 ...

  2. Activiti工作流引擎学习(一)

    1.部署对象和流程定义相关表:RepositoryService act_re_deployment: 部署对象表:一次部署的多个文件的信息,对于不需要的流程可以删除和修改 act_re_procde ...

  3. Oozie分布式任务的工作流——Spark篇

    Spark是现在应用最广泛的分布式计算框架,oozie支持在它的调度中执行spark.在我的日常工作中,一部分工作就是基于oozie维护好每天的spark离线任务,合理的设计工作流并分配适合的参数对于 ...

  4. Oozie分布式任务的工作流——邮件篇

    在大数据的当下,各种spark和hadoop的框架层出不穷.各种高端的计算框架,分布式任务如乱花般迷眼.你是否有这种困惑!--有了许多的分布式任务,但是每天需要固定时间跑任务,自己写个调度,既不稳定, ...

  5. 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器

    企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...

  6. .Net开源工作流Roadflow的使用与集成

    序言 最近公司要整理公司内部oa系统,需要使用到工作流,所以就开始了开源工作流挑选,使用,到集成到公司内部系统的工作. 首先在网上搜了文档,自己也有补充,整理啦国内几款工作流的比较,由于没有个个击破式 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(42)-工作流设计-表建立

    系列目录 工作流在实际应用中还是比较广泛,网络中存在很多工作流的图形化插件,可以做到拉拽的工作流设计,非常简便,再配合第三方编辑器,可以直接生成表单,我没有刻意的浏览很多工作流的实际设计,我认为工作流 ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(43)-工作流设计-字段分类设计

    系列目录 建立好42节的表之后,每个字段英文表示都是有意义的说明.先建立,就知道表的关系和用处了,当然,我的设计只是一个参考,你可能有很多改进的地方. 我们的工作流具体细节流程是这样的: 最终我们的模 ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(44)-工作流设计-设计表单

    系列目录 设计表单是比较复杂的一步,完成一个表单的设计其实很漫长,主要分为四步. 开始之前先说说表的结构. 其实表Flow_Form与Flow_FormContent设计是有一个缺陷的.我总共是设置最 ...

随机推荐

  1. HTML5每日一练之progress标签的应用

    progress标签:从名字上来看,估计大家也能猜到这个标签是什么标签了,没错,他是一个进度条.在HTML5中我们终于可以不用模拟了. <progress id="W3Cfuns_pr ...

  2. HDU 2516 取石子游戏(FIB博弈)

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. Umbraco中更换IndexSet中的NodeType后,搜索页面没有做出对应更改的效果

    在项目开发中,使用ExternalSearcher,有一个ExamineIndex.config文件中存放ExternalIndexSet 开始时是这样的 <!-- Default Indexs ...

  4. 建立ODBC数据源(基于windows)

    1. win+r 2. control 3. 打开数据源 4. 点击添加 5. 选择Oracle in OraClient11g_home1 ,点击完成 6. 填写,查看具体参数信息点击Help 7. ...

  5. 如何设置Grunt

    原文地址: Step 1: Install Node.js Download a Node installer and run it. Installation packages are availa ...

  6. 16.ARC

    Swift 使用自动引用计数(ARC)机制来跟踪和管理应用程序的内存.通常情况下,Swift 内存管理机制会一直起作用,我们无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自动释放其占用的 ...

  7. PHP操作MongoDB数据库

    http://blog.csdn.net/sunboy_2050/article/details/49449319

  8. 系列文章--JavaScript教程文章

    JavaScript教程文章专题列表如下: 我们应该如何去了解JavaScript引擎的工作原理 JavaScript探秘:编写可维护的代码的重要性 JavaScript探秘:谨慎使用全局变量 Jav ...

  9. PostgreSQL关闭不了时怎么办

    停止模式分为: smart, fast, immediate : 分别对应着:    SIGTERM, SIGINT, SIGQUIT 信号 当我采用 fast模式无法关机的时候,可以使用如下办法: ...

  10. CSS规则整理

    一. 善用css缩写规则 /*注意上.右.下.左的书写顺序*/1. 关于边距(4边):1px 2px 3px 4px (上.右.下.左)1px 2px 3px (省略的左等于右)1px 2px (省略 ...