`
panshaobinSB
  • 浏览: 203927 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

开始jbpm之旅(三)

    博客分类:
  • jbpm
 
阅读更多
接下来要开始来学习一下标签了
一个JPDL文件中一般有以下标签:
  • 1,start
  • 2,state
  • 3,end
  • 4,task
  • 5,sub-process
  • 6,customer
  • 7,decision
  • 8,fork-join


第一个:start,end, 一个是入口,一个是出口
<start>
  <transition to="a" />
</start>
.....
<end name="z" />


第二个:state(一个阻塞的阶段)
(1)
<state name="a">
  <transition to="b" />
</state>

如果我们想知道流程实例在那个状态的话,
Execution executionInA = processInstance.findActiveExecutionIn("a");

如果不为空的话就是处于这个阶段;

在业务都处理了,就要让流程继续了,
executionService.signalExecutionById(executionInA.getId());


(2)
<state name="a">
  <transition name="a1" to="b" />
   <transition name="a2" to="c" />
</state>
<state name="b" />
<state name="c" />

如果有多分支的话,就要传人变量进行选择
processInstance = executionService.signalExecutionById(executionInA.getId(),"a2");


判断是否处于指定的流程:
processInstance.isActive("b");

第三个,decision(根据最先匹配的一个条件自动流出)
(1)
<decision expr="#{content}" name="d">
  <transition name="e" to="e1">
  <transition name="f" to="e2">
  <transition name="g" to="e3">
</decision>

只要搞定表达式就可以了:
Map<String,Object> map= new HashMap<String, Object>();
map.put("content","f");
executionService.startProcessInstanceByKey("流程名",map);

这样就流到f分支了

(2)
<decision  name="d">
  <handler class="com.handler.Content" />
  <transition name="e" to="e1">
  <transition name="f" to="e2">
  <transition name="g" to="e3">
</decision>

Content类的实现
public class Content implements DecisionHandler{
   public String decide(OpenExecution execution){
       String content = (String) execution.getVariable("content");
       if (content.equals("good")){
            return "e";
    }
         if (content.equals("bad")){
            return "f";
    }
        return "g";
}
}


我们要传值,让流程通向f:
Map<String,Object> map= new HashMap<String, Object>();
map.put("content","bad");
executionService.startProcessInstanceByKey("流程名",map);


比较:state与decision很相似,只是当没有条件满足时,state是默认第一分支流出,而decision呢就是直接报错了。


第四个,fork-join
<fork name="fork">
  <transition name="e" to="e1">
  <transition name="f" to="e2">
  <transition name="g" to="e3">
</fork>
<state name="e1">
  <transition to="one join" />
</state>
<state name="e2">
  <transition to="one join" />
</state>
<state name="e3">
  <transition to="final join" />
</state>
<join name="one join">
   <transition to="another state" />
</join>
<state name="another state">
  <transition to="final join" />
</state>
<join name="final join">
   <transition to="end" />
</join>
<end name="end" />


在执行fork流程后,会有三个活动状态
processInstance.findActiveExcutionIn("e1");
processInstance.findActiveExcutionIn("e2");
processInstance.findActiveExcutionIn("e3");


join标签的两个属性是multiplicity,lockmode,一个是那个可以指定那个multiplicity的数量就是满足条件聚合了,lockmode是为了指定Hibernate的数据锁模式,防止死锁。

第五个,task,人工任务
<task name="review" assignee="#{order.owner}" >
   <transition to="wait" />
</task> 


public class Order implements Serializable {
  String owner;
  public Order(String owner){
     this.owner = owner ;
}

public String getOwner(){
  return owner;
}

public void setOwner(String owner){
  this.owner = owner;
}
}


order 对象的传入
Map<String,Object> map= new HashMap<String, Object>();
map.put("order",new Order("tom"));
executionService.startProcessInstanceByKey("流程名",map);

也可以直接assigned="tom"
tom所拥有的任务列表是:
List<Task> taskList = taskService.findPersonalTasks("tom");


task标签的candidate-groups和candidate-users可以指定多个用户组或用户;

<task name="review" assignee="group" >
   <transition to="wait" />
</task> 


身份认证服务:identityService是用来建立成员与组的关系的
建组group:
identityService.createGroup("group");

建用户tom:
identityService.createUser("tom","tom","alex","jerry");

建立用户关系:
identityService.createMembership("tom","group");


查找tom的任务列表:
taskService.findGroupTasks("tom");

tom接受了任务:
taskService.takeTask(task.getId(),"tom");

获得任务变量集:
Set<String> variableNames = taskService.getVariableNames(taskId);
Map<String,Object> variables = taskService.getVariables(taskId,variableNames);

将任务变量设置到任务中:
taskService.setVariables(taskId, variables);


如果有同名的变量的话会覆盖原来?

用处理器分配任务:
<task name="">
 <assignment-handler class="com.MyHandler">
    <field name="assignee" >
        <string value="tom" />
    </field>
 </assignment-handler>
 <transition to="wait" />
</task>


com.MyHandler的实现:
public class MyHandler implements AssignmentHandler {
 //这个assignee已经在JPDL中注入了
  String assignee;
  public void assign(Assignable assignable , OpenExecution execution){
    assignable.setAssignee(assignee);
}
}


任务分配中的泳道:
一个泳道属于一个人的,等于把泳道内的任务分配给一个人:
<swimlane name="swimlane is here" candidate-groups="group" />
<start>
  <transition to="into task" />
</start>
<task name="into task" swimlane="swimlane is here" >
   <transition to="next task" />
</task>
<task name="next task" swimlane="swimlane is here" >
</task>


如果group 用户组中的 tom用户接受了任务的话 , 就会在这个流程实例中被固化成分配者。
tom接受任务:
taskService.takeTask(taskId, "tom");
taskService.completeTask(taskId);

分享到:
评论

相关推荐

    开始jbpm之旅(二)

    【标题】"开始jbpm之旅(二)" 涉及的知识点主要集中在jbpm这个开源工作流管理系统上,这是对前一章节的延续,旨在帮助读者深入理解和掌握jbpm的使用。jbpm是一个用于建模、执行和管理业务流程的Java平台。在这一阶段...

    jbpm开发入门指南

    jbpm(Java Business Process Management)是一款开源的工作流程管理系统,它为业务流程的建模、部署、执行和监控提供了全面的解决方案。...了解和掌握上述知识点,将为你的jbpm开发之旅打下坚实的基础。

    MyEclipse 10 JBPM 配置

    通过以上步骤,你已经在MyEclipse 10中成功配置了JBPM开发环境,可以开始你的业务流程管理应用的开发之旅了。记得在开发过程中不断学习和熟悉JBPM的相关概念和技术,如工作流定义、任务节点、事件处理等,以提升你的...

    jbpm4.4学习教程

    jbpm4.4学习教程是一套专为初学者设计的教育资源,旨在帮助用户掌握jbpm这一业务流程管理(Business Process Management)框架的第4.4版本...希望这个教程能为您的学习之旅提供全面的指导,助您成为jbpm的熟练使用者。

    jBPM3的学习心得

    **jBPM3学习心得** jBPM3是一款开源的工作流管理系统,主要用于处理业务流程的自动化和管理。它提供了一套完整的解决方案,包括流程建模、执行和监控,...希望我的这些学习心得能为你的jBPM3之旅提供一些参考和启示。

    深入浅出jBPM.1-6章测试代码_jbpm-test.rar

    《深入浅出jBPM:1-6章测试代码详解》 jBPM,全称为Java Business Process Management,是一款开源的工作流管理...希望这篇关于《深入浅出jBPM:1-6章测试代码详解》的内容能对你在jBPM的学习之旅中提供有价值的指导。

    JBPM4工作流应用开始指南.rar

    第一篇 jBPM工作流开发基础 1 第1章 工作流基础 2 1.1 工作流概念 2 1.1.1 工作流管理思想之于企业现代化管理 2 1.1.2 工作流技术在企业中的应用 5 1.1.3 如何从一个开发者的角度看工作流技术 6 1.2 工作流管理系统...

    JBPM 开发指南

    为了开始 JBPM 的开发之旅,你需要做一些准备工作: - **下载 JBPM**: 你可以从官方网站 [http://www.jboss.com/products/jbpm](http://www.jboss.com/products/jbpm) 下载最新的 JBPM 版本。本文档使用的是 3.2.1 ...

    jbpm-bpel-1.1.1 userguide\

    开始使用前,首先需要获取jBPM BPEL组件及JBoss应用服务器。这两个组件是实现BPEL流程执行的基础平台。 #### Apache Ant安装 Ant是一个基于Java的构建工具,对于编译、部署jBPM BPEL应用程序至关重要。确保Ant正确...

    OA管理系统MyOA

    工作流的起源以及发展作了简单的介绍,其中主要介绍了在工作流领域的 BPMN2.0 规范,BPMN2.0 规范为工作流应用提供了语言以及图形的标准,在 1.2 小节介绍 ...Activiti 的简单介绍后,本书将带领读者开始 Activiti 之旅

    yaoqiang-bpmn-editor-2.0.91.jar.zip_bpmn_yaoqiang

    yaoqiang BPMN2.0设计器是一款专为流程图设计打造的工具,主要用于支持Activiti和JBPM等流行的业务流程管理系统。...通过下载并解压`yaoqiang-bpmn-editor-2.0.91.jar.zip`文件,用户即可开始他们的流程设计之旅。

    新手如何学习编程.doc

    ### 新手如何学习编程 对于初次接触编程领域的新手而言,如何有效地学习编程是一大挑战。本文将根据“新手如何...希望上述建议能够帮助初学者们更好地开启编程之旅。记住,兴趣是最好的老师,持之以恒是成功的秘诀。

    baidu全景图flex设计器

    在提供的文件名称列表中,“jbpm”可能指的是Java Business Process Management(Java业务流程管理)系统,这与全景图设计器似乎没有直接关联,但可能暗示着该设计器支持与BPM系统的集成。BPM系统用于管理、设计和...

Global site tag (gtag.js) - Google Analytics