




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、变量的生命周期变量的访问和赋值是在某一个token上进行的,缺省时,是基于root Token。每个Token(执行路线)有它自己的一套流程变量。变量的作用域和所属的Token的生命周期一致,不同的Token上的同名变量互不影响。void ContextInstance.setVariable(String variableName, Object value);void ContextInstance.setVariable(String variableName, Object value, Token token);Object ContextInstance.getVariable(S
2、tring variableName);Object ContextInstance.getVariable(String variableName, Token token);动态的设置任务的执行者利用变量动态的设置参与者。在流程定义中指定参与者(actor-id)时,可以使用变量,变量是以#开头,以结束,中间的是变量名。这里的变量引用的是在执行流程时设置的流程变量。/ 1, 设置变量BizForm bizForm = new BizForm();jbpmContext.getSession().save(bizForm);pi.getContextInstance().setVariabl
3、e(bizFormId, bizForm.getId();pi.getContextInstance().setVariable(bizFormClass, BizForm.class.getName();/ 2, 获取变量int id = (Integer)pi.getContextInstance().getVariable(bizFormId);String type = (String) pi.getContextInstance().getVariable(bizFormClass);Class clazz = Class.forName(type);BizForm bf = (Bi
4、zForm)jbpmContext.getSession().get(clazz, id);节点流程图中的各种节点的作用及用法为什么需要多种节点类型?需要有不同类型(作用)的节点,才能设计出复杂的流程图。Jbpm有一套预先定义好的节点类型。如果不够用,也可以使用自定义节点进行扩展,以完成不同的流程的需要。不同的节点类型代表不同的行为。每个流程都必须要有开始节点和结束节点。预定义节点start-state,开始节点:标识流程开始、end-state,结束节点:标识流程结束、task-node,任务节点:可以放0个或多个任务、decision,决策节点:路径选择,只使用一个流转(叉路口)、fork
5、/join,分支节点/合并节点:可以分为多个并行执行的分支、state,状态节点:等待。还有mail-node、process-state、super-state等每种节点都对应一个类(Jbpm的持久化类),都是org.jbpm.graph.def.Node的子类。节点都有名字、流转transition(end-state除外)。start-state 节点开始节点:标识流程开始边界。开始状态有且只有一个,就是说流程中不能有任何transition指向开始节点。创建新的流程实例后,就有一个对应的Token(RootToken,根令牌)指向start-state。并且处于等待状态,需要给Toke
6、n发信号(signal)才能使流程继续执行。end-state 节点结束节点:标识流程的结束边界。不需要transition元素。 task-node 节点任务节点:可以包含任意数量的Task(任务定义)。人就是通过任务与流程交互的。 默认行为1,进入节点时会创建任务实例。(create-tasks)2,处于等待状态,直到任务实例全部完成。(Signal)1,当执行到一个任务节点的时候,将会根据这个task-node中的task的定义,创建相同数量的TaskInstance(任务实例)(为每一个 Task都创建一个任务实例,并且分配给任务定义中指定的参与者)。2,然后,这个task-node一
7、直处于等待状态。等到这些任务实例都被完成后,才 会离开当前的节点,到达下一个节点。如果一个task-node中没有定义任务,执行时,一进入这个节点就会马上离开,即Token不会在这个task-node上停留,因为他发现所有的任务实例都执行完了(任务实例的数量为0)。create-tasks属性task-node的create-tasks属性:指定在进入task-node时是否创建任务实例可取值:true、false。默认值为truesignal属性task-node的signal属性:指定完成任务实例对执行流程的影响(发信号)。(指定哪个任务实例完成后会发信号离开节点属性可取的值:last:默
8、认值,当最后一个实例被完成时候发信号。当在这个入口没有任务被生成时候,流程继续执行(发信号)first:当第一个实例被完成时候发信号。当在这个入口没有任务被生成时候,执行继续.never:不管任务实例是否完成,都不发信号。nsynchronized:进入节点后就发信号,不管任务是否没建立或有没有完成。就是说任务的执行和流程执行互不影响。last-wait:当进入节点时没有任务实例被创建时,就会一直处于等待状态,直到任务实例被创建;创建任务实例后,就是当所有的实例都执行完成后发信号(和last一样了)。first-wait: 和last-wait一样理解。 decision 节点决策节点:用于计
9、算流向:在decision中使用DecisionHandler。或使用一个表达式,也是返回要使用的transition的name。进入节点计算 String transitionName = DecisionHandler.decide();使用指定流转 transitionName 离开1,计算下一步的路径,只会使用其中一个流转离开。2,计算逻辑是指定代码,指定一个DesitionHandler的实现类。3,同一个节点中的每个transition都要有唯一的名称。expression_r(表达式)和我们在jsp中使用的el表达式相似,只是$改为#。el中可以直接使用:requestScope
10、, sessionScope, param. 使用作用域中的数据表达式中可以直接使用已设置的流程变量,并且可以直接使用以下变量:taskInstanceprocessInstanceprocessDefinitiontokentaskMgmtInstancecontextInstancefork与join (分支节点与合并节点)fork(分支节点)的作用是将单个执行流程分裂成多个并发的执行流程。默认的行为是为每个分支生成一个子令牌,并建立子令牌和主流程令牌之间的父子关系。此时,父令牌指向fork节点,子令牌指向各个分支节点。join(合并节点)将分支收拢。当从同一个fork中出来的所有的分支都
11、到达该节点的时候,join节点将结束这些分支上的子token,并给他们的父 Token发一个信号离开join节点(从fork节点直接到join节点的下一个节点,不会经过join节点)。如果只有分支中的部分token到达 时,join结点将处于等待状态。fork和join节点要成对的出现。如果要用jbpm-console运行含有fork节点的流程,就要给fork中的所有的transition指定名字。否则,执行到这个fork节点的时候就会抛空指针异常。state节点状态节点。自定义节点node节点可定制的节点。可以在node元素中指定一个Action子元素,可以指定一个实现了ActionHand
12、ler接口的类,用这个类可定制这个节点的行为。这时,如是果想让流程继续执行,需要给token发一个信号。如果node中没有配置动作(Action),他的默认行为是一到达就离开。class Nodevoid execute()if( 有 ActionHandler )ActionHandler.execute();else/ 默认就是直接离开token.signal();Action动作动作,是一段代码,在指定的情况下被执行。属性:class:指定处理类;name:Action的名字;ref-name:所引用的action的名字;一个action是一段代码,用来引入附加的处理逻辑。可以放在nod
13、e节点中,也可以放在event(事件)中,用来辅助当前节点完成业务逻辑。event事件1,有几种事件2,怎么指定当事件触发时做什么事(Action)1,节点的事件a)进入节点(node-enter)。(开始节点没有)b)离开节点(node-leave)。(结束节点没有)2,流转的事件a)只有一个:使用流转(take a transition)3,任务的事件a)创建任务(task-create)b)分配任务(task-assign)c)开始任务(task-start) TaskInstance.start()d)结束任务(task-end) TaskInstance.end()每个事件有一个动作
14、(action)清单。当jBPM引擎产生一个事件,动作(action)清单就会被执行. 不同的节点支持的事件类型不同,是由event元素所在的节点的类型决定的,例如transition只有一个事件。可以在event元素用可以指定一个动作,当指定的事件发生时,这个动作被执行。可以给同一个事件指定多个动作,当这个事件触发的时候,这些动作执行的顺序和定义先后顺序是一致的。不同元素支持不同的事件类型:一般的节点都具有的事件:node-enter,进入节点、node-leave,离开节点;start-state只有node-leave;end-state只有node-enter;transition只有
15、一个执行转换的事件(taking a transition)。因为只有一个事件,所以配置时不用写event元素,而直接配置Action。task有task-create,任务创建、task-assign,任务分配、task-start,任务开始、task-end,任务结束。关于哪些元素支持哪些事件,可以通过文档的18.4节中的xml文件的写法中获得。如果配置的事件类型不存在,不会报错,也不会执行。注意:在事件中定义的动作(Action)不应该(不能)影响流程的执行。即不要在事件的动作中给token发信号,否则会抛异常:token is locked。(在Node中配置的Action可以给Tok
16、en发信号。)事件执行的顺序:已触发事件:node-leave已触发事件:transition已触发事件:node-enter已触发事件:task-create已触发事件:task-assign已触发事件:task-start已触发事件:task-end动态的创建不确定数量的任务实例会签。实现任务分配给多个人,在流程定义中定义的相应的任务,不指定参与者,也不知道指定为谁。需要做以下工作:1,阻止jBPM自动创建任务实例(设置task-node的create-tasks=false)2,在node-enter事件中定义一个动作指定用于创建TaskInstance的类。类CreateTaskIns
17、tancesAction要接管两个操作:创建与分配任务实例。创建任务实例要调用方法: TaskMgmtInstance.createTaskInstance(Task, ExecutionContext);其中的Task 是任务的定义,可以先得到当前的节点: TaskNode taskNode = (TaskNode) executionContext.getNode();然后通过任务的名字得到任务的定义: Task task = taskNode.getTask(审批);任务分配任务分配有两种方式:推模式:直接将任务实例分派给一个指定的用户,认为实例进入这个用户的个人认为列表中拉模式:将任务
18、实例分派给一组用户.执行组任务时,需要首先将任务实例拉到自己的个人任务列表中,然后执行,组任务被组用户取出后,任务实例从组任务列表中移除这两种任务模式都可以使用assignmentHandler实现,任务在定义的时候指定对应的assignmentHandler接口实现类.引擎在创建任务实例的时候会调用接口汇总的assign方法.其实现应该调用参数assignable方法对人物进行分派分配任务的方式1,在元素中使用actor-id分配个人任务,或pooled-actors分配组任务(多个参与者用逗号隔开),值可以使用表达式。2,使用AssignmentHandler,使用Assignable的setActorId(String)或setPooledActors(String)。3,在程序代码中,使用TaskInstance的setActorId(String)或使用setPoole
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版跨境贸易进口设备采购合同样本
- 2025版智能交通系统技术保密与合作协议
- 2025版文化产业发展担保合同答辩状编制指南
- 2025版美容院美容仪器批发与品牌合作合同
- 2025版购车信用担保服务合同
- 二零二五版毛纱与棉纱电商渠道合作协议
- 2025版餐饮连锁厨师承包经营合作协议
- 二零二五年茶餐厅厨师劳动合同模板
- 2025年高级锻造工职业技能鉴定试卷(一级)详解
- 2025年铸造工(高级技师)综合能力考试试卷
- 餐饮夏季食品安全培训
- 2022中国脑性瘫痪康复指南:康复治疗(第一部分)
- T-SZSA 015-2017 COB LED 光源封装产品技术规范
- 斜拉桥施工工艺(一)
- 公交车保洁服务投标方案(技术标)
- 朱熹文公世系通谱
- 员工食堂调查问卷表
- 水务集团有限公司岗位服务规范
- 华为智能会议室解决方案主打胶片
- 汽车运用与维修技术专业人才需求调研报告
- 《小学生C++创意编程》第1单元课件 软件下载安装
评论
0/150
提交评论