|
名易協(xié)同項目管理-流程驅動項目任務進度開發(fā)說明v1.0-副本.doc2引言2.1編寫目的本開發(fā)說明書的目的描述清楚本次開發(fā)實現(xiàn)的功能,以及實現(xiàn)的方式。供需求提出者確認,已避免雙方理解上的差距,作為開發(fā)交付成果的依據(jù)。預期讀者:需求提出人員,開發(fā)人員、測試人員,項目經理。2.2定義一些術語的描述2.3參考資料3范圍3.1系統(tǒng)主要目標在名易OA軟件系統(tǒng)現(xiàn)有項目管理中進行修改,實現(xiàn)流程控制項目任務進度,每個項目任務對應的審批流程歸檔,即認為項目的該任務完成,系統(tǒng)自動創(chuàng)建該任務的下一任務對應的流程,使得下一任務進入進行狀態(tài),直至最后一個任務結束。在項目的子任務中可以查看到該任務對應的流程的審批狀態(tài)進度(分為:未創(chuàng)建、已創(chuàng)建、已審批、已歸檔)。在項目模板中,定義項目任務,每個模板中的項目任務對應一個審批流程。設置好后,在前臺新建該類型的項目時,系統(tǒng)自動將項目任務對應的審批流程帶入。項目創(chuàng)建后,系統(tǒng)自動觸發(fā)第一個子任務對應的流程(利用外部數(shù)據(jù)觸發(fā)流程功能)。注:本說明只在于提供大家設計思路,細節(jié)有待完善。3.2實現(xiàn)方式3.2.1后臺部分1、后臺設置,項目管理模板管理中,在新建、編輯任務模板時,增加任務對應的審批流程功能。如圖:修改了jsp頁面:projTempletProjTempletAdd.jspprojTempletProjTempletEdit.jspprojTempletProjTempletEditData.jspprojTempletProjTempletOperate.jspprojTempletProjTempletViewData.jspprojTempletTempletTaskEdit.jsp修改了底層類文件:rcOAprojTempletProjTempletUtil.java數(shù)據(jù)庫修改:執(zhí)行SQL語句:altertablePrj_TemplateTaskaddworkflowTypeidintGO3.2.2前臺部分通過選擇配置好的項目模板新建項目,將項目任務模板中事先配置好的審批流程自動帶入。新建項目保存后,流程自動觸發(fā)該項目第一個任務對應的審批流程,創(chuàng)建人默認成任務負責人。審批人在流程中進行配置。每個任務對應的審批流程可以在項目信息表中查看審批進度(分為未創(chuàng)建、已創(chuàng)建、審批中、執(zhí)行中、已歸檔)對應流程的4中節(jié)點類型。如圖:一個任務審批歸檔后,自動將任務的完成比率改為100%,并自動觸發(fā)下一個任務對應的審批流程,流程的創(chuàng)建人為下一個人任務的負責人。流程的審批人也是同樣在流程中進行設置。以此類推,直到項目的最后一級任務完成。 前臺修改了JSP:1、projdataAddProjectData.jsp.jsp2、projdataProjectOperation.jsp3、projdataViewProjectData.jsp前臺修改了JS:4、jsprojTaskTaskUtil.js說明:1、2、3、4用于實現(xiàn)在新建項目任務中增加流程字段的顯示和保存2中同時也實現(xiàn)了默認將新建項目的第一個任務設置為啟動狀態(tài)。便于流程的自動觸發(fā)。數(shù)據(jù)庫修改:執(zhí)行SQL語句:altertablePrj_TaskProcessaddworkflowidintGOaltertablePrj_TaskProcessaddapplystatusintGOdropPROCEDUREPrj_TaskProcess_InsertGOCREATEPROCEDUREPrj_TaskProcess_Insert(@prjidint,@taskidint,@wbscodingvarchar(20),@subjectvarchar(80),@versiontinyint,@begindatevarchar(10),@enddatevarchar(10),@workdaydecimal(10,1),@contentvarchar(255),@fixedcostdecimal(18,2),@parentidint,@parentidsvarchar(255),@parenthrmidsvarchar(255),@level_ntinyint,@hrmidint,@prefinish_1varchar(4000),@workflowid_1int,@applystatus_1int,@realManDaysdecimal(6,1),@taskIndexint,@flagintegeroutput,@msgvarchar(80)output)ASdeclare@dsporder_9int,@current_maxidintselect@current_maxid=max(dsporder)fromPrj_TaskProcesswhereprjid=@prjidandversion=@versionandparentid=@parentidandisdelete"1"if@current_maxidisnullset@current_maxid=0set@dsporder_9=@current_maxid+1INSERTINTOPrj_TaskProcess(prjid,taskid,wbscoding,subject,version,begindate,enddate,workday,content,fixedcost,parentid,parentids,parenthrmids,level_n,hrmid,islandmark,prefinish,dsporder,workflowid,applystatus,realManDays,taskIndex)VALUES(@prjid,@taskid,@wbscoding,@subject,@version,@begindate,@enddate,@workday,@content,@fixedcost,@parentid,@parentids,@parenthrmids,@level_n,@hrmid,"0",@prefinish_1,@dsporder_9,@workflowid_1,@applystatus_1,@realManDays,@taskIndex)Declare@idint,@maxidvarchar(10),@maxhrmidvarchar(255)select@id=max(id)fromPrj_TaskProcessset@maxid=convert(varchar(10),@id)+","set@maxhrmid="|"+convert(varchar(10),@id)+","+convert(varchar(10),@hrmid)+"|"updatePrj_TaskProcesssetparentids=parentids+@maxid,parenthrmids=parenthrmids+@maxhrmidwhereid=@idset@flag=@@identityset@msg="OK!"GO3.2.3流程部分1、在后臺搭建項目任務所需的審批流程,流程表單中需要的字段:2、在流程歸檔節(jié)點前附加操作中設置DML接口動作:任務進度修改和觸發(fā)下一任務,如圖: 任務進度修改:實現(xiàn)修改當前審批流程對應的項目任務,審批通過后自動將任務進度改為100%。 觸發(fā)下一任務:當前流程審批歸檔后,系統(tǒng)自動將當前項目任務對應的下一個任務狀態(tài)設置為啟動。啟動后通過外部數(shù)據(jù)觸發(fā)流程配置,實現(xiàn)下一任務對應流程的自動觸發(fā)。3.2.4外部數(shù)據(jù)觸發(fā)流程配置1、所有項目任務中需要的審批流程,需要在外部數(shù)據(jù)觸發(fā)流程配置中進行配置。用于自動將處于啟動狀態(tài)的任務進行流程觸發(fā)。如圖:注:需要提前在項目任務表中增加2個字段,執(zhí)行下面SQL語句:altertablePrj_TaskProcessaddFtriggerFlagintdefault0GOaltertablePrj_TaskProcessaddrequestidintGO外部主表條件說明:workflowid=288,288為當前流程的ID號,applystatus=1,代表改項目任務處于啟動狀態(tài)(任務未啟動時候applystatus默認等于0)。當流程觸發(fā)成功后回寫項目任務表將任務的啟動狀態(tài)改為2,代表流程已經創(chuàng)建。觸發(fā)流程失敗時,將任務啟動狀態(tài)改完applystatus=0詳細設置如上圖,將流程表單字段與項目任務信息進行一一對應。流程標題默認為項目任務名稱,流程創(chuàng)建人為當前任務負責人,創(chuàng)建日期為任務開始日期,相關項目為當前任務的所屬項目,任務為當前項目任務。正文為空,流程后續(xù)節(jié)點可設置編輯。2、外部數(shù)據(jù)觸發(fā)流程周期設置,如圖:注:設置成1分鐘掃描一次,太頻繁對系統(tǒng)性能有影響。4數(shù)據(jù)庫整體修改(前面每個模塊已經提到過)altertablePrj_TemplateTaskaddworkflowTypeidintGOaltertablePrj_TaskProcessaddworkflowidintGOaltertablePrj_TaskProcessaddapplystatusintGOaltertablePrj_TaskProcessaddFtriggerFlagintdefault0GOaltertablePrj_TaskProcessaddrequestidintGOdropPROCEDUREPrj_TaskProcess_InsertGOCREATEPROCEDUREPrj_TaskProcess_Insert(@prjidint,@taskidint,@wbscodingvarchar(20),@subjectvarchar(80),@versiontinyint,@begindatevarchar(10),@enddatevarchar(10),@workdaydecimal(10,1),@contentvarchar(255),@fixedcostdecimal(18,2),@parentidint,@parentidsvarchar(255),@parenthrmidsvarchar(255),@level_ntinyint,@hrmidint,@prefinish_1varchar(4000),@workflowid_1int,@applystatus_1int,@realManDaysdecimal(6,1),@taskIndexint,@flagintegeroutput,@msgvarchar(80)output)ASdeclare@dsporder_9int,@current_maxidintselect@current_maxid=max(dsporder)fromPrj_TaskProcesswhereprjid=@prjidandversion=@versionandparentid=@parentidandisdelete"1"if@current_maxidisnullset@current_maxid=0set@dsporder_9=@current_maxid+1INSERTINTOPrj_TaskProcess(prjid,taskid,wbscoding,subject,version,begindate,enddate,workday,content,fixedcost,parentid,parentids,parenthrmids,level_n,hrmid,islandmark,prefinish,dsporder,workflowid,applystatus,realManDays,taskIndex)VALUES(@prjid,@taskid,@wbscoding,@subject,@version,@begindate,@enddate,@workday,@content,@fixedcost,@parentid,@parentids,@parenthrmids,@level_n,@hrmid,"0",@prefinish_1,@dsporder_9,@workflowid_1,@applystatus_1,@realManDays,@taskIndex)Declare@idint,@maxidvarchar(10),@maxhrmidvarchar(255)select@id=max(id)fromPrj_TaskProcessset@maxid=convert(varchar(10),@id)+","set@maxhrmid="|"+convert(varchar(10),@id)+","+convert(varchar(10),@hrmid)+"|"updatePrj_TaskProcesssetparentids=parentids+@maxid,parenthrmids=parenthrmids+@maxhrmidwhereid=@idset@flag=@@identityset@msg="OK!"GO
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|