前言:對(duì)于急切想了解引擎功能的開發(fā)人員,在下載版本后,就想嘗試編寫代碼,完成一個(gè)流程的開發(fā)和測(cè)試。本文試圖從請(qǐng)假流程,或分支模式來(lái)快速了解引擎代碼的編寫。
版本:.NET CORE 2.1
1. 創(chuàng)建或分支流程圖形
? ? ? ? 或分支流程是常見的決策類的流程,用于處理不同決策場(chǎng)景出現(xiàn)的業(yè)務(wù)處理,其中每個(gè)分支又可以看成是一個(gè)串行流程的片段。下面是請(qǐng)假流程的創(chuàng)建代碼:
var pmb = ProcessModelBuilder.CreateProcess("LeaveRequest",
"LeaveRequestCode"); var process = pmb.Start("Start") .Task("Fill Leave Days")
.OrSplit("OrSplit") .Parallels( () => pmb.Branch( () => pmb.Task(
VertexBuilder.CreateTask("CEO Evaluate"),
LinkBuilder.CreateTransition("days>=3")
.AddCondition(ConditionTypeEnum.Expression, "days>=3") ) ) , () => pmb.Branch(
() => pmb.Task( VertexBuilder.CreateTask("Manager Evaluate"),
LinkBuilder.CreateTransition("days<3")
.AddCondition(ConditionTypeEnum.Expression, "days<3") ) ) ) .OrJoin("OrJoin")
.Task("HR Notify") .End("End") .Store();
上述代碼創(chuàng)建了一個(gè)或分支(OrSplit-OrJoin)流程,有兩個(gè)分支,表示實(shí)際業(yè)務(wù)過(guò)程中的請(qǐng)假流程,創(chuàng)建完成的流程圖示例如下:
?? ? ? ?
或分支是兩個(gè)伴隨條件表達(dá)式的轉(zhuǎn)移(Transition),在或分支網(wǎng)關(guān)節(jié)點(diǎn)時(shí)候,流程會(huì)根據(jù)傳入的條件變量days的數(shù)值來(lái)判斷是走哪條分支,此流程可以看做是請(qǐng)假流程中的請(qǐng)假天數(shù)的分支選擇一樣。比如,請(qǐng)假天數(shù)在3天以內(nèi),由部門經(jīng)理來(lái)審批,當(dāng)請(qǐng)假天數(shù)超過(guò)(包含)3天時(shí),則需要總經(jīng)理來(lái)審批。通過(guò)或分支模式,來(lái)實(shí)現(xiàn)審批決策。
?2. 流程啟動(dòng)和運(yùn)行
? ? ? 流程的啟動(dòng)和運(yùn)行是最為常用的兩個(gè)API接口。
2.1 流程啟動(dòng)
? ? ? 啟動(dòng)需要處理的是流程實(shí)例的創(chuàng)建,還有開始節(jié)點(diǎn)和開始節(jié)點(diǎn)之后任務(wù)節(jié)點(diǎn)的創(chuàng)建,示例代碼如下:
IWorkflowService wfService = new WorkflowService(); var wfResult =
wfService.CreateRunner("10", "jack") .UseApp("DS-100", "Leave-Request",
"DS-100-LX") .UseProcess("LeaveRequestCode") .Start();
? ? ? 活動(dòng)實(shí)例記錄表如下:
?
?? ? ? ?同樣按照請(qǐng)假流程為例進(jìn)行說(shuō)明,第一個(gè)任務(wù)節(jié)點(diǎn)可以視為“提交請(qǐng)假單”,當(dāng)員工填寫完請(qǐng)假單,提交后,則可以視為啟動(dòng)流程。
?2.2 流程運(yùn)行
? ? ?
流程運(yùn)行是由當(dāng)前待辦任務(wù)開始辦理,并且運(yùn)行到下一步的過(guò)程。因?yàn)槭腔蚍种ЬW(wǎng)關(guān),所以需要明確指定條件變量的名稱和數(shù)值,用于確定下一步的分支路徑。此處,請(qǐng)假天數(shù)days作為條件變量,需要傳入,當(dāng)請(qǐng)假天數(shù)是3天時(shí),網(wǎng)關(guān)決策到CEO審批節(jié)點(diǎn),所以只會(huì)選擇其中的一條或分支進(jìn)行路由。代碼示例如下:
IWorkflowService wfService = new WorkflowService(); var wfResult =
wfService.CreateRunner("10", "jack") .UseApp("DS-100", "Leave-Request",
"DS-100-LX") .UseProcess("LeaveRequestCode") .OnTask(8017) .IfCondition("days",
"3") .NextStepInt("20", "Alice") .Run();
活動(dòng)實(shí)例記錄表如下:
?
?3. 流程的撤銷和退回??
3.1 流程撤銷
? ? ? ?如果用戶在完成自己的待辦任務(wù),并且發(fā)出給下一步辦理人時(shí),發(fā)現(xiàn)有錯(cuò)誤信息,需要撤銷時(shí),可以由自己發(fā)起,將當(dāng)前流程撤銷回來(lái)。
IWorkflowService wfService = new WorkflowService(); var wfResult =
wfService.CreateRunner("10", "Jack") .UseApp("DS-100", "Leave-Request",
"DS-100-LX") .UseProcess("LeaveRequestCode") .OnTask(8017) //TaskID .Withdraw();
?活動(dòng)實(shí)例記錄表如下:
??? 3.2?流程退回
? ? ?
?流程退回是由當(dāng)前待辦任務(wù)的辦理人發(fā)起,退回到流程的上一步。假如對(duì)并行分支中的其中一個(gè)分支進(jìn)行退回處理,這個(gè)時(shí)候,默認(rèn)只退回當(dāng)前分支到網(wǎng)關(guān)之前的任務(wù)節(jié)點(diǎn),并不會(huì)影響另外一個(gè)分支。
IWorkflowService wfService = new WorkflowService(); var wfResult =
wfService.CreateRunner("20", "Alice") .UseApp("DS-100", "Leave-Request",
"DS-100-LX") .UseProcess("LeaveRequestCode") .PrevStepInt() .OnTask(8020)
//TaskID .SendBack();
活動(dòng)實(shí)例記錄表如下:
4. 輔助開發(fā)工具
1) Slickflow 流程設(shè)計(jì)器
http://demo.slickflow.com/sfd/ <http://demo.slickflow.com/sfd/>
2) Slickflow Web測(cè)試工具
http://demo.slickflow.com/sfw2/ <http://demo.slickflow.com/sfw2/>
5. 總結(jié)
1) 以上代碼,可以幫助開發(fā)人員快速熟悉引擎組件的接口和簡(jiǎn)單或分支的實(shí)用功能,完整功能需要在企業(yè)版以上版本獲?。?br>
2) 輔助開發(fā)工具中的流程設(shè)計(jì)器以及Web測(cè)試工具,給用戶直觀的體驗(yàn)操作,而且也適合不同類型的業(yè)務(wù)用戶;
3) 代碼方式創(chuàng)建流程和測(cè)試流程方便開發(fā)人員快速學(xué)習(xí)和上手,是一種提升工作效率的高效方法。
?
熱門工具 換一換