




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1.JPDL分析JPDL的文件格式以及流程定義.<?xmlversion="1.0"encoding="UTF-8"?><processname="Purchaseorder”<start><transitionto="Verifysupplier”/></start><statename="Verifysupplier”><transitionname="Supplierok"to="Checksupplierdata”/><transitionname="Suppliernotok"to="Error"/></state><decisionname="Checksupplierdata”><transitionname="nok"to="Error"/><transitionname="ok"to="Completed”/>〈/decision〉<endname="Completed”/><endname="Error"/></process>Process?Process屬性列表:namestring必選流程在用戶交互中顯示名稱或標(biāo)簽key數(shù)字字符和下劃線如果省略,key會(huì)根據(jù)name替換所有不是數(shù)字的子符和下劃線.可選區(qū)分不同流程定義的屬性.一個(gè)流程定義有多個(gè)版本可以使用相同的key.在多個(gè)版本中key:name結(jié)構(gòu)必須相同.versioninteger由1開始,新版本比當(dāng)前最高版本的version要高.optional流程版本號(hào)? Process嵌套標(biāo)簽列表:description 描述activities(下面的所有標(biāo)簽)一系列類型節(jié)點(diǎn)可以嵌套到里面.至少有一個(gè)start節(jié)點(diǎn).精心整理JPDL節(jié)點(diǎn)標(biāo)簽介紹全局標(biāo)簽.tns:on?on中的屬性:sync|continueasync|sync可選指定同步,異步或互斥的.exclusiveeventstring 可選指定的Event.start,end,task或者其他的customevent.?on中可以嵌套的標(biāo)簽(可選):timer計(jì)時(shí)器,當(dāng)計(jì)時(shí)器發(fā)動(dòng)的時(shí)候,所有引用該timer的eventlisteners將會(huì)被通知.event-listenereventlistener的實(shí)現(xiàn)對(duì)象.(userguide6.5.1)hql 定義HQLquery讀取數(shù)據(jù)庫(kù)并將結(jié)果保存到processvariable中.sql 定義SQLquery讀取數(shù)據(jù)庫(kù)并將結(jié)果保存到processvariable中.java 配置當(dāng)前運(yùn)行節(jié)點(diǎn)運(yùn)行的class.assign 將接收到的value分配到目標(biāo)位置.script 執(zhí)行一個(gè)script.mail 指定發(fā)送email的內(nèi)容,以及多個(gè)接收者.tns:transition?transition中的屬性:sync|gasync|exclusivesync可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.namestring可選該transition的名稱tostring可選該transition的目的地.?transition中可以嵌套的標(biāo)簽(可選):
精心整理description描述event-listenereventlistener的實(shí)現(xiàn)對(duì)象.(userguide6.5.1)hql 定義HQLquery讀取數(shù)據(jù)庫(kù)并將結(jié)果保存到processvariable中.sql 定義SQLquery讀取數(shù)據(jù)庫(kù)并將結(jié)果保存到processvariable中.java 配置當(dāng)前運(yùn)行節(jié)點(diǎn)運(yùn)行的class.assign將接收到的value分配到目標(biāo)位置.script 執(zhí)行一個(gè)script.mail 指定發(fā)送email的內(nèi)容,以及多個(gè)接收者.Usercode在JPDL中,許多標(biāo)簽引用一個(gè)對(duì)象,其中的接口將會(huì)被調(diào)用。用戶代碼的配置:classstring{class|expr}其中 全類名。初始化只會(huì)進(jìn)行一次,用戶對(duì)象之一是必須的 會(huì)被作為流程定義的一部分進(jìn)行緩存。exprstring{class|expr}其中 表達(dá)式的值會(huì)當(dāng)做目標(biāo)對(duì)象被獲得。表達(dá)之一是必須的 式會(huì)在每次使用時(shí)被執(zhí)行。用戶代碼的配置中的元素(可選)field 0…* 描述一個(gè)配置值,在用戶類使用之前注入到成員變量中。property 0…* 描述一個(gè)配置值,在用戶類使用之前通過一個(gè)setter方法進(jìn)行注入。field和property的屬性namestring必填名稱field和property包含的元素:field和property元素都擁有一個(gè)子元素,表示將被注入的值。string0…1aint0…1agerlong0…1afloat0…1adouble0…1atrue0…1Boolean.TRUE精心整理false 0...1Boolean.FALSEobje0.1會(huì)通過反射初始化的對(duì)象基本類型string,int,long,floatanddouble的屬性:valuetext必填text值會(huì)被解析成期望的類型custom??調(diào)用用戶代碼,以實(shí)現(xiàn)自定義行為的活動(dòng)。?custom的屬性:auto-writestring可指明是否根據(jù)propertyname,type跟objectname,type自動(dòng)綁定選memberfield和setterproperty.true|on|cacheenabled|false|off|disable可選指明usercode是否應(yīng)該緩存.classstring可選class名稱.sync|可選continueasync|指定同步,異步或互斥的.exclusiveexprstring可選提供object的表達(dá)式factorystring可選factoryobject的名稱.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.langstring可選聲明語言methodstring可選factorymethod名稱namestring可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.?custom嵌套的標(biāo)簽description描述?custom嵌套的標(biāo)簽factory描述factoryobect.精心整理constructor描述非默認(rèn)的constructor的輸入?yún)?shù).arg factory方法的輸入?yún)?shù).field 向object注入成員字段的值.property 通過setter方法注入一個(gè)值.一個(gè)子標(biāo)簽必須定義它的值.invoke 調(diào)用一個(gè)方法.全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移example<processname="Custom”<start><transitionto="printdots”/></start><customname="printdots"<transitionto="end"/></custom><endname="end"/></process>從Custom節(jié)點(diǎn)的PrintDos行為類,可以看出custom節(jié)點(diǎn)可以在實(shí)現(xiàn)custom節(jié)點(diǎn)行為的時(shí)候,控制流程.在這種情況下,PrintDots節(jié)點(diǎn)在打印后會(huì)在等待,知道收到信號(hào)為止.publicclassPrintDotsimplementsExternalActivityBehaviour{privatestaticfinallongserialVersionUID=lL;publicvoidexecute(ActivityExecutionexecution){StringexecutionId=execution.getId();Stringdots=...;execution.waitForSignal();}publicvoidsignal(ActivityExecutionexecution,StringsignalName,Map<String,?>parameters){execution.take(signalName);}}event-listenerevent-listener是用戶代碼,所以它可以像第2.3.1節(jié)“custom”中一樣進(jìn)行配置。任何自動(dòng)活動(dòng)(包括event-listener)在事件中,可以指定下面的額外屬性:enabled|disabled|propagationtrue| 指定事件監(jiān)聽器應(yīng)該也被false| disabled 可選 傳播的事件調(diào)用。on|off?envnt-listener嵌套的標(biāo)簽description描述.factory描述factoryobect.constructor描述非默認(rèn)的constructor的輸入?yún)?shù).arg factory方法的輸入?yún)?shù).field 向object注入成員字段的值.property 通過setter方法注入一個(gè)值.一個(gè)子標(biāo)簽必須定義它的值.invoke 調(diào)用一個(gè)方法.?example流程圖如下:<processname="EventListener”<onevent="start”>〈event-listener<fieldname="msg"><stringvalue="startonprocessdefinition"/></field></event-listener></on><start><transitionto="wait"/></start><statename="wait"><onevent="start">〈event-listener<fieldname="msg"><stringvalue="startonactivitywait"/></field></event-listener></on><onevent="end">〈event-listener<fieldname="msg"><stringvalue="endonactivitywait"/></field></event-listener></on><transitionto="park">〈event-listener<fieldname="msg"><stringvalue="taketransition"/></field>〈/event-listener〉
〈/transition〉</state><statename="park"/>〈/process〉LogListener維護(hù)一系列的日志:publicclassLogListenerimplementsEventListener{//valuegetsinjectedfromprocessdefinitionStringmsg;publicvoidnotify(EventListenerExecutionexecution){List<String>logs=(List<String>)execution.getVariable("logs");if(logs==null){logs=newArrayList<String>();execution.setVariable("logs",logs);}logs.add(msg);execution.setVariable("logs",logs);}}接下來,我們啟動(dòng)流程:ProcessInstanceprocessInstance=executionService.startProcessInstanceByKey("EventListener");流程實(shí)例執(zhí)行到wait節(jié)點(diǎn),所以我們提供一個(gè)讓流程繼續(xù)執(zhí)行到end的信號(hào).Executionexecution=processInstance.findActiveExecutionIn("wait");executionService.signalExecutionById(execution.getId());一系列的log信息入下:[startonprocessdefinition,startonactivitywait,endonactivitywait,taketransition]1.3.3.assignment-handlerintask一個(gè)AssignmentHandler可以通過編程方式來計(jì)算一個(gè)任務(wù)的分配人和候選人。publicinterfaceAssignmentHandlerextendsSerializable{/**setstheactorIdandcandidatesforthegivenassignable.*/voidassign(Assignableassignable,OpenExecutionexecution)throwsException;}Assignable是任務(wù)和泳道的通用接口。所以任務(wù)分配處理器可以使用在任務(wù),也可以用在泳道中(參考后面的內(nèi)容)。assignment-handler是任務(wù)元素的一個(gè)子元素。它指定用戶代碼對(duì)象。所以assignment-handler的屬性和元素都來自用戶代碼。assignment-handler的屬性:可指明是否根據(jù)propertyname,type跟objectname,type自動(dòng)綁定memberfield和auto-writestring選setterproperty.true|on|enabled|可指明usercode是否應(yīng)該緩存.cachefalse|選off|disableclassstring可選class名稱.exprstring可選提供object的表達(dá)式factorystringfactoryobject的名稱.langstring聲明語言methodstringfactorymethod名稱?assignment-handler嵌套的標(biāo)簽description描述.factory 描述factoryobect.constructor描述非默認(rèn)的constructor的輸入?yún)?shù).arg factory方法的輸入?yún)?shù).field 向object注入成員字段的值.property 通過setter方法注入一個(gè)值.一個(gè)子標(biāo)簽必須定義它的值.invoke 調(diào)用一個(gè)方法.example流程圖如下:<processname="TaskAssignmentHandler”<startg="20,20,48,48"><transitionto="review”/></start><taskname="review"g="96,16,127,52”>〈assignment-handler
<fieldname="assignee”><stringvalue="johndoe”/></field>〈/assignment-handler〉<transitionto="wait"/></task><statename="wait"g="255,16,88,52”/></process>引用的類AssignTask看起來像這樣:publicclassAssignTaskimplementsAssignmentHandler{Stringassignee;publicvoidassign(Assignableassignable,OpenExecutionexecution){assignable.setAssignee(assignee);}}請(qǐng)注意,默認(rèn)AssignmentHandler實(shí)現(xiàn)可以使用使用流程變量任何其他JavaAPI可以訪問資源,像你的應(yīng)用數(shù)據(jù)庫(kù)來計(jì)算分配人和候選人用戶和組。啟動(dòng)一個(gè)TaskAssignmentHandler的新流程實(shí)例會(huì)立即讓新流程實(shí)例運(yùn)行到任務(wù)節(jié)點(diǎn)。一個(gè)新review任務(wù)被創(chuàng)建,在這個(gè)時(shí)候AssignTask的分配處理器被調(diào)用。這將設(shè)置johndoe為分配人。所以JohnDoe將在他自己的任務(wù)列表中找到這個(gè)任務(wù)。conditionintransitioncondition節(jié)點(diǎn)用在〈decision〉和<rule>節(jié)點(diǎn)中的〈transition〉節(jié)點(diǎn)中,用于觸發(fā)不同的向外轉(zhuǎn)移.condition的屬性:exprstring可選提供object的表達(dá)式langstring 聲明語言?condition嵌套的標(biāo)簽(注意:該嵌套標(biāo)簽只能在<rules>標(biāo)簽中的〈transition〉中使用)handler例子,結(jié)合〈rules〉標(biāo)簽使用.請(qǐng)查看〈rules〉的例子.Controlflowactivitystart一個(gè)流程的開始.一個(gè)流程只能有一個(gè)startactivity.Startactivity必須有一個(gè)outgoingtransition并且transition是在流程運(yùn)行啟動(dòng)時(shí)發(fā)生的.Start的屬性表:
nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.async|continuesync|sync可選指定同步,異步或互斥的.exclusiveformstring可選在部署中資源的形式?Start的可嵌套的標(biāo)簽:description節(jié)點(diǎn)描述全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移example<?xmlversion="1.0"encoding="UTF-8"?><processname="Purchaseorder”<start><transitionto="Verifysupplier”/></start><statename="Verifysupplier”><transitionname="Supplierok"to="Checksupplierdata”/><transitionname="Suppliernotok"to="Error"/></state><decisionname="Checksupplierdata”><transitionname="nok"to="Error"/><transitionname="ok"to="Completed”/>〈/decision〉<endname="Completed”/><endname="Error"/></process>end? end節(jié)點(diǎn)將會(huì)結(jié)束完成的流程實(shí)例.? end中的屬性:可節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一name anytext選的.可使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信g string選息.:可continue sync指定同步,異步或互斥的.async|選
sync|exclusiveendsType:endsexecution| process-instance 結(jié)束運(yùn)行,結(jié)束流程實(shí)例.選process-instancestate可string:”ended” ended 明確地指定執(zhí)行的結(jié)束狀態(tài).選?end中可嵌套的標(biāo)簽:description節(jié)點(diǎn)描述全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移?example流程圖如下:<processname="EndMultiple”<start><transitionto="getreturncode”/></start><statename="getreturncode"><transitionname="200"to="ok"/><transitionname="400"to="badrequest"/><transitionname="500"to="internalservererror"/></state><endname="ok"/><endname="badrequest"/><endname="internalservererror"/></process>如果我們啟動(dòng)一個(gè)執(zhí)行,并使用下面的代碼發(fā)信號(hào)使它遷出getreturncode等待狀態(tài),執(zhí)行將會(huì)因?yàn)閎adrequestendevent結(jié)束.ProcessInstanceprocessInstance=executionService.startProcessInstanceByKey("EndMultiple");Stringpid=processInstance.getId();processInstance=executionService.signalExecutionById(pid,"400");同樣的,使用200或500的值將會(huì)分別導(dǎo)致ok或internalservererror執(zhí)行結(jié)束.精心整理1.4.3.end-cancel? end-cancel節(jié)點(diǎn)將會(huì)結(jié)束被取消的流程實(shí)例.?end-cancel中的屬性:可節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一nameanytext選的.string可使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信g選息.continueasynclsynclexclusiveendsType:sync可選可選指定同步,異步或互斥的.endsexecution]process-instanceprocess-instance結(jié)束運(yùn)行,結(jié)束流程實(shí)例.?End-cancel中可嵌套的標(biāo)簽:description節(jié)點(diǎn)描述全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移?example執(zhí)行可以由不同的狀態(tài)結(jié)束.這是另一種指定流程結(jié)果的方式.這通過endevent的state屬性或end-cancel和end-error快捷符號(hào)通知.流程圖如下:<processname="EndState”.org/4.4/jpdl”><start><transitionto="getreturncode"/></start><statename="getreturncode"><transitionname="200"to="ok"/><transitionname="400"to="badrequest"/><transitionname="500"to="internalservererror"/></state><endname="ok"state="completed"/><end-cancelname="badrequest"/><end-errorname="internalservererror"/></process>這次,如果我們啟動(dòng)一個(gè)執(zhí)行,并使用下面的代碼發(fā)信號(hào)使執(zhí)行遷出getreturncode的等待狀態(tài),執(zhí)行將會(huì)由于cancel狀態(tài)被結(jié)束.
精心整理類似的,使用200或500的值將會(huì)分別使執(zhí)行因completed或error結(jié)束.end-errorend-error節(jié)點(diǎn)將會(huì)結(jié)束錯(cuò)誤的流程實(shí)例.end-error中的屬性:可節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一nameanytext選的.string可使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信g選息.continueasync|sync|exclusiveendsType:sync可選可選指定同步,異步或互斥的.endsexecution]process-instanceprocess-instance結(jié)束運(yùn)行,結(jié)束流程實(shí)例.?end-error中可嵌套的標(biāo)簽:description節(jié)點(diǎn)描述全局標(biāo)簽,定義某個(gè)event的continue屬性.全局標(biāo)簽,向外的轉(zhuǎn)移examplestate等待狀態(tài).當(dāng)一個(gè)執(zhí)行到達(dá)這個(gè)節(jié)點(diǎn),執(zhí)行將會(huì)被暫停,等待外部觸發(fā)被execution.signal()或者execution.getActivityInstance().signal()傳送至U該節(jié)點(diǎn).state的屬性表:nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.async|continuesync| sync可選指定同步,異步或互斥的.exclusive?state的可嵌套的標(biāo)簽:description節(jié)點(diǎn)描述全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移example流程圖如下:<processname="StateChoice”<start><transitionto="waitforresponse”/></start><statename="waitforresponse"><transitionname="accept"to="submitdocument"/><transitionname="reject"to="tryagain”/></state><statename="submitdocument"/><statename="tryagain”/></process>為進(jìn)程定義啟動(dòng)一個(gè)新的流程實(shí)例:ProcessInstanceprocessInstance=executionService.startProcessInstanceByKey("StateChoice");現(xiàn)在執(zhí)行到達(dá)waitforresponse執(zhí)行將會(huì)等待,直到接收到外部觸發(fā).在這種情況下,一個(gè)state含有多個(gè)向外轉(zhuǎn)移,在外部觸發(fā)中給出的signalName將會(huì)指定對(duì)應(yīng)向外轉(zhuǎn)移.所以當(dāng)我們提供signalName應(yīng)當(dāng)像下面這樣:StringexecutionId=processInstance.findActiveExecutionIn("waitforresponse").getId();processInstance=executionService.signalExecutionById(executionId,"accept");assertTrue(processInstance.isActive("submitdocument"));當(dāng)執(zhí)行繼續(xù),經(jīng)過名稱是accept向外轉(zhuǎn)移.假設(shè),當(dāng)signalExecutionXxx方法給出的signalName是reject的時(shí)候,執(zhí)行將會(huì)繼續(xù),經(jīng)過名稱是reject的向外轉(zhuǎn)移.decision? 當(dāng)有多個(gè)可選路徑時(shí),選擇一條路徑繼續(xù)進(jìn)行.? 當(dāng)有多個(gè)可選路徑時(shí),選擇一條路徑繼續(xù)進(jìn)行.? 當(dāng)執(zhí)行到該節(jié)點(diǎn)時(shí),只會(huì)選擇一個(gè)向外轉(zhuǎn)移.?decision的屬性表:節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.nameanytext可選gstring可選async|continuesync|sync可選exclusive指定同步,異步或互斥的.exprstring可選langstring可選scriptexprstring可選langstring可選script將會(huì)在被執(zhí)行,并且判斷向外轉(zhuǎn)移節(jié)點(diǎn)的名字.聲明expr屬性使用的語言名稱.decision的可嵌套的標(biāo)簽:description節(jié)點(diǎn)描述description節(jié)點(diǎn)描述handler全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移example<processname="DecisionConditions”><start><transitionto="evaluatedocument”/></start><decisionname="evaluatedocument"><transitionto="submitdocument"><conditionexpr="#{content=="good"}"/>〈/transition〉<transitionto="tryagain”><conditionexpr="#{content=="notsogood"}"/>〈/transition)<transitionto="giveup"/></decision><statename="submitdocument"/><statename="tryagain”/><statename="giveup"/></process>輸入?yún)?shù)為goodcontent,啟動(dòng)一個(gè)流程實(shí)例后:Map<String,Object>variables=newHashMap<String,Object>();variables.put("content","good");ProcessInstanceprocessInstance=executionService.startProcessInstanceByKey("DecisionConditions”,variables);submitdocument節(jié)點(diǎn)被激活:assertTrue(processInstance.isActive("submitdocument"));1.4.7.concurrency并行執(zhí)行可以由fork和join節(jié)點(diǎn)組成.精心整理.fork? fork節(jié)點(diǎn)允許一條單一的執(zhí)行路徑分離成兩條或更多的,可以并行的執(zhí)行節(jié)點(diǎn).?fork的屬性表:nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.async|continuesync|sync可選指定同步,異步或互斥的.exclusive?fork的可嵌套的標(biāo)簽:description節(jié)點(diǎn)描述全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移?examplefork節(jié)點(diǎn)允許一個(gè)單獨(dú)的執(zhí)行路徑拆分成兩條或更多的路徑,它們可以并發(fā)執(zhí)行.<processname="ConcurrencyGraphBased”<start><transitionto="fork"/></start><forkname="fork"><transitionto="sendinvoice"/><transitionto="loadtruck"/><transitionto="printshippingdocuments"/></fork><statename="sendinvoice"><transitionto="finaljoin"/></state><statename="loadtruck"><transitionto="shippingjoin"/></state><statename="printshippingdocuments"><transitionto="shippingjoin"/></state><joinname="shippingjoin"><transitionto="drivetrucktodestination"/></join><statename="drivetrucktodestination"><transitionto="finaljoin"/></state><joinname="finaljoin"><transitionto="end"/></join><endname="end"/></process>.join? 歸并多個(gè)并行路徑的執(zhí)行? 歸并多個(gè)并行路徑的執(zhí)行.?join節(jié)點(diǎn)屬性可一name anytext 節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.選可,g string 、出使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.選asyncl .*可continue syncl sync 田 指定同步,異步或互斥的.1先exclusivenoneread 在行一級(jí)執(zhí)行時(shí)提交的hibernate的lockmode,以口」 、lockmode upgrade upgrade 避免兩個(gè)并行事物不知道對(duì)方是否到達(dá)join節(jié)選 ,upgrade_nowait 點(diǎn),導(dǎo)致進(jìn)程死鎖.writestring:正數(shù)或表 傳入轉(zhuǎn)移 可 在join節(jié)點(diǎn)執(zhí)行以及推動(dòng)一個(gè)向外轉(zhuǎn)移之前,應(yīng)multiplicityp y達(dá)式 的數(shù)目 選該到達(dá)當(dāng)前join節(jié)點(diǎn)的執(zhí)行的數(shù)目.description節(jié)點(diǎn)描述?join的可嵌套的標(biāo)簽:description節(jié)點(diǎn)描述? 創(chuàng)建一個(gè)子流程,并且等待知道子流程完成后,執(zhí)行流程將會(huì)繼續(xù)執(zhí)行.? 創(chuàng)建一個(gè)子流程,并且等待知道子流程完成后,執(zhí)行流程將會(huì)繼續(xù)執(zhí)行.?sub-process的屬性:anytext可選string可選使用流程設(shè)計(jì)工具時(shí),圖象大小和全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移?example參考sub-processname節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.name精心整理坐標(biāo)信息.async|continuesync|sync可選指定同步,異步或互斥的.exclusive在行級(jí)執(zhí)行時(shí)提交的hibernateoutcomeexpression可選的lockmode,以避免兩個(gè)并行事物不知道對(duì)方是否到達(dá)join節(jié)點(diǎn),導(dǎo)致進(jìn)程死鎖.sub-process-id或聲明調(diào)用特定版本的子流程,子流sub-process-idstringsub-process-key必含程的id可以是text或有其一.ELexpression.sub-process-id或聲明在每次流程執(zhí)行時(shí),調(diào)用最新sub-process-keystringsub-process-key必含版本的子流程.key可以是text或有其一.ELexpression.全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移parameter-in 在子流程實(shí)例被創(chuàng)建時(shí),聲明傳遞到子流程實(shí)例的參數(shù)parameter-out 在子流程結(jié)束的時(shí)候,聲明在上級(jí)流程執(zhí)行使用到的參數(shù).timer 計(jì)時(shí)器swimlane-mapping?example流程可以有多個(gè)end節(jié)點(diǎn)在SubProcessOutcomeActivityTest例子中,子流程的結(jié)果end節(jié)點(diǎn)被用于選擇向外轉(zhuǎn)移<processname="SubProcessDocument”><start><transitionto="review”/></start><sub-processname="review”sub-process-key="SubProcessReview”><transitionname="ok"to="nextstep"/><transitionname="nok"to="update"/><transitionname="reject"to="close"/></sub-process><statename="nextstep"/><statename="update"/><statename="close"/></process>SubProcessReview擁有多個(gè)end節(jié)點(diǎn):<processname="SubProcessReview”<start><transitionto="getapproval”/></start><taskname="getapproval"assignee="johndoe"><transitionname="ok"to="ok"/><transitionname="nok"to="nok"/><transitionname="reject"to="reject"/></task><endname="ok"/><endname="nok"/><endname="reject"/></process>新的document流程實(shí)例通常是這樣啟動(dòng)的:ProcessInstanceprocessInstance=executionService.startProcessInstanceByKey("SubProcessDocument");task從johndoe的tasklist中取出task.List<Task>taskList=taskService.findPersonalTasks("johndoe");Tasktask=taskList.get(0);task完成后,結(jié)果是ok.taskSpleteTask(task.getDbid(),"ok");這會(huì)導(dǎo)致子流程在end節(jié)點(diǎn)中的ok結(jié)束.上一級(jí)的流程執(zhí)行將會(huì)向外轉(zhuǎn)移到ok,然后下一步.Automaticactivitiesscript? script節(jié)點(diǎn)用于執(zhí)行腳本.? 腳本可以使用任何語言定義.? script節(jié)點(diǎn)的屬性:nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.async|continuesync|sync可選指定同步,異步或互斥的.exclusivelangstring可選聲明使用的語言exprstring可選script將會(huì)在被執(zhí)行,并且判斷向外轉(zhuǎn)移節(jié)點(diǎn)的名字.varstring可選腳本執(zhí)行保存的結(jié)果的參數(shù)的名稱.? script節(jié)點(diǎn)嵌套的標(biāo)簽:
description節(jié)點(diǎn)描述text 將會(huì)被運(yùn)行的腳本內(nèi)容可以放入該標(biāo)簽中.全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移example:流程圖如下:以下是一個(gè)java任務(wù):<processname="Java"<start><transitionto="greet”/></start><javaname="greet"method="hello"var="answer"><fieldname="state"><stringvalue="fine"/></field><arg><stringvalue="Hi,howareyou?"/></arg><transitionto="shakehand"/></java><javaname="shakehand"expr="#{hand}"method="shake"var="hand"><arg><object<arg><object<transitionto="wait"/></java><statename="wait"/></process>Classesinvolved:publicclassJohnDoe{Stringstate;Sessionsession;publicStringhello(Stringmsg){if((msg.indexOf("howareyou?")!=-1)&&(session.isOpen())){return"I'm"+state+”,thankyou.";}returnnull;
}}publicclassJoeSmoeimplementsSerializable{staticMap<String,Integer>handshakes=newHashMap<String,Integer>();{handshakes.put("force",5);handshakes.put("duration”,12);}publicMap<String,Integer>getHandshakes(){returnhandshakes;}}publicclassHandimplementsSerializable{privatebooleanisShaken;publicHandshake(Integerforce,Integerduration){if(force>3&&duration>7){isShaken=true;}returnthis;}publicbooleanisShaken(){returnisShaken;}}hql?使用?使用hql節(jié)點(diǎn),可以運(yùn)行HQL查詢語句和數(shù)據(jù)庫(kù)交互,結(jié)果將被保存到流程參數(shù)中.?hql節(jié)點(diǎn)的屬性:nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.asynclcontinuesync|sync可選指定同步,異步或互斥的.exclusiveuniquestring可選聲明query是否返回一個(gè)唯一的結(jié)果.varstring可選腳本執(zhí)行保存的結(jié)果的參數(shù)的名稱.?hql節(jié)點(diǎn)嵌套的標(biāo)簽:description節(jié)點(diǎn)描述.query查詢語句.
query查詢語句.parameters 查詢的參數(shù).全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移?example:1.5.3.sql?sql節(jié)點(diǎn)跟hql節(jié)點(diǎn)相同.? 唯一不同的是sql節(jié)點(diǎn)使用了session.createSQLQuery().?sql節(jié)點(diǎn)的屬性:nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.asynclcontinuesynclsync可選指定同步,異步或互斥的.exclusiveuniquestring可選聲明query是否返回一個(gè)唯一的結(jié)果.varstring可選腳本執(zhí)行保存的結(jié)果的參數(shù)的名稱.? sql節(jié)點(diǎn)嵌套的標(biāo)簽:description節(jié)點(diǎn)描述.query 查詢語句.parameters查詢的參數(shù).全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移?example:<?xml?version="1.0"?encoding="UTF-8"?>??<start>????<transition?to="get?task?names"?/>??</start>??<sql?name="get?task?names"???????var="tasknames?with?i">????<query>??????select?NAME_??????from?JBPM4_TASK??????where?NAME_?like?:name
</query>〈parameters〉????????<object?name="name"?expr="#{name}”?/>〈/parameters〉????<transition?to="count?tasks"?/>??</sql>??<sql?name="count?tasks"???????var="tasks"???????unique="true"><query>??????select?count(*)??????from?JBPM4_TASK</query>????<transition?to="wait"?/></sql>??<state?name="wait"/></process>mail通過使用mail節(jié)點(diǎn),流程定義者可以指定通過email發(fā)送的內(nèi)容.發(fā)送可以定義多個(gè)接收者.每一個(gè)郵件都是通過模板產(chǎn)生的.模板可以通過內(nèi)聯(lián)指定或者在配置文件中的process-engine-context部分定義.mail節(jié)點(diǎn)的屬性:可nameanytext選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.asyncl可sync選continuesynclexclusive指定同步,異步或互斥的.auto-writestring可選指明是否根據(jù)propertyname,type跟objectname,type自動(dòng)綁定memberfield和setterproperty.truelonlenabledl可指明usercode是否應(yīng)該緩存.cachefalsel選offldisableclassstring可選class完整的名稱.exprstring可提供的對(duì)象.
選factorystring可選factoryobject的名稱.langstring可選聲明腳本使用語言.methodstring可選factorymethod名稱.template可選郵件使用的模板.?mail節(jié)點(diǎn)嵌套的標(biāo)簽:description節(jié)點(diǎn)描述.query查詢語句.parameters 查詢的參數(shù).全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).1全局標(biāo)簽,向外的轉(zhuǎn)移example:<processname="InlineMail”<start><transitionto="sendbirthdayremindernote”/></start><mailname="sendbirthdayremindernote”><to/><subject>Reminder:${person}celebrateshisbirthday!</subject><text>Donotforget:${date}isthebirthdayof${person}</text>〈attachments〉<attachmentresource="org/example/birthday_card.png”/><attachmentname="picture.jpg"expression="${picture}"mime-type="image/jpeg"/>〈/attachments)<transitionto="end"/></mail><statename="end"/></process>精心整理不穩(wěn)定標(biāo)簽timertimer可以在等待狀態(tài)節(jié)點(diǎn)中的〈transition〉中指定,例如:state,task,sub-proces和group.當(dāng)計(jì)時(shí)器發(fā)動(dòng)時(shí),向外轉(zhuǎn)移就會(huì)推進(jìn).timer也可以在等待狀態(tài)節(jié)點(diǎn)中的自定義時(shí)間標(biāo)簽中指定,例如:state,task,sub-process和group.timer應(yīng)該是on標(biāo)簽中的第一個(gè)元素.在這種情況中,事件根據(jù)timer中的duedate屬性發(fā)動(dòng).timer在進(jìn)入節(jié)點(diǎn)的時(shí)候被創(chuàng)建.在執(zhí)行過程中,timer仍然在節(jié)點(diǎn)里面直到到duedte的時(shí)候,timer發(fā)動(dòng).當(dāng)執(zhí)行離開節(jié)點(diǎn),timer將被取消.timer節(jié)點(diǎn)的屬性:duedateanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.duedatetimestring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.asynclrepeatsynclsync可選指定同步,異步或互斥的.exclusivedescription 節(jié)點(diǎn)描述.event-listenerhqlsqlassignscriptmail?exampledescription 節(jié)點(diǎn)描述.event-listenerhqlsqlassignscriptmail?example:定義事件監(jiān)聽節(jié)點(diǎn)定義hql節(jié)點(diǎn)定義sql節(jié)點(diǎn)定以java節(jié)點(diǎn)定義assign節(jié)點(diǎn)定義script節(jié)點(diǎn)定義mail節(jié)點(diǎn)下面的例子是所有可能的使用Thefollowingexamplesoftheusageareallpossible<timername="daysBeforeHoliday"duedate="5businessdays”>...</timer><timername="pensionDate"duedate="#{dateOfBirth}+65years”>...</timer><timername="pensionReminder"duedate="#{dateOfPension}-1year”>...</timer><timername="fireWorks"duedate="#{chineseNewYear}repeat="1year”>...</timer><remindername="hitBoss"duedate="#{payRaiseDay}+3days”repeat="1week”/>
<remindername="hitBoss"duedate="#{payRaiseDay}+3days”repeat="#{iritationFactor}"/>下面一個(gè)例子,一個(gè)在業(yè)務(wù)組合中的減法,是不支持的,將會(huì)拋出異常,結(jié)果是duedates是過去的時(shí)間.<remindername="toGoOrNotToGo"duedate="#{goLive}-3businessdays”/>1.6.2.group?在流程中?在流程中,把一系列的節(jié)點(diǎn)歸成一類.?包含的組必須有層次地嵌套.?一個(gè)組對(duì)應(yīng)于一個(gè)BPMN被擴(kuò)展的子流程.?group節(jié)點(diǎn)的屬性:nameanytext 可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.g string 可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.g string 可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.?group節(jié)點(diǎn)嵌套的標(biāo)簽:description 節(jié)點(diǎn)描述.transition定義transition節(jié)點(diǎn)on定義on節(jié)點(diǎn)start定義start節(jié)點(diǎn)end定義end節(jié)點(diǎn)end-cancel定義end-cancel節(jié)點(diǎn)end-error定義end-error節(jié)點(diǎn)state定義state節(jié)點(diǎn)decision定義decision節(jié)點(diǎn)foreach定義foreach節(jié)點(diǎn)fork定義fork節(jié)點(diǎn)jointask定義join節(jié)點(diǎn)定義task節(jié)點(diǎn)sub-process定義sub-process節(jié)點(diǎn)grouprules-decision定義group節(jié)點(diǎn)定義rules-decision節(jié)點(diǎn)rules定義rules節(jié)點(diǎn)event-listener定義事件監(jiān)聽節(jié)點(diǎn).hql 定義hql節(jié)點(diǎn)sql定義sql節(jié)點(diǎn)sql定以java節(jié)點(diǎn)
assign 定義assign節(jié)點(diǎn)script 定義script節(jié)點(diǎn)mail 定義mail節(jié)點(diǎn)timer 定義timer節(jié)點(diǎn)jms 定義jms節(jié)點(diǎn)example:這個(gè)例子是group的基本操作.<processname="GroupSimple”<start><transitionto="evaluatedocument”/></start><groupname="evaluatedocument"><start><transitionto="distributedocument"/></start><statename="distributedocument"><transitionto="collectfeedback"/></state><statename="collectfeedback"><transitionname="approved"to="done"/><transitionname="rejected"to="updatedocument"/></state><statename="updatedocument"><transitionto="distributedocument"/></state><endname="done"/><transitionto="publishdocument"/></group><statename="publishdocument"/></process>接下來的代碼片段是一個(gè)當(dāng)文檔第一次傳入到collectfeedback的時(shí)候,全面拒絕文檔的測(cè)試?yán)?這時(shí)文檔經(jīng)過updatedocument,distributedocument4回至Ucollectfeedback第二次的時(shí)候,collectfeedback將會(huì)完成.所有的節(jié)點(diǎn)都參與的是waitstate.ProcessInstanceprocessInstance=executionService.startProcessInstanceByKey("GroupSimple");Stringpid=processInstance.getId();assertEquals("distributedocument”,processInstance.getActivityName());processInstance=executionService.signalExecutionById(pid);assertEquals("collectfeedback”,processInstance.getActivityName());processInstance=executionService.signalExecutionById(pid,"rejected");assertEquals("updatedocument”,processInstance.getActivityName());processInstance=executionService.signalExecutionById(pid);assertEquals("distributedocument”,processInstance.getActivityName());
processInstance=executionService.signalExecutionById(pid);assertEquals("collectfeedback”,processInstance.getActivityName());processInstance=executionService.signalExecutionById(pid,"approved");assertEquals("publishdocument”,processInstance.getActivityName());1.6.3.foreach? foreach? foreach允許從一個(gè)單一的開始點(diǎn)分離成多個(gè)分支執(zhí)行.? foreach節(jié)點(diǎn)的屬性:nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.async|continuesync|sync可選指定同步,異步或互斥的.腳本執(zhí)行保存的結(jié)果的參數(shù)的名稱exclusivestring? foreachexclusivestring? foreach節(jié)點(diǎn)嵌套的標(biāo)簽:description節(jié)點(diǎn)描述全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移?example:在下面的例子里,,有一個(gè)從不同部分收集報(bào)告的需求.同樣的task需要被不同的group執(zhí)行.這種情況用foreach處理很方便.流程參數(shù)departments提供groupnames,其中的quota說明了有多少task必須在執(zhí)行離開join節(jié)點(diǎn)之前完成.<processname="ForEach"<startg="28,61,48,48"name="start1"><transitionto="foreach1”/></start><foreachvar="department"in="#{departments}"g="111,60,48,48"name="foreach1"><transitionto="Collectreports”/></foreach><taskcandidate-groups="#{department}"g="201,58,92,52"name="Collectreports"><transitionto="join1"/></task><joing="343,59,48,48"multiplicity="#{quorum}"name="join1"><transitionto="end1"/></join><endg="433,60,48,48"name="end1"/>精心整理</process>1.6.4.java(Automaticactivities)? Java事件.一個(gè)流程的執(zhí)行將會(huì)執(zhí)行在節(jié)點(diǎn)中配置好的class的方法.? Java節(jié)點(diǎn)的屬性:nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.asynclcontinuesynclsync可選指定同步,異步或互斥的.exclusiveejb-jndi-namestring可選ejb需要調(diào)用的jndi名稱.exprstring可選解析目標(biāo)對(duì)象調(diào)用哪個(gè)方法.langstring可選聲明expr中使用的語言methodstring可選調(diào)用方法的名稱.varstring可選保存返回值的參數(shù).Java節(jié)點(diǎn)嵌套的標(biāo)簽:description節(jié)點(diǎn)描述field 從環(huán)境調(diào)用中注入字段.arg 方法傳入?yún)?shù)全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移example:java節(jié)點(diǎn)的目的是調(diào)用Java方法.這個(gè)例子說明怎么樣使用java節(jié)點(diǎn)調(diào)用ejbsessionbean方法.正是因?yàn)檫@樣一來,它可以使用ejb-jndi-name屬性.它的名稱說明了屬性指定了方法需要調(diào)用的ejb的jndi名稱.參考下面的ejb:packageimport?StatelesspublicclassCalculatorBeanimplementsCalculatorRemote,CalculatorLocal{publicIntegeradd(Integerx,Integery){returnx+y;}publicIntegersubtract(Integerx,Integery){returnx-y;}}
精心整理和下面的流程定義:<processname="EJB"><start><transitionto="calculate”/></start><javaname="calculate"ejb-jndi-name="CalculatorBean/local"method="add"var="answer"><argXintvalue="25"/X/arg><argXintvalue="38"/X/arg><transitionto="wait"/></java><statename="wait"/></process>正如你所希望,這個(gè)節(jié)點(diǎn)的執(zhí)行將會(huì)根據(jù)jndi的nameCalculatorBean/local調(diào)用ejb的add方法.結(jié)果將會(huì)被存儲(chǔ)在answer中.這是對(duì)下面代碼片段的說明.publicvoidtestEjbInvocation()throwsException{StringexecutionId=executionService.startProcessInstanceByKey("EJB").getProcessInstance().getId();assertEquals(63,executionService.getVariable(executionId,"answer"));}1.6.5.assign?assign檢索一個(gè)值,并分配到目標(biāo).?assign節(jié)點(diǎn)的屬性:nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.continueasync|sync| syncexclusive可選指定同步,異步或互斥的.from-exprstring可選解析提供源值的表達(dá)式from-varstring可選提供源值的參數(shù)langstring可選聲明expr中使用的語言to-exprstring可選解析目標(biāo)的表達(dá)式.to-var string?assign節(jié)點(diǎn)嵌套的標(biāo)簽:可選提供目標(biāo)的參數(shù).description節(jié)點(diǎn)描述from 構(gòu)造源值的描述符.全局標(biāo)簽,定義某個(gè)節(jié)點(diǎn)的在on可以嵌套的標(biāo)簽的功能(timer,hql,event-listener等等).全局標(biāo)簽,向外的轉(zhuǎn)移?example:每一種的from都可以結(jié)合任何類型的to.下面列出了簡(jiǎn)單的assign一個(gè)參數(shù)給另一個(gè).<assignname='copy'from-var='person'to-var='clone'><transitionto='wait'/></assign>下一個(gè)例子說明了一個(gè)expressionvalue付給了一個(gè)variable.<assignname='resolve'from-expr='#{}'to-var='name'><transitionto='wait'/></assign>最后一個(gè)例子說明了一個(gè)被描述符構(gòu)建的值付給expression描述的位置.<assignname='resolve'<from><stringvalue='gasthuisstraat'/></from><transitionto='wait'/></assign>rulesrules是一個(gè)自動(dòng)節(jié)點(diǎn),將會(huì)創(chuàng)建有狀態(tài)的knowledgesession,提供若干的條件,以及發(fā)動(dòng)全部的規(guī)則.rules的目的是更新或者創(chuàng)建流程將會(huì)使用到的參數(shù).rules節(jié)點(diǎn)的條件可以以嵌套標(biāo)簽的形式指定.assign節(jié)點(diǎn)的屬性:rules節(jié)點(diǎn)的屬性:assign節(jié)點(diǎn)嵌套的標(biāo)簽:example:<processname="Rules"><start><transitionto="evaluateStatus"/></start><rulesname="evaluateStatus"><factvar="room"/><transitionto="checkForFires"/></rules><decisionname="checkForFires"><transitionto="getFireExtinguisher"><conditionexpr="#{room.onFire}"/>〈/transition〉精心整理<transitionto="goToPub”/>〈/decision〉<statename="getFireExtinguisher"/><statename="goToPub"/>〈/process〉如果room發(fā)動(dòng)了,流程首先會(huì)檢查rules.Roomclass描述如下:publicclassRoomimplementsSerializable{inttemperature=21;booleansmoke=false;booleanisOnFire=false;publicRoom(inttemperature,booleansmoke){this.temperature=temperature;this.smoke=smoke;}...gettersandsetters...}接下來的rules在相同的businessarchive中部署:rule”CheckRoomOnFire”whenroom:temperature>30,smoke==true)thenroom.setOnFire(true);end所以當(dāng)一個(gè)新的rules流程實(shí)例是像這樣啟動(dòng)的:Map<String,Object>variables=newHashMap<String,Object>();variables.put("room",newRoom(350,true));ProcessInstanceprocessInstance=executionService.startProcessInstanceByKey("Rules”,variables);這時(shí)流程將會(huì)在getFireExtinguisher結(jié)束.并且當(dāng)流程使用Room(21,false)啟動(dòng)時(shí),將會(huì)在goToPub結(jié)束.rules-decision?rules-decision是一個(gè)自動(dòng)節(jié)點(diǎn),根據(jù)規(guī)則選擇一個(gè)向外轉(zhuǎn)移.?規(guī)則將會(huì)被部署成業(yè)務(wù)目標(biāo)的一部分.?規(guī)則可以使用所有的流程參數(shù).?rules-decision節(jié)點(diǎn)的屬性:nameanytext可選節(jié)點(diǎn)名稱,名稱應(yīng)該在整個(gè)流程中是唯一的.gstring可選使用流程設(shè)計(jì)工具時(shí),圖象大小和坐標(biāo)信息.async|continuesync|sync可選指定同步,異步或互斥的.exclusiveformstring可選在部署中資源的形式formstring可選在部署中資源的形式rules-decision節(jié)點(diǎn)嵌套的標(biāo)簽:descri
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年事業(yè)單位招聘機(jī)械類試卷:2025年機(jī)械制造與維修技能實(shí)戰(zhàn)試題
- 2025年事業(yè)單位招聘考試教師信息技術(shù)學(xué)科專業(yè)知識(shí)試卷(易錯(cuò))
- 2025年事業(yè)單位招聘考試衛(wèi)生類中醫(yī)學(xué)專業(yè)知識(shí)試卷(中醫(yī)物理)
- 2025年探傷工(技師)考試試卷:考試資料解讀與
- 2025年蘇州市事業(yè)單位招聘考試教師招聘音樂學(xué)科專業(yè)知識(shí)試卷
- 2025年事業(yè)單位招聘考試教師音樂學(xué)科專業(yè)知識(shí)試卷(音樂教育與創(chuàng)新教育)
- 2025年托福考試閱讀真題模擬模擬試卷:天文學(xué)觀測(cè)宇宙奧秘
- 2025年事業(yè)單位招聘考試電氣類綜合專業(yè)能力測(cè)試重點(diǎn)難點(diǎn)試卷
- 2025年天車工應(yīng)急處理能力考試試卷
- 血透室血透基礎(chǔ)知識(shí)考核試題及答案
- 2025年急診急救試題(附答案)
- 貴州航空產(chǎn)業(yè)城集團(tuán)股份有限公司旗下子公司貴州安立航空材料有限公司招聘筆試題庫(kù)2025
- 2025年醫(yī)師節(jié)臨床知識(shí)競(jìng)賽題庫(kù)
- 2025年校長(zhǎng)職級(jí)考試題及答案
- 2024興平市輔警招聘考試真題
- 2025年保育員初級(jí)考試試題試題(含答案)(完整版)
- 2024年江蘇鎮(zhèn)江市科學(xué)技術(shù)局遴選事業(yè)單位人員2人筆試高頻難、易錯(cuò)點(diǎn)備考題庫(kù)及參考答案詳解1套
- 成都市二手房買賣合同房屋交易稅費(fèi)繳納及減免協(xié)議
- 經(jīng)食道心臟超聲技術(shù)規(guī)范
- 四川省達(dá)州市達(dá)川區(qū)2024-2025學(xué)年八年級(jí)下學(xué)期6月期末考試英語試題(含筆試答案無聽力答案、原文及音頻)
- (高清版)TDT 1075-2023 光伏發(fā)電站工程項(xiàng)目用地控制指標(biāo)
評(píng)論
0/150
提交評(píng)論