




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 jtangflow-s v3.0程序員手冊浙江省杭州市東部軟件園a座1212室浙江大學中間件工程技術中心修訂記錄日期修訂版本描述作者2007-05-161.00初稿完成阮凌波、吳斌、黃頌博67jtang應用服務器程序員手冊目錄1. 概述31.1 文檔概覽31.2 文檔受眾31.3 相關文檔32. 系統(tǒng)簡介32.1 系統(tǒng)基本概念32.2 系統(tǒng)體系結構42.3 系統(tǒng)組成部分52.3.1 流程定義工具52.3.2 工作流引擎52.4 系統(tǒng)功能82.4.1 業(yè)務流程建模功能82.4.2 流程執(zhí)行和監(jiān)控功能92.5 系統(tǒng)運行環(huán)境92.6 系統(tǒng)性能92.7 系統(tǒng)特色102.7.1 規(guī)范化和標準化102.
2、7.2 完整的系統(tǒng)部件102.7.3 靈活的流程定義102.7.4 豐富的應用編程接口102.7.5 方便的第三方組織數(shù)據(jù)的重用方案102.7.6 跨語言的工作流二次開發(fā)113. 基于jtangflow的接口開發(fā)工作流任務管理器113.1 工作流任務管理器功能框架113.2 登錄模塊設計123.3 任務列表模塊的開發(fā)(主要介紹allworkitem.jsp)123.4 任務執(zhí)行模塊的開發(fā)133.4.1 任務執(zhí)行模塊功能框架133.4.2 啟動新流程的功能開發(fā)143.4.3 執(zhí)行任務的功能開發(fā)(主要介紹doworkitem.jsp)153.4.4 動態(tài)設置任務的功能開發(fā)173.4.5 任務轉(zhuǎn)發(fā)對
3、象的選取的功能開發(fā)(未做)183.4.6 任務轉(zhuǎn)發(fā)的功能開發(fā)(未做)193.5 用戶應用頁面開發(fā)193.5.1 獲取應用數(shù)據(jù)193.5.2 用戶頁面內(nèi)容203.5.3 回傳數(shù)據(jù)203.6 流程監(jiān)控模塊的開發(fā)(缺)203.7 消息發(fā)送的功能開發(fā)(缺)203.7.1 獲取當前系統(tǒng)消息列表的功能開發(fā)204. 附錄204.1 工作流接口wapi大全204.1.1 全局接口 globalapi(ejb接口) jtangflowfactory(ejb接口) transfer(ejb接口)284.1.2 實例接口2 packageinst
4、ance(ejb接口)2 processinstance(ejb接口)3 actinstance(ejb接口)3 workitem(ejb接口)3 datainstance(ejb接口)4 participantinstance434.1.3 定義接口4 flowpackage(ejb接口)4 process(ejb接口)4 activity(ejb接口)50 transition(java類)5 participant(java類)54
5、 data(java類)5 application包561. 概述1.1 文檔概覽第一章,概述,從總體上介紹了文檔的組織結構。第二章,系統(tǒng)簡介,介紹了jtangflow-s的整體結構,重點說明了引擎部分第三章,講述了如何基于jtangflow-s提供的接口進行二次開發(fā),主要包括任務管理器和監(jiān)控器的開發(fā)。第四章,附錄部分對jtangflow-s提供的二次開發(fā)接口進行了具體說明。1.2 文檔受眾本文檔面向基于jtangflow-s系統(tǒng)進行二次開發(fā)的程序員,文檔中包含的主題主要集中在如何使用系統(tǒng)提供的接口開發(fā)任務管理器和監(jiān)控器,同時,也包含了一些jtangflow-s系
6、統(tǒng)的基本架構和工作流的一些基本概念,對于測試和使用工作流系統(tǒng)也有一定的參考價值。1.3 相關文檔jtangflow用戶使用手冊.doc:工作流定義器使用幫助文檔2. 系統(tǒng)簡介2.1 系統(tǒng)基本概念l 工作流(workflow)業(yè)務流程的全部或部分自動化,在此過程中,文檔、信息或者任務按照一定的過程規(guī)則流轉(zhuǎn),實現(xiàn)組織成員間的協(xié)調(diào)工作以期達到業(yè)務的整體目標。l 工作流管理系統(tǒng)(wfms: workflow management system)一種能定義、創(chuàng)建和管理工作流執(zhí)行的系統(tǒng)。主要包含三種功能:在流程建立建模的建模功能,即完成工作流過程和相關活動的定義和描述;在流程執(zhí)行階段的控制功能,即執(zhí)行工作
7、流過程,完成活動調(diào)度、任務分發(fā)和流程流轉(zhuǎn);在流程運行階段的人機交互功能,即在各種活動執(zhí)行過程中實現(xiàn)用戶與應用工具之間的數(shù)據(jù)交互。 l 業(yè)務流程(business process)在功能確定的組織結構中,能夠?qū)崿F(xiàn)業(yè)務目標和策略的相互連接的過程和活動集。例如,投保過程、項目開發(fā)過程。l 流程定義(process definition)業(yè)務流程的形式化描述,來支持系統(tǒng)建模和運行過程的自動化。過程可分解為一系列子過程和活動,其定義主要包括描述過程起始、終止的活動關系網(wǎng)絡,以及一些關于個體行為的信息,例如組織成員,與過程相關的應用和數(shù)據(jù)等。l 活動(activity)實現(xiàn)過程邏輯步驟的一項工作任務的描述
8、,一般分手工操作和自動處理兩類?;顒邮沁^程執(zhí)行中可被工作流引擎調(diào)度的最小工作單元,它要求有人或機器的參與。l 流程實例/活動實例(process instances/activity instances)實際運行中的一個過程或活動。每個實例代表一個能獨立控制執(zhí)行,具有內(nèi)部狀態(tài)的線程,可被外界通過標識存取。下圖工作流基本概念及其關系。圖 21工作流概念及關系圖2.2 系統(tǒng)體系結構jtangflow工作流管理系統(tǒng)是在wfmc的工作流參考模型的基礎上進行開發(fā)的,下圖為系統(tǒng)的整體結構圖。系統(tǒng)可以分為系統(tǒng)建模工具、工作流運行平臺兩個部分。系統(tǒng)建模工具是提供給應用系統(tǒng)開發(fā)者,讓其定義流程,定義組織結構和登
9、記所開發(fā)的頁面應用的工具,包括流程定義工具,組織結構定義工具和應用管理工具。這些工具都是運行于客戶端的windows程序。流程運行平臺用以在系統(tǒng)運行時,支持流程的執(zhí)行,主要作用有保證流程正常流轉(zhuǎn),分派任務,提供接口讓用戶獲取任務等。流程運行平臺又可以分為工作流接口,工作流引擎、工作流任務管理器和工作流監(jiān)控工具。圖 22 jtangflow-s整體體系結構圖2.3 系統(tǒng)組成部分2.3.1 流程定義工具流程定義工具主要是一個圖形化的流程定義工具,提供所見即所得的流程定制平臺,其中包括流程定制部分、人員管理部分。具體請見jtangflow用戶使用手冊.doc。2.3.2 工作流引擎工作流引擎是在后臺
10、運行的一個java程序,主要負責流程的正常流轉(zhuǎn)。主要的作用有啟動和結束活動,檢查流程是否超期等。這個程序直接操作數(shù)據(jù)庫,和工作流接口以及應用系統(tǒng)沒有直接的聯(lián)系,而系統(tǒng)開發(fā)者和使用者也都不需要做和其相關的工作。引擎結構圖如下:圖 23 jtangflow-s引擎體系結構圖從下往上依次為:工作流持久化層:用于保存流程運行的定義信息和運行時信息,備份歷史數(shù)據(jù),保證在引擎正常關閉或者異常后能繼續(xù)未完成工作。中間件服務器:jtangflow-s引擎運行在如jtang、jboss之類的中間件平臺之上,主要使用了web和ejb技術。后臺引擎:jtangflow-s引擎的核心部分,主要包括流程控制子模塊、應用
11、調(diào)用子模塊、事件處理子模塊。工作流接口:工作流的接口是直接提供給應用開發(fā)者,用于在工作流管理系統(tǒng)的基礎上開發(fā)應用系統(tǒng)。通過這些接口應用程序可以直接對工作流系統(tǒng)進行操作,使用工作流系統(tǒng)中的功能。這里主要的接口是工作流應用編程接口,提供了用戶任務管理,應用調(diào)用,流程跟蹤和監(jiān)控,設置活動和流程數(shù)據(jù)和屬性,代理人設置等幾方面功能。組織結構接口和通知提示接口是輔助接口,用以獲得組織結構信息和系統(tǒng)發(fā)給用戶的消息和提示。任務管理器:系統(tǒng)自帶了具備基本功能的任務管理器,能夠支持用戶登陸、獲取任務、執(zhí)行任務、轉(zhuǎn)發(fā)任務、發(fā)送消息等主要功能。監(jiān)控器:監(jiān)控工是錢塘工作流管理系統(tǒng)重要組成部分,主要提供對系統(tǒng)連接狀態(tài)的管
12、理、流程定義的管理以及流程實例的監(jiān)控三大模塊功能。其中,系統(tǒng)連接狀態(tài)的管理主要包括瀏覽當前系統(tǒng)的連接信息以及對連接的操作;流程定義的管理目前主要提供的是對流程定義信息的瀏覽;流程實例的監(jiān)控主要包括流程實例詳情的流程、流程狀態(tài)的修改、流程相關數(shù)據(jù)的修改、流程實例的相關任務的管理、流程實例相關活動的管理等。2.4 系統(tǒng)功能2.4.1 業(yè)務流程建模功能用戶通過使用錢塘工作流建模工具,經(jīng)過簡易方便的拖拉,以“所見即所的方式建立和發(fā)布業(yè)務流程。流程建模工具支持如下功能:o 支持順序、選擇、并發(fā)和循環(huán)等典型流程結構;o 支持子流程功能;o 支持基于角色和約束的任務分配策略;o 支持對任務進行期限設置;o
13、支持運行時指定任務的執(zhí)行者和設定任務期限;o 支持復雜的表達式功能;o 支持流程級別和任務級別的自定義屬性的設置;o 支持復雜的人員、組織和角色的關系模型;o 支持web應用、ejb應用、web服務等多種應用類型; 2.4.2 流程執(zhí)行和監(jiān)控功能錢塘工作流執(zhí)行引擎負責解析流程定義、生成用戶任務和流程路由選擇。用戶通過與工作流任務管理器的交互獲取任務列表、執(zhí)行和提交任務。流程管理員通過工作流監(jiān)控跟蹤和管理系統(tǒng)部署的流程和當前運行的流程狀態(tài)。流程執(zhí)行和監(jiān)控支持如下特殊功能:o 支持任務轉(zhuǎn)發(fā)功能;o 支持用戶代理功能;o 支持任務超期提醒功能;o 支持消息傳遞功能;o 支持用戶動態(tài)選擇路由功能;o
14、支持任務的批處理功能;o 支持任務的異常處理功能;o 支持流程歷史數(shù)據(jù)的自動備份功能; 2.5 系統(tǒng)運行環(huán)境1. 產(chǎn)品各組件的運行環(huán)境l 工作流引擎可運行在windows、linux、unix等操作系統(tǒng)之上。l 工作流建模工具(包括流程定義工具、人員組織角色管理工具和應用管理工具)運行在windows平臺之上。l 工作流任務管理器和工作流監(jiān)控器可運行在windows的ie、linux的netscape和mozilla瀏覽器之上。2. 產(chǎn)品支持的數(shù)據(jù)庫jtangflow支持sql server、oracle、mysql等主流數(shù)據(jù)庫產(chǎn)品。3. 系統(tǒng)支持的應用服務器jtangflow支持weblog
15、ic、jboss、jtang等應用服務器產(chǎn)品。2.6 系統(tǒng)性能jtangflow在如下系統(tǒng)環(huán)境中的性能輸入如下表所示:【硬件環(huán)境】 普通pc機cpu: p4 2.4g;內(nèi)存:ddr512m;【軟件環(huán)境】 操作系統(tǒng):window xp;數(shù)據(jù)庫:sql server;用服務器:jtang應用服務器;【性能測試軟件】loadrunner;測試內(nèi)容并發(fā)用戶數(shù)總響應時間(s)平均響應時間(ms)在無歷史數(shù)據(jù)的前提下,啟動流程實例,創(chuàng)建流程的起始活動實例并完成任務分發(fā)502346010048480200101505500255510在1000個流程實例的歷史數(shù)據(jù)的前提下,啟動流程實例,創(chuàng)建流程的起始活動實
16、例并完成任務分發(fā)5023460100494902001035155002595182.7 系統(tǒng)特色jtangflow工作流管理系統(tǒng)具有如下幾個特點:2.7.1 規(guī)范化和標準化jtangflow符合國際工作流聯(lián)盟提出的工作流和工作流管理系統(tǒng)模型,以及標準的5個應用程序編程接口wapis。2.7.2 完整的系統(tǒng)部件jtangflow提供了基本完整的工作流產(chǎn)品部件,各類圖形化的工作流系統(tǒng)工具(包括流程建模工具,人員組織建模工具,應用管理工具等),以及標準的基于ejb開發(fā)的wapis應用接口,所有這些部件能方便用戶快速有效的建立規(guī)范化的業(yè)務流程應用系統(tǒng)。2.7.3 靈活的流程定義jtangflow支持
17、多種流程模式,如順序、并發(fā)、選擇、循環(huán)、多實例活動等等。定義不再單純是定義階段的事情,在流程運行階段,同樣可以動態(tài)的定義流程的信息,這樣的定義使得用戶在定義流程的時候更加動態(tài)化,完成更加豐富和復雜的業(yè)務流程。2.7.4 豐富的應用編程接口jtangflow的主要設計目標就是提供一個讓用戶進行二次開發(fā)的平臺,以供系統(tǒng)開發(fā)者很好的將jtangflow集成或者嵌入到現(xiàn)有系統(tǒng)中。 由于實際情況的不同,開發(fā)者所要開發(fā)的應用系統(tǒng)不論是框架結構還是具體的功能方面都可能有各種不同的要求。工作流系統(tǒng)提供了豐富的編程接口,使得開發(fā)者可以用這些接口開發(fā)出符合實際要求的,不同的結構和用戶界面的實用系統(tǒng)。2.7.5 方
18、便的第三方組織數(shù)據(jù)的重用方案為了重用已有系統(tǒng)的人員組織數(shù)據(jù),錢塘工作流管理平臺提供了第三方人員的注冊和管理,既保證了工作流應用系統(tǒng)方便的重用第三方組織數(shù)據(jù),又避免了不必要的重復開發(fā)和管理。2.7.6 跨語言的工作流二次開發(fā)為了支持多種程序語言對工作流系統(tǒng)的訪問和集成,方便工作流應用系統(tǒng)的二次開發(fā),錢塘工作流管理平臺在提供了java編程接口和dll編程接口,方便不同的編程用戶開發(fā)適合自身特點和需求的工作流客戶端工具,包括任務管理器、監(jiān)視器。3. 基于jtangflow的接口開發(fā)工作流任務管理器3.1 工作流任務管理器功能框架工作流任務管理器的功能包括用戶登陸、任務管理、流程控制、系統(tǒng)消息、個人設
19、置等幾個模塊,下圖是一個典型的工作流任務管理器的功能框架圖。本章將介紹如何通過工作流接口實現(xiàn)基于web的工作流任務管理器。3.2 登錄模塊設計【名稱】:登錄處理【輸入】:用戶登錄名logname和用戶密碼pwd【相關頁面】:靜態(tài)登錄頁面index.htm, 動態(tài)登錄頁面log.jsp, 其中l(wèi)og.jsp包括頂部的top.jsp,左側(cè)的navi.jsp,右側(cè)的allworkitem.jsp,【實現(xiàn)方法】:1) 通過org.jtang.flow.engine包中的globalapi.java類中的userlogin方法來驗證登錄的合法性2) 如果合法,用用戶登錄名logname來設置sessio
20、n的userid屬性;3) 如果不合法,彈出對話框提示用戶名或密碼錯誤;【功能】:驗證用戶登錄的合法性?!菊f明】:系統(tǒng)主界面要包括所有的功能選項。【例子】:/globalapi是一個globalapi ejb的遠程接口string logname = new string(request.getparameter(logname).getbytes(iso8859-1);string pwd = (string)request.getparameter(pwd);boolean result = globalapi.userlogin(logname,pwd); if (result) ses
21、sion.setattribute(userid,logname);else/else:用戶名或密碼錯誤時,彈出對話框提示“錯誤用戶名或密碼”/如果合法:顯示出任務管理器頁面3.3 任務列表模塊的開發(fā)(主要介紹allworkitem.jsp)【名稱】:任務列表【輸入】:點擊navi.jsp頁面中的任務瀏覽,或登錄任務管理器及其他情況【相關頁面】:在log.jsp頁面中的右側(cè)部分顯示allworkitem.jsp頁面;【實現(xiàn)方法】:1) 用session中的方法getattribute獲得用戶的userid;2) 用org.jtang.flow.engine.globalapi ejb的遠程接口
22、中的方法getallnewworkitems4user獲得用戶userid的所有新任務;3) 用org.jtang.flow.engine.globalapi ejb的遠程接口中的方法getallexecutingworkitems4user獲得用戶userid的所有在辦任務;4) 用org.jtang.flow.engine.globalapi ejb的遠程接口中的方法getallprefinishedworkitems4user獲得用戶userid的動態(tài)設置任務;5) 用org.jtang.flow.engine.globalapi ejb的遠程接口中的方法getallfinishedwo
23、rkitems4user獲得用戶userid的所有結束任務;6) 用workitem的方法getworkitemid,getname,getprocinsid分別獲得任務id,任務name,流程實例id;【功能】:顯示各類任務,包括新任務,在辦任務,動態(tài)設置任務,結束任務;【說明】:點擊不同的任務進入顯示不同的任務信息【例子】:/獲得useridglobalapihome apihome = (globalapihome) portableremoteobject.narrow (obj, globalapihome.class);globalapi globalapi = apihome.c
24、reate();string userid = (string)session.getattribute(userid);/獲得新任務列表arraylist usertasks = globalapi.getallnewworkitems4user(userid,true,null);/獲得在辦任務列表usertasks = globalapi.getallexecutingworkitems4user(userid,true,null);/獲得動態(tài)設置任務列表usertasks = globalapi.getallprefinishedworkitems4user(userid,true,n
25、ull);/獲得結束任務列表usertasks = globalapi.getallfinishedworkitems4user(userid,true,null);/獲得任務列表中每個任務的id,name,procinsid workitem task=(workitem)usertasks.get(j); long workitemid = task.getworkitemid(); string workitemname = task.getname(); long procinsid = task.getprocinsid();3.4 任務執(zhí)行模塊的開發(fā)3.4.1 任務執(zhí)行模塊功能框架
26、任務執(zhí)行模塊是任務管理器的核心模塊,該模塊的功能圖如下,在該圖中需要說明如下兩點:i. 在讀取到新任務后,流程可以有兩個通路,一條是對新到任務進行轉(zhuǎn)發(fā),另一條是對新到任務進行處理。ii. 在新建任務過程中,需要判斷新建的流程是否需要對任務數(shù)量、路由、期限或執(zhí)行者進行設置,如果不需要設置,就可以跳過動態(tài)設置這一頁;然后直接轉(zhuǎn)入任務處理這一步,進行具體的應用。3.4.2 啟動新流程的功能開發(fā)【名稱】:新流程啟動【輸入】:先點擊navi.jsp頁面中的“新建任務”,右側(cè)顯示tasklb.jsp頁面,點擊頁面列表中流程定義,獲得流程定義processid,然后從tasklb.jsp輸出processi
27、d到tasklist.jsp頁面【位置】:可啟動流程頁面tasklb.jsp,流程啟動頁面tasklist.jsp【功能】:啟動一個新流程【實現(xiàn)方法】: tasklib.jsp中) 用session的方法getattribute獲得userid;) 用org.jtang.flow.engine.globalapi ejb的遠程接口中的方法getallmanualstartprocs4user獲得用戶userid的所有人工啟動的啟動流程列表;) 用org.jtang.flow.engine.definition.process ejb的遠程接口中的方法getid,getname來獲得各個流程定義
28、的processid和name;將參數(shù)傳到頁面tasklist.jsp; tasklist.jsp中) 用request的方法getparameter獲得申請啟動的流程的流程定義的processid;) 用session的方法getattribute獲得申請啟動流程的用戶的userid; ) 用org.jtang.flow.engine.factory.jtangflowfactory ejb的遠程接口中的方法createstartprocins,創(chuàng)建流程processid的實例;) 用org.jtang.flow.engine.factory.jtangflowfactory ejb的遠程接
29、口中的方法getprocins獲得新創(chuàng)建的流程實例,然后用org.jtang.flow.engine.instance.processinstance ejb遠程接口中的方法start來啟動流程實例proinsid;) 用response的方法sendredirect將頁面轉(zhuǎn)到直接allworkitem.jsp;【例子】:tasklb.jsp中:string userid = (string)session.getattribute(userid);arraylist proclist = globalapi.getallmanualstartprocs4user(userid,true,nu
30、ll);org.jtang.flow.engine.definition.process process = null;string processid = ;string processname = ;for (int i=0;iproclist.size();i+) process = (org.jtang.flow.engine.definition.process)proclist.get(i);if(process != null) processid = process.getid();processname = process.getname();tasklist.jsp中:st
31、ring processid = (string)request.getparameter(processid);string userid = (string)session.getattribute(userid);org.jtang.flow.engine.definition.process process= factory.getprocess(processid);long procinsid = factory.createstartprocins(processid,userid);factory.getprocins(procinsid).start();response.s
32、endredirect(./allworkitem.jsp);3.4.3 執(zhí)行任務的功能開發(fā)(主要介紹doworkitem.jsp)【名稱】:任務執(zhí)行(對新任務,在辦任務,結束任務的操作)【輸入】:點擊allworkitem.jsp中新任務或在辦任務或結束任務列表中的某一項,向doworkitem.jsp傳入workitemid,procinsid和任務類型new或executing;【相關頁面】:allworkitem.jsp,doworkitem.jsp;【功能】:對新建任務、在辦任務、結束任務進行操作,關聯(lián)到具體的應用;【方法】:allworkitem.jsp中) 請先參考3.4任務列表
33、模塊設計;) 當點擊新任務或在辦任務或結束任務列表中的任務名時,跳轉(zhuǎn)到doworkitem.jsp頁面; doworkitem.jsp中) 用request中的方法getparameter獲得workitemid,procinsid,type(此處為new);) 用org.jtang.flow.engine.instance.workitem ejb的遠程接口中的方法setexecutor來設置任務執(zhí)行者,須更新數(shù)據(jù)庫;) 用org.jtang.flow.engine.instance.workitem ejb的遠程接口中的方法isdynamicvotesettask來判斷是否是動態(tài)會簽主持人
34、設置任務;方法isdynamicvotecommittask()判斷是否是動態(tài)會簽主持人提交任務,若是,則先進行與會簽有關的操作(此處先不涉及對會簽具體如何操作);) 若不是會簽,進行相關的應用;用org.jtang.flow.engine.instance.workitem ejb的遠程接口中的方法getparentactins獲得活動實例;用org.jtang.flow.engine.instance.activityinstance中的方法getactdef獲得該活動的定義;org.jtang.flow.engine.definition.activity ejb的遠程接口中的方法get
35、application得到活動所綁定的應用(存放在數(shù)據(jù)庫中);然后用org.jtang.flow.engine.definition.application.webapp中的方法getpath獲得應用的路徑;跳轉(zhuǎn)到具體的應用的url; 【例子】:allworkitem.jsp中string href=;href = doworkitem.jsp?workitem_id= + workitemid + &proc_inst_id=+procinsid + &type=new;doworkitem.jsp中jtangflowfactory factory = factoryhome.create(
36、); string workitemid = (string)request.getparameter(workitem_id);session.setattribute(workitem_id,workitemid);string procinsid = (string)request.getparameter(proc_inst_id);string type = (string)request.getparameter(type);string userid = (string)session.getattribute(userid);workitem workitem = factor
37、y.getworkitem(long.parselong(workitemid);if(type.equals(new) workitem.setexecutor(userid,true,null);/ 動態(tài)會簽主持人設置任務if(workitem.isdynamicvotesettask() out.print(window.open(dynamic/voteset.jsp);/ 動態(tài)會簽主持人提交任務else if(workitem.isdynamicvotecommittask() response.sendredirect(dynamic/votecommit.jsp); else a
38、ctinstance actins = workitem.getparentactins();activity actdef = actins.getactdef();webapp app = (webapp)actdef.getapplication(); string tool = ; tool = app.getpath();if (!tool.equals() string appurl = tool;out.println(window.location = +appurl+);3.4.4 動態(tài)設置任務的功能開發(fā)【名稱】:判斷是否需要動態(tài)設置【輸入】:點擊allworkitem.js
39、p中的動態(tài)任務列表中任務名,跳轉(zhuǎn)到completeworkitem1.jsp,向其傳入workitemid【相關頁面】: allworkitem.jsp,completeworkitem1.jsp,completeworkitem2.jsp;【功能】:判斷任務是否需要動態(tài)設置;【實現(xiàn)方法】:completeworkitem1.jsp中) 用org.jtang.flow.engine.factory. jtangflowfactory ejb的遠程接口中的方法getworkitem來得到org.jtang.flow.engine.instance中的workitem ejb的遠程接口;) 用or
40、g.jtang.flow.engine.instance.workitem ejb的遠程接口中的方法finish判斷任務是否有結束,若未結束,跳轉(zhuǎn)到completeworkitem2.jsp,進行動態(tài)設置;若已結束,不作處理,直接跳轉(zhuǎn)回allworkitem.jsp;【例子】:completeworkitem1.jsp中:jtangflowfactory factory = factoryhome.create(); workitem workitem = factory.getworkitem(long.parselong(workitemid);int flag = workitem.fi
41、nish(0);if(flag != 0 ) response.sendredirect(completeworkitem2.jsp?result= + flag); else response.sendredirect(allworkitem.jsp);【功能1】:動態(tài)設置路由;【輸入】:completeworkitem1.jsp傳入的參數(shù)” result”、session 中保存的”workitem_id”【相關頁面】: allworkitem.jsp,completeworkitem1.jsp,completeworkitem2.jsp,savedynamicsetting.jsp;【說
42、明】:動態(tài)設置下一步執(zhí)行的活動【實現(xiàn)方法】:completeworkitem2.jsp中) 用org.jtang.flow.engine.factory.jtangflowfactory ejb的遠程接口中的方法getworkitem來得到org.jtang.flow.engine.instance中的workitem ejb的遠程接口;) 根據(jù)參數(shù)”result”的值判斷是否需要動態(tài)設置路由;) 用org.jtang.flow.engine.instance.workitem ejb的遠程接口中的方法getnextstartactlist得到能啟動的后續(xù)活動列表;) 將用戶選擇傳遞到save
43、dynamicsetting.jsp頁面;) 在savedynamicsetting.jsp頁面中,用org.jtang.flow.engine.instance.workitem ejb的遠程接口中的方法dynamicsetnextstartact設置后續(xù)啟動活動;【例子】:completeworkitem2.jsp中:/ 需要動態(tài)設置路由if(flag / 100 = 1 )arraylist nextactlist = workitem.getnextstartactlist();int i = 0;while (i (nextactlist.size() string nextacti
44、d = (activity)nextactlist.get(i).getactid();string nextactname = (activity)nextactlist.get(i).getactname();input type=radio name=nextact value= savedynamicsetting.jsp中:/ 處理動態(tài)設置路由信息if(flag / 100 = 1) string nextstartactid = (string)request.getparameter(nextact);if(nextstartactid != null & !nextstarta
45、ctid.equals() workitem.dynamicsetnextstartact(nextstartactid);flag = flag%100;【功能2】:動態(tài)設置執(zhí)行者;【輸入】:completeworkitem1.jsp傳入的參數(shù)” result”、session 中保存的”workitem_id”【相關頁面】: allworkitem.jsp,completeworkitem1.jsp,completeworkitem2.jsp,savedynamicsetting.jsp;【說明】:動態(tài)設置后續(xù)活動的執(zhí)行者【實現(xiàn)方法】:completeworkitem2.jsp中) 用or
46、g.jtang.flow.engine.factory.jtangflowfactory ejb的遠程接口中的方法getworkitem來得到org.jtang.flow.engine.instance中的workitem ejb的遠程接口;) 根據(jù)參數(shù)”result”的值判斷是否需要動態(tài)設置執(zhí)行者;) 用org.jtang.flow.engine.instance.workitem ejb的遠程接口中的方法getdynamicsetexecutorinfolist得到動態(tài)執(zhí)行者信息;) 用戶選擇執(zhí)行者,并將用戶選擇傳遞到savedynamicsetting.jsp頁面;) 在savedyna
47、micsetting.jsp頁面中,用org.jtang.flow.engine.instance.workitem ejb的遠程接口中的方法dynamicsetexecutor設置后續(xù)啟動活動;【例子】:completeworkitem2.jsp中:arraylist dynamicsetexecutorinfolist = workitem.getdynamicsetexecutorinfolist();savedynamicsetting.jsp中:/ 處理動態(tài)設置執(zhí)行者信息if(flag = 1) string temp = (string)request.getparameter(t
48、otalindex);if(!temp.equals(0) string actids = request.getparametervalues(actid);string executors = request.getparametervalues(executor);string executortypes = request.getparametervalues(executortype);int totalindex = integer.valueof(temp).intvalue();temp = (string)request.getparameter(groupid);int g
49、roupid = integer.valueof(temp).intvalue();string batchindexset = (string)request.getparameter(batchindexset);for(int i = 0 ; i totalindex ; i+ ) int executortype = 0;if (executortypesi.equals(mem)executortype = 1;else if (executortypesi.equals(role)executortype = 2;else if (executortypesi.equals(org
50、anization)executortype = 3;if(executorsi != null & !executorsi.equals() workitem.dynamicsetexecutor(actidsi,groupid,batchindexset,executortype,executorsi,true,null);【功能3】:動態(tài)設置期限(未做);【功能4】:動態(tài)設置任務數(shù)量(未做);3.4.5 任務轉(zhuǎn)發(fā)的功能開發(fā)名稱:任務轉(zhuǎn)發(fā)輸入:點擊allworkitem.jsp新任務或在辦任務列表中的“轉(zhuǎn)發(fā)”按鈕,跳轉(zhuǎn)到transmittask.jsp頁面,再點擊transmittask.
51、jsp中的“設置”按鈕,跳轉(zhuǎn)到dynamic/setexecutor.jsp頁面,點擊transmittask.jsp中的“確定”按鈕,調(diào)用finishtransition.jsp,然后跳轉(zhuǎn)回allworkitem.jsp頁面。相關頁面:allworkitem.jsp,transmittask.jsp,finishtransition.jsp。功能: 完成任務的轉(zhuǎn)發(fā)工作。實現(xiàn)方法:transmittask.jsp中:) 用transmittask.jsp中定義的方法setexecutor()來打開dynamic/setexecutor.jsp頁面,進行轉(zhuǎn)發(fā)對象的選??;) 用request的方法
52、getparameter得到workitemid;) 用session的方法setattribute設置屬性workitem_id的值為workitemid;) 點擊“設置”按鈕后跳轉(zhuǎn)到轉(zhuǎn)發(fā)對象選擇的頁面,選擇其中一個執(zhí)行者后(點擊“set”按鈕),回到transmittask.jsp頁面。finishtransition.jsp中:) 用session的方法getattribute得到workitemid,userid;) 用request的方法getparameter得到targerentityid,entitytype,通過對entitytype的判斷,得到targetentitytyp
53、e;) 用org.jtang.flow.engine.factory. jtangflowfactory ejb的遠程接口中的方法getworkitem來得到org.jtang.flow.engine.instance中的workitem ejb的遠程接口;) 用org.jtang.flow.engine.instance.workitem ejb的遠程接中的方法tasktransmit將任務從userid轉(zhuǎn)發(fā)給用戶targerentityid;) 用response的方法sendredirect跳轉(zhuǎn)加allworkitem.jsp頁面。例子:transmittask.jsp中:function setexecutor(rowindex)window.open(dynamic/setexecutor.jsp?index= + rowindex);string workitemid = (string)request.getparameter(workitemid);session.setattribute(workitem_id,workitemid);finishtransition.jsp中:string workitemid = (string)session.getattribute(wor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設計公司獎金管理制度
- 設計總監(jiān)統(tǒng)籌管理制度
- 評估公司經(jīng)營管理制度
- 診所收款票據(jù)管理制度
- 診所進藥規(guī)定管理制度
- 誠信企業(yè)登記管理制度
- 財務項目核算管理制度
- 貨架倉儲倉庫管理制度
- 貨車司機崗位管理制度
- 2025年中國工業(yè)級脫脂毛巾行業(yè)市場全景分析及前景機遇研判報告
- 2025年江蘇省建筑安全員A證考試題庫及答案
- 2025版國家開放大學法學本科《知識產(chǎn)權法》期末紙質(zhì)考試第五大題案例分析題題庫
- 基于感性工學
- 人工智能導論知到智慧樹章節(jié)測試課后答案2024年秋天津大學
- A型肉毒毒素在整形外科中的臨床應用指南
- 【MOOC】作物育種學-四川農(nóng)業(yè)大學 中國大學慕課MOOC答案
- 博士生經(jīng)驗分享模板
- 2024年度藝人演出保密協(xié)議
- 學校保安保潔及宿管服務投標方案(技術方案)
- 產(chǎn)品授權代理合同的續(xù)簽與變更
- DB11-T 2010-2022 救災物資儲備管理規(guī)范
評論
0/150
提交評論