https://blog.coderstory.cn/bpmn2-xml/
...
如上代码是流程定义xml的基本代码 definitions是根节点process 是每个流程的起点 必须有一个id和name 如果为process元素定义了name,它会被用做流程的key 如果没有指定name,id会被用做key。 注意key的规则与jPDL一样: 空格和非字母数字的字符会被下划线代替。
?事件:空启动事件
空结束事件
最简单的流程定义
终止结束事件会结束整个流程实例,而空结束事件只会结束当前流程路径。
连接线
默认顺序流 认顺序流只会在活动或网关的 所有其他外向顺序流的condition条件为false时才会使用 默认顺序流通过指定活动或网关的 'default' 属性 来使用。
网关是用来控制流程中的流向的
没有定义条件的顺序流会永远被选择
gatewayDirection属性:
一个流程中的唯一决策。 会有一个外向顺序流被使用?如果多个条件 执行为true,第一个遇到的就会被使用
//定义网关 //第一个分支 //第二个分支 ${amount < 100} //第三个分支 ${amount <= 500 && amount >= 100} ${amount > 500}
xor网关的默认走向 (如果所有条件都是false)
default="myFlow"/>
并行网关用来切分或同步相关的进入或外出 顺序流。
一进多出的流程设计:并行切分
多进一处的流程设计:并行归并
基本定义
//空启动事件 //连接空启动时间和并行网关 //并行网关1 //并行网关1连接节点1 //定义节点1 //节点1连接并行网关2 //节点2连接并行网关1 //定义节点2 //节点2连接并行网关2 //定义并行网关2 //并行网关2连接空结束事件
进行“条件性”切分或汇聚顺序流。
"inclusiveGatewaySplit" targetRef="largeDeposit"> ${cash > 10000} "inclusiveGatewaySplit" targetRef="standardDeposit" /> "inclusiveGatewaySplit" targetRef="foreignDeposit"> ${bank == 'foreign'} "inclusiveGatewayMerge" /> "inclusiveGatewayMerge" /> "inclusiveGatewayMerge" />
一个新人工任务就会被创建,交给用户的任务列表
使用多种实现(WebService, WS-humantask,等等)
resourceAssignmentExpression 分配任务 potentialOwner 候选人 jbpm:type="group" 定义这是一个用户组的分配方式 如果删除了这个属性,就会默认使用用户组的语法 jbpm:type="user" 分配方式是候选用户 management
jbpm:type="user"> peter
Peter将可以看到任务,因为他是这个任务的候选用户。 Listtasks = taskService.createTaskQuery().candidate("peter").list();
用户组的定义
identityService.createGroup("management"); identityService.createUser("peter", "Peter", "Pan"); identityService.createMembership("peter", "management"); identityService.createUser("mary", "Mary", "Littlelamb"); identityService.createMembership("mary", "management"); 所在用户组的人能看到这个任务
// Peter and Mary are both part of management, so they both should see the task Listtasks = taskService.findGroupTasks("peter"); assertEquals(1, tasks.size()); tasks = taskService.findGroupTasks("mary"); assertEquals(1, tasks.size()); // Mary claims the task Task task = tasks.get(0); taskService.takeTask(task.getId(), "mary"); assertNull(taskService.createTaskQuery().candidate("peter").uniqueResult()); taskService.completeTask(task.getId()); assertProcessInstanceEnded(processInstance);
human performer 一个任务直接分配给一个人, 组,角色时
mary
任务列表中看到这个任务:
Listtasks = taskService.findPersonalTasks("mary");
因为任务分配已经完成,通过使用 formalExpression,它也可以定义表达式 在运行期解析、 比如,如果流程变量'user'被定义了,然后,它可以用在表达式中。${user}
Service Task是一个自动活动,它会调用一些服务, 比如web service,java service等等。
implementation 服务的类型 ->WebService, Other或者Unspecified
inputMessage outputMessage
备注:每个操作都至少有一个 输入信息,并且 最多有一个输出信息。
脚本任务时一个自动活动,当到达这个任务的时候 流程引擎会执行一个脚本。
允许指定 scriptLanguage和script
一个由外部人员执行的任务,但是没有指定是 一个BPM系统或是一个服务会被调用
receive task是一个任务会等到外部消息的到来。
...
定义方法: 1.timeDate
2.timeCycle (延迟) 10/10/2099 00:00:00
5 hours
3.表达式 (每周五23点)
0 0 23 ? * FRI
间事件用来表示在流程执行过程中发生的事件(比如, 在流程启动之后,在它完成之前)。
定时器事件,触发事件,传播事件
?中间事件既可以抛出也可以捕获:
内部定时器事件用来表示一个流程的延迟。 直接的用例是收集数据, 只在没有人工作的晚上执行大量的逻辑,等等。
原文:http://www.mossle.com/docs/jbpm4devguide/html/bpmn2.html