成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 重慶OA系統(tǒng) > 重慶OA快博
泛普OA軟件協(xié)同辦公系統(tǒng)項(xiàng)目管理-流程驅(qū)動項(xiàng)目任務(wù)進(jìn)度開發(fā)說明
泛普OA軟件協(xié)同辦公系統(tǒng)項(xiàng)目管理-流程驅(qū)動項(xiàng)目任務(wù)進(jìn)度開發(fā)說明v1.0 - 副本.doc
2 引言
2.1 編寫目的
本開發(fā)說明書的目的描述清楚本次開發(fā)實(shí)現(xiàn)的功能,以及實(shí)現(xiàn)的方式。供需求提出者確認(rèn),已避免雙方理解上的差距,作為開發(fā)交付成果的依據(jù)。
預(yù)期讀者:需求提出人員,開發(fā)人員、測試人員,項(xiàng)目經(jīng)理。
2.2 定義
一些術(shù)語的描述
2.3 參考資料
3 范圍
3.1 系統(tǒng)主要目標(biāo)
在泛普OA軟件系統(tǒng)現(xiàn)有項(xiàng)目管理中進(jìn)行修改,實(shí)現(xiàn)流程控制項(xiàng)目任務(wù)進(jìn)度,每個項(xiàng)目任務(wù)對應(yīng)的審批流程歸檔,即認(rèn)為項(xiàng)目的該任務(wù)完成,系統(tǒng)自動創(chuàng)建該任務(wù)的下一任務(wù)對應(yīng)的流程,使得下一任務(wù)進(jìn)入進(jìn)行狀態(tài),直至最后一個任務(wù)結(jié)束。在項(xiàng)目的子任務(wù)中可以查看到該任務(wù)對應(yīng)的流程的審批狀態(tài)進(jìn)度(分為:未創(chuàng)建、已創(chuàng)建、已審批、已歸檔)。
在項(xiàng)目模板中,定義項(xiàng)目任務(wù),每個模板中的項(xiàng)目任務(wù)對應(yīng)一個審批流程。設(shè)置好后,在前臺新建該類型的項(xiàng)目時,系統(tǒng)自動將項(xiàng)目任務(wù)對應(yīng)的審批流程帶入。項(xiàng)目創(chuàng)建后,系統(tǒng)自動觸發(fā)第一個子任務(wù)對應(yīng)的流程(利用外部數(shù)據(jù)觸發(fā)流程功能)。
注:本說明只在于提供大家設(shè)計(jì)思路,細(xì)節(jié)有待完善。
3.2 實(shí)現(xiàn)方式
3.2.1 后臺部分
1、 后臺設(shè)置,項(xiàng)目管理模板管理中,在新建、編輯任務(wù)模板時,增加任務(wù)對應(yīng)的審批流程功能。如圖:
修改了jsp頁面:
/proj/ Templet/ ProjTempletAdd.jsp
/proj/ Templet/ProjTempletEdit.jsp
/proj/ Templet/ProjTempletEditData.jsp
/proj/ Templet/ProjTempletOperate.jsp
/proj/ Templet/ProjTempletViewData.jsp
/proj/ Templet/TempletTaskEdit.jsp
修改了底層類文件:
/src/OA/proj/ Templet/ ProjTempletUtil.java
數(shù)據(jù)庫修改:
執(zhí)行SQL語句:alter table Prj_TemplateTask add workflowTypeid int
GO
3.2.2 前臺部分
通過選擇配置好的項(xiàng)目模板新建項(xiàng)目,將項(xiàng)目任務(wù)模板中事先配置好的審批流程自動帶入。新建項(xiàng)目保存后,流程自動觸發(fā)該項(xiàng)目第一個任務(wù)對應(yīng)的審批流程,創(chuàng)建人默認(rèn)成任務(wù)負(fù)責(zé)人。審批人在流程中進(jìn)行配置。每個任務(wù)對應(yīng)的審批流程可以在項(xiàng)目信息表中查看審批進(jìn)度(分為 未創(chuàng)建、已創(chuàng)建、審批中、執(zhí)行中、已歸檔)對應(yīng)流程的4中節(jié)點(diǎn)類型。如圖:
一個任務(wù)審批歸檔后,自動將任務(wù)的完成比率改為100%,并自動觸發(fā)下一個任務(wù)對應(yīng)的審批流程,流程的創(chuàng)建人為下一個人任務(wù)的負(fù)責(zé)人。流程的審批人也是同樣在流程中進(jìn)行設(shè)置。
以此類推,直到項(xiàng)目的最后一級任務(wù)完成。
前臺修改了JSP:
1、/proj/data/ AddProjectData.jsp.jsp
2、/proj/data/ ProjectOperation.jsp
3、/proj/data/ ViewProjectData.jsp
前臺修改了JS:
4、/js/ projTask/TaskUtil.js
說明:1、2、3、4用于實(shí)現(xiàn)在新建項(xiàng)目任務(wù)中增加流程字段的顯示和保存
2中同時也實(shí)現(xiàn)了默認(rèn)將新建項(xiàng)目的第一個任務(wù)設(shè)置為啟動狀態(tài)。便于流程的自動觸發(fā)。
數(shù)據(jù)庫修改:
執(zhí)行SQL語句:
alter table Prj_TaskProcess add workflowid int
GO
alter table Prj_TaskProcess add applystatus int
GO
drop PROCEDURE Prj_TaskProcess_Insert
GO
CREATE PROCEDURE Prj_TaskProcess_Insert (@prjid int, @taskid int, @wbscoding varchar(20), @subject varchar(80) , @version tinyint, @begindate varchar(10), @enddate varchar(10), @workday decimal (10,1), @content varchar(255), @fixedcost decimal (18,2), @parentid int, @parentids varchar (255), @parenthrmids varchar (255), @level_n tinyint, @hrmid int, @prefinish_1 varchar(4000), @workflowid_1 int,@applystatus_1 int,@realManDays decimal (6,1), @taskIndex int, @flag integer output, @msg varchar(80) output ) AS declare @dsporder_9 int, @current_maxid int select @current_maxid = max(dsporder) from Prj_TaskProcess where prjid = @prjid and version = @version and parentid = @parentid and isdelete<>'1' if @current_maxid is null set @current_maxid = 0 set @dsporder_9 = @current_maxid + 1 INSERT INTO Prj_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 @id int, @maxid varchar(10), @maxhrmid varchar(255) select @id = max(id) from Prj_TaskProcess set @maxid = convert(varchar(10), @id) + ',' set @maxhrmid = '|' + convert(varchar(10), @id) + ',' + convert(varchar(10), @hrmid) + '|' update Prj_TaskProcess set parentids=parentids+@maxid, parenthrmids=parenthrmids+@maxhrmid where id=@id set @flag = @@identity set @msg = 'OK!'
GO
3.2.3 流程部分
1、 在后臺搭建項(xiàng)目任務(wù)所需的審批流程,流程表單中需要的字段:
2、在流程歸檔節(jié)點(diǎn)前附加操作中設(shè)置DML接口動作:任務(wù)進(jìn)度修改和觸發(fā)下一任務(wù),如圖:
任務(wù)進(jìn)度修改:實(shí)現(xiàn)修改當(dāng)前審批流程對應(yīng)的項(xiàng)目任務(wù),審批通過后自動將任務(wù)進(jìn)度改為100%。
觸發(fā)下一任務(wù):當(dāng)前流程審批歸檔后,系統(tǒng)自動將當(dāng)前項(xiàng)目任務(wù)對應(yīng)的下一個任務(wù)狀態(tài)設(shè)置為啟動。啟動后通過外部數(shù)據(jù)觸發(fā)流程配置,實(shí)現(xiàn)下一任務(wù)對應(yīng)流程的自動觸發(fā)。
3.2.4 外部數(shù)據(jù)觸發(fā)流程配置
1、 所有項(xiàng)目任務(wù)中需要的審批流程,需要在外部數(shù)據(jù)觸發(fā)流程配置中進(jìn)行配置。用于自動將處于啟動狀態(tài)的任務(wù)進(jìn)行流程觸發(fā)。如圖:
注:需要提前在項(xiàng)目任務(wù)表中增加2個字段,執(zhí)行下面SQL語句:
alter table Prj_TaskProcess add FtriggerFlag int default 0
GO
alter table Prj_TaskProcess add requestid int
GO
外部主表?xiàng)l件說明:workflowid=288, 288為當(dāng)前流程的ID號,applystatus=1,代表改項(xiàng)目任務(wù)處于啟動狀態(tài)(任務(wù)未啟動時候applystatus默認(rèn)等于0)。當(dāng)流程觸發(fā)成功后回寫項(xiàng)目任務(wù)表將任務(wù)的啟動狀態(tài)改為2,代表流程已經(jīng)創(chuàng)建。觸發(fā)流程失敗時,將任務(wù)啟動狀態(tài)改完applystatus=0
詳細(xì)設(shè)置如上圖,將流程表單字段與項(xiàng)目任務(wù)信息進(jìn)行一一對應(yīng)。流程標(biāo)題默認(rèn)為項(xiàng)目任務(wù)名稱,流程創(chuàng)建人為當(dāng)前任務(wù)負(fù)責(zé)人,創(chuàng)建日期為任務(wù)開始日期,相關(guān)項(xiàng)目為當(dāng)前任務(wù)的所屬項(xiàng)目,任務(wù)為當(dāng)前項(xiàng)目任務(wù)。正文為空,流程后續(xù)節(jié)點(diǎn)可設(shè)置編輯。
2、 外部數(shù)據(jù)觸發(fā)流程周期設(shè)置,如圖:
注:設(shè)置成1分鐘掃描一次,太頻繁對系統(tǒng)性能有影響。
4 數(shù)據(jù)庫整體修改(前面每個模塊已經(jīng)提到過)
alter table Prj_TemplateTask add workflowTypeid int
GO
alter table Prj_TaskProcess add workflowid int
GO
alter table Prj_TaskProcess add applystatus int
GO
alter table Prj_TaskProcess add FtriggerFlag int default 0
GO
alter table Prj_TaskProcess add requestid int
GO
drop PROCEDURE Prj_TaskProcess_Insert
GO
CREATE PROCEDURE Prj_TaskProcess_Insert (@prjid int, @taskid int, @wbscoding varchar(20), @subject varchar(80) , @version tinyint, @begindate varchar(10), @enddate varchar(10), @workday decimal (10,1), @content varchar(255), @fixedcost decimal (18,2), @parentid int, @parentids varchar (255), @parenthrmids varchar (255), @level_n tinyint, @hrmid int, @prefinish_1 varchar(4000), @workflowid_1 int,@applystatus_1 int,@realManDays decimal (6,1), @taskIndex int, @flag integer output, @msg varchar(80) output ) AS declare @dsporder_9 int, @current_maxid int select @current_maxid = max(dsporder) from Prj_TaskProcess where prjid = @prjid and version = @version and parentid = @parentid and isdelete<>'1' if @current_maxid is null set @current_maxid = 0 set @dsporder_9 = @current_maxid + 1 INSERT INTO Prj_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 @id int, @maxid varchar(10), @maxhrmid varchar(255) select @id = max(id) from Prj_TaskProcess set @maxid = convert(varchar(10), @id) + ',' set @maxhrmid = '|' + convert(varchar(10), @id) + ',' + convert(varchar(10), @hrmid) + '|' update Prj_TaskProcess set parentids=parentids+@maxid, parenthrmids=parenthrmids+@maxhrmid where id=@id set @flag = @@identity set @msg = 'OK!'
GO