jBPM4.4:jPDL

jDPL是jBPM的突出的流程语言。jPDL的目标 是尽量精简和尽可能的开发者友好

 

<?xml version="1.0" encoding="UTF-8"?>

<process name="Purchase order" xmlns="http://jbpm.org/4.4/jpdl">

  <start>
    <transition to="Verify supplier" />
  </start>

  <state name="Verify supplier">
    <transition name="Supplier ok" to="Check supplier data" />
    <transition name="Supplier not ok" to="Error" />
  </state>

  <decision name="Check supplier data">
    <transition name="nok" to="Error" />
    <transition name="ok" to="Completed" />
  </decision>

  <end name="Completed" />

  <end name="Error" />

</process>
 

jPDL:

 

process

以<process 作为根节点,相关属性: name、key、version

 

start

在一个流程里必须有一个开始节点。 一个流程必须至少拥有一个开始节点。 开始节点必须有一个向外的流向,这个流向会

在流程启动的时候执行

 

State

一个等待状态节点。 流程处理的流向会在外部触发器调用提供的API之前一直等待。 状态节点和其他的活动 不一样, 它没有其他任何属性或元素。

 

state可以有多个transition,在发出signal的时候(executionService.signalExecutionById()的时候),可以给予signalName(给出transition的名字),指定执行路线。

 

decision

在多个选择中选择一条路径。也可以当做是一个决定。 一个决定活动拥有很多个向外的转移。当一个流向到达一个决定活动时, 会自动执行并决定交给哪个向外的转移。

判断transition中的条件(<condition expr=""  lang="">),自动选择路线。

  <decision name="evaluate document">
    <transition to="submit document">
      <condition expr="#{content=="good"}" />
    </transition>
    <transition to="try again">
      <condition expr="#{content=="not so good"}" />
    </transition>
    <transition to="give up" />
  </decision>
 

 

如果是唯一表达式,可以把expr放在decision节点中,在transition中,只需要在name属性中直接定义为表达式的值即可

  <decision name="evaluate document" expr="#{content}" >
    <transition name="good" to="submit document"  />
    <transition name="bad"  to="try again"  />
    <transition name="ugly" to="give up"  />
  </decision>
 

唯一性管理是继承了DecisionHandler接口的java类。 决定处理器负责选择 向外转移。

  <decision name="evaluate document">
    <handler class="org.jbpm.examples.decision.handler.ContentEvaluation" />
    <transition name="good" to="submit document" />
    <transition name="bad" to="try again" />
    <transition name="ugly" to="give up" />
  </decision>
 

concurrency并发

流程的并发路径可以使用 forkjoin 活动来建模。

fork出来,join结束

 

end结束

结束流向

默认情况下,结束活动会终结已完成流程处理实例。 因此在流程处理实例中, 仍然在活动的多个并发(concurrent)流向(concurrent) 也会结束

一个流程处理可以有多个end events

 

流向(execution)可以以不同的状态结束。可以用其他的方式列出流程处理实例的结果。 可以用end event的状态属性或者end-cancel 和end-error表示。

  <end name="ok" state="completed"/>
  <end-cancel name="bad request"/>
  <end-error name="internal server error"/>
 

task---重点

在任务组件中,为一个人创建一个任务。

属性:

 

任务分配者,谁来执行这个任务

assignee:

 

任务候选人

candidate-groups:组的id列表

candidate-users:  人的id列表

 

如果是任务分配给组,查找个人任务的时候是找不到的(taskService.findPersonalTasks(用户)),通过按照组的方式查找可以找到(taskService.findGroupTasks(用户))

 

在处理之前,候选人必须接受一个任务。 这会表现为两个候选人在同一个任务上开始工作。 分组任务列表中,用户接口必须只接受对这些任务的接受”操作。

taskService.takeTask(task.getDbid(), "johndoe");
 

当一个用户接受了一个任务,这个任务的分配人就会变成当前用户。 任务会从所有候选人的分组任务列表中消失, 它会出现在用户的已分配列表中。

用户只允许执行在他们的个人任务列表上的工作。 这应该由用户接口控制。

 

简单的,candidate-users 属性 可以用来处理用逗号分隔的一系列用户id。 candidate-users 属性可以和其他分配选项结合使用。

 

任务 分配处理器

一个AssignmentHandler 可以通过编程方式来计算 一个任务的分配人和候选人。

 

Assignable任务泳道 的通用接口。 所以任务分配处理器可以使用在任务, 也可以用在泳道中

  <task name="review" g="96,16,127,52">
    <assignment-handler class="org.jbpm.examples.task.assignmenthandler.AssignTask">
      <field name="assignee">
        <string value="johndoe" />
      </field>
    </assignment-handler>
    <transition to="wait" />
  </task>
 

请注意,默认AssignmentHandler实现可以使用使用流程变量 任何其他Java API可以访问资源,像你的应用数据库来计算 分配人和候选人用户和组

 

当达到该任务,就会启动assignment-handler,进行执行人的分配;

 

任务 泳道

一个流程中的多任务应该被分配给同一个用户或候选人。 一个流程中的多任务可以分配给一个单独的泳道。流程实例将记得候选人和用户,在泳道中执行的第一个任务。 任务序列在同一个泳道中将被分配给这些用户和候选人。

 

一个泳道也可以当做一个流程规则。 在一些情况下, 这可能与身份组件中的权限角色相同。 但是实际上它们并不是同一个东西。

   <!-- 定义了一个泳道 -->
  <swimlane name="sales representative"
            candidate-groups="sales-dept" />

  <!-- 在一个task中,使用某个预定义好的泳道 -->
  <task name="enter order data"
        swimlane="sales representative">
    <transition to="calculate quote"/>
  </task>
 
在任务中支持e-mail

可以为分配人提供一个提醒, 当一个任务添加到他们的列表时,以及在特定的时间间隔进行提醒。 每个email信息都是根据一个模板生成出来的。模板可以在内部指定, 或者在配置文件中的 process-engine-context 部分指定。

 

 

sub-process子流程

 

custom

 

自动活动

 

java

script脚本

hql

sql

mail

Common activity contents通用活动内容

Events事件

异步调用

用户代码

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值