jPDL流程定义语言.docx

上传人:小飞机 文档编号:1845344 上传时间:2022-12-21 格式:DOCX 页数:53 大小:297.42KB
返回 下载 相关 举报
jPDL流程定义语言.docx_第1页
第1页 / 共53页
jPDL流程定义语言.docx_第2页
第2页 / 共53页
jPDL流程定义语言.docx_第3页
第3页 / 共53页
jPDL流程定义语言.docx_第4页
第4页 / 共53页
jPDL流程定义语言.docx_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《jPDL流程定义语言.docx》由会员分享,可在线阅读,更多相关《jPDL流程定义语言.docx(53页珍藏版)》请在三一办公上搜索。

1、1. JPDL分析JPDL的文件格式以及流程定义. 1.1. Processl Process属性列表:属性类型默认值可选/必选?描述namestring必选流程在用户交互中显示名称或标签key数字字符和下划线如果省略,key会根据name替换所有不是数字的子符和下划线.可选区分不同流程定义的属性.一个流程定义有多个版本可以使用相同的key.在多个版本中key:name结构必须相同.versioninteger由1开始,新版本比当前最高版本的version要高.optional流程版本号l Process嵌套标签列表:标签描述description描述activities(下面的所有标签)一系

2、列类型节点可以嵌套到里面.至少有一个start节点.1.2. JPDL节点标签介绍1.2.1. 全局标签1.2.1.1. tns:onl on中的属性:属性类型默认值是否可选描述continuetns:continueTypesync|async|exclusivesync可选指定同步,异步或互斥的.eventstring可选指定的Event.start,end,task或者其他的custom event.l on中可以嵌套的标签(可选):标签描述timer计时器,当计时器发动的时候,所有引用该timer的event listeners将会被通知.event-listenerevent lis

3、tener的实现对象.(user guide 6.5.1)hql定义HQL query读取数据库并将结果保存到process variable中.sql定义SQL query读取数据库并将结果保存到process variable中.java配置当前运行节点运行的class.assign将接收到的value分配到目标位置.script执行一个script.mail指定发送email的内容,以及多个接收者.1.2.1.1. tns:transitionl transition中的属性:属性类型默认值是否可选描述gtns:continueTypesync|async|exclusivesync可选

4、使用流程设计工具时,图象大小和坐标信息.namestring可选该transition的名称tostring可选该transition的目的地.l transition中可以嵌套的标签(可选):标签描述description描述event-listenerevent listener的实现对象.(user guide 6.5.1)hql定义HQL query读取数据库并将结果保存到process variable中.sql定义SQL query读取数据库并将结果保存到process variable中.java配置当前运行节点运行的class.assign将接收到的value分配到目标位置.s

5、cript执行一个script.mail指定发送email的内容,以及多个接收者.1.3. User code在JPDL中,许多标签引用一个对象,其中的接口将会被调用。用户代码的配置:属性类型默认值是否可选描述classstringclass|expr 其中之一是必须的全类名。初始化只会进行一次, 用户对象会被作为流程定义的一部分进行缓存。exprstringclass|expr 其中之一是必须的表达式的值会当做目标对象被获得。表达式会在每次使用时被执行。用户代码的配置中的元素(可选)元素数目描述field0*描述一个配置值,在用户类使用之前注入到成员变量中。property 0*描述一个配置

6、值,在用户类使用之前通过一个setter方法进行注入。field和property的属性属性类型默认值是否可选描述namestring必填名称field 和property 包含的元素:field 和property 元素都拥有一个子元素, 表示将被注入的值。元素数目描述string01a java.lang.Stringint 01a java.lang.Integerlong01a java.lang.Longfloat01a java.lang.Floatdouble01a java.lang.Doubletrue01Boolean.TRUEfalse01Boolean.FALSEobj

7、e01会通过反射初始化的对象基本类型string, int, long, floatand double 的属性:属性类型默认值是否可选描述valuetext必填text值会被解析成期望的类型1.3.1. customl 调用用户代码,以实现自定义行为的活动。l custom的属性:属性类型默认值是否可选描述auto-writestring可选指明是否根据property name,type跟object name,type自动绑定member field和setter property.cachetrue|on|enabled|false|off|disable可选指明user code是否

8、应该缓存.classstring可选class名称.continuetns:continueTypesync|async|exclusive可选指定同步,异步或互斥的.exprstring可选提供object的表达式factorystring可选factory object的名称.gstring可选使用流程设计工具时,图象大小和坐标信息.langstring可选声明语言methodstring可选factory method名称namestring可选节点名称,名称应该在整个流程中是唯一的.l custom嵌套的标签标签描述description描述.factory描述factory obec

9、t.constructor描述非默认的constructor的输入参数.argfactory方法的输入参数.field向object注入成员字段的值.property通过setter方法注入一个值.一个子标签必须定义它的值.invoke调用一个方法.on全局标签,定义某个节点的在on可以嵌套的标签的功能(timer,hql,event-listener等等).transition全局标签,向外的转移l example 从Custom节点的PrintDos行为类,可以看出custom节点可以在实现custom节点行为的时候,控制流程.在这种情况下,PrintDots节点在打印后会在等待,知道收到

10、信号为止.public class PrintDots implements ExternalActivityBehaviour private static final long serialVersionUID = 1L; public void execute(ActivityExecution execution) String executionId = execution.getId(); String dots = .; System.out.println(dots); execution.waitForSignal(); public void signal(Activity

11、Execution execution, String signalName, Map parameters) execution.take(signalName); 1.3.2. event-listenerevent-listener 是用户代码,所以它可以像第2.3.1节“custom”中一样进行配置。任何自动活动(包括event-listener)在事件中, 可以指定下面的额外属性:属性类型默认值是否可选描述propagationenabled|disabled|true|false|on|offdisabled可选指定事件监听器应该也被传播的事件调用。l envnt-listener

12、嵌套的标签标签描述description描述.factory描述factory obect.constructor描述非默认的constructor的输入参数.argfactory方法的输入参数.field向object注入成员字段的值.property通过setter方法注入一个值.一个子标签必须定义它的值.invoke调用一个方法.l example流程图如下: LogListener 维护一系列的日志:public class LogListener implements EventListener / value gets injected from process definitio

13、n String msg; public void notify(EventListenerExecution execution) List logs = (List) execution.getVariable(logs); if (logs=null) logs = new ArrayList(); execution.setVariable(logs, logs); logs.add(msg); execution.setVariable(logs, logs); 接下来,我们启动流程:ProcessInstance processInstance = executionService

14、.startProcessInstanceByKey(EventListener);流程实例执行到wait节点,所以我们提供一个让流程继续执行到end的信号.Execution execution = processInstance.findActiveExecutionIn(wait);executionService.signalExecutionById(execution.getId();一系列的log信息入下:start on process definition, start on activity wait, end on activity wait, take transiti

15、on1.3.3. assignment-handler in task一个AssignmentHandler 可以通过编程方式来计算一个任务的分配人和候选人。public interface AssignmentHandler extends Serializable /* sets the actorId and candidates for the given assignable. */void assign(Assignable assignable, OpenExecution execution) throws Exception;Assignable 是任务和泳道的通用接口。所以

16、任务分配处理器可以使用在任务, 也可以用在泳道中(参考后面的内容)。assignment-handler 是任务元素的一个子元素。它指定用户代码对象。所以assignment-handler 的属性和元素都来自用户代码。l assignment-handler的属性:属性类型默认值是否可选描述auto-writestring可选指明是否根据property name,type跟object name,type自动绑定member field和setter property.cachetrue|on|enabled|false|off|disable可选指明user code是否应该缓存.cla

17、ssstring可选class名称.exprstring可选提供object的表达式factorystringfactory object的名称.langstring声明语言methodstringfactory method名称l assignment-handler嵌套的标签标签描述description描述.factory描述factory obect.constructor描述非默认的constructor的输入参数.argfactory方法的输入参数.field向object注入成员字段的值.property通过setter方法注入一个值.一个子标签必须定义它的值.invoke调用一

18、个方法.l example流程图如下:引用的类AssignTask 看起来像这样:public class AssignTask implements AssignmentHandler String assignee;public void assign(Assignable assignable, OpenExecution execution) assignable.setAssignee(assignee);请注意,默认AssignmentHandler 实现可以使用使用流程变量任何其他Java API 可以访问资源,像你的应用数据库来计算分配人和候选人用户和组。启动一个TaskAss

19、ignmentHandler 的新流程实例会立即让新流程实例运行到任务节点。一个新review 任务被创建,在这个时候AssignTask 的分配处理器被调用。这将设置johndoe 为分配人。所以John Doe 将在他自己的任务列表中找到这个任务。1.3.4. condition in transitionl condition节点用在和节点中的节点中,用于触发不同的向外转移.l condition的属性:属性类型默认值是否可选描述exprstring可选提供object的表达式langstring声明语言l condition嵌套的标签(注意:该嵌套标签只能在标签中的中使用)标签顺序描述

20、handlerl 例子,结合标签使用.请查看的例子.1.4. Control flow activity 1.4.1. startl 一个流程的开始.l 一个流程只能有一个start activity.l Start activity必须有一个outgoing transition,并且transition是在流程运行启动时发生的.l Start 的属性表:AttributeTypeDefaultRequired?Descriptionnameany text可选节点名称,名称应该在整个流程中是唯一的.gstring可选使用流程设计工具时,图象大小和坐标信息.continuetns:conti

21、nueTypeasync|sync|exclusivesync可选指定同步,异步或互斥的.formstring可选在部署中资源的形式l Start的可嵌套的标签:ElementDescriptiondescription节点描述on全局标签,定义某个节点的在on可以嵌套的标签的功能(timer,hql,event-listener等等).transition全局标签,向外的转移l example1.4.2. endl end节点将会结束完成的流程实例.l end中的属性:AttributeTypeDefaultRequired?Descriptionnameany text可选节点名称,名称应

22、该在整个流程中是唯一的.gstring可选使用流程设计工具时,图象大小和坐标信息.continuetns:continueType:async|sync|exclusivesync可选指定同步,异步或互斥的.endsendsType:execution|process-instanceprocess-instance可选结束运行,结束流程实例.statestring:”ended”ended可选明确地指定执行的结束状态.l end 中可嵌套的标签:ElementDescriptiondescription节点描述on全局标签,定义某个节点的在on可以嵌套的标签的功能(timer,hql,eve

23、nt-listener等等).transition全局标签,向外的转移l example流程图如下: 如果我们启动一个执行,并使用下面的代码发信号使它迁出get return code等待状态,执行将会因为bad request end event结束.ProcessInstance processInstance = executionService.startProcessInstanceByKey(EndMultiple);String pid = processInstance.getId();processInstance = executionService.signalExecu

24、tionById(pid, 400);同样的,使用200或500的值将会分别导致ok或internal server error执行结束.1.4.3. end-cancell end-cancel节点将会结束被取消的流程实例.l end-cancel 中的属性:AttributeTypeDefaultRequired?Descriptionnameany text可选节点名称,名称应该在整个流程中是唯一的.gstring可选使用流程设计工具时,图象大小和坐标信息.continuetns:continueType:async|sync|exclusivesync可选指定同步,异步或互斥的.end

25、sendsType:execution|process-instanceprocess-instance可选结束运行,结束流程实例.l End-cancel 中可嵌套的标签:ElementDescriptiondescription节点描述on全局标签,定义某个节点的在on可以嵌套的标签的功能(timer,hql,event-listener等等).transition全局标签,向外的转移l example执行可以由不同的状态结束.这是另一种指定流程结果的方式.这通过end event的state属性或end-cancel和end-error快捷符号通知.流程图如下: 这次,如果我们启动一个执

26、行,并使用下面的代码发信号使执行迁出get return code的等待状态,执行将会由于cancel状态被结束.类似的,使用200或500的值将会分别使执行因completed或error结束.1.4.4. end-errorl end-error节点将会结束错误的流程实例.l end-error 中的属性:AttributeTypeDefaultRequired?Descriptionnameany text可选节点名称,名称应该在整个流程中是唯一的.gstring可选使用流程设计工具时,图象大小和坐标信息.continuetns:continueType:async|sync|exclu

27、sivesync可选指定同步,异步或互斥的.endsendsType:execution|process-instanceprocess-instance可选结束运行,结束流程实例.l end-error 中可嵌套的标签:ElementDescriptiondescription节点描述on全局标签,定义某个event的continue属性.transition全局标签,向外的转移l example同2.4.3.1.end-cancel例子1.4.5. statel 等待状态.l 当一个执行到达这个节点,执行将会被暂停,等待外部触发被execution.signal()或者execution.

28、getActivityInstance().signal()传送到该节点.l state 的属性表:AttributeTypeDefaultRequired?Descriptionnameany text可选节点名称,名称应该在整个流程中是唯一的.gstring可选使用流程设计工具时,图象大小和坐标信息.continuetns:continueTypeasync|sync|exclusivesync可选指定同步,异步或互斥的.l state的可嵌套的标签:ElementDescriptiondescription节点描述on全局标签,定义某个节点的在on可以嵌套的标签的功能(timer,hql

29、,event-listener等等).transition全局标签,向外的转移l example流程图如下: 为进程定义启动一个新的流程实例:ProcessInstance processInstance = executionService .startProcessInstanceByKey(StateChoice);现在,执行到达wait for response.执行将会等待,直到接收到外部触发.在这种情况下,一个state含有多个向外转移,在外部触发中给出的signalName,将会指定对应向外转移.所以当我们提供signalName应当像下面这样:String executionI

30、d = processInstance .findActiveExecutionIn(wait for response) .getId();processInstance = executionService.signalExecutionById(executionId, accept);assertTrue(processInstance.isActive(submit document);当执行继续,经过名称是accept向外转移.假设,当signalExecutionXxx方法给出的signalName 是reject的时候,执行将会继续,经过名称是reject的向外转移.1.4.6. decisionl 当有多个可选路径时,选择一条路径继续进行.l 当执行到该节点时,只会选择一个向外转移.l decisi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号