中國(guó)聯(lián)通山西分公司MSS系統(tǒng)設(shè)計(jì)書(shū)-工作流引擎V50.doc
《中國(guó)聯(lián)通山西分公司MSS系統(tǒng)設(shè)計(jì)書(shū)-工作流引擎V50.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《中國(guó)聯(lián)通山西分公司MSS系統(tǒng)設(shè)計(jì)書(shū)-工作流引擎V50.doc(48頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
TW_OO_DESIGN_DOC_20021210-01A Confidential (秘密) OA 工作流引擎設(shè)計(jì) 說(shuō)明書(shū) Version 5.0 Written By TalkWeb TALKWEB 湖南拓維信息系統(tǒng)股份有限公司 2003,2004 All Rights Reserved 目錄 1 引言 4 1.1 編寫(xiě)目的 4 1.2 縮略語(yǔ) 4 1.3 參考資料 4 2 軟件結(jié)構(gòu) 4 2.1 主要實(shí)現(xiàn)技術(shù) 4 2.2 引擎處理結(jié)構(gòu) 5 3 引擎涉及到的數(shù)據(jù)名稱規(guī)范 5 3.1 文件系統(tǒng)劃分 5 3.1.1 文件區(qū)命名規(guī)范 5 3.2 數(shù)據(jù)庫(kù)中表、字段命名規(guī)范 8 4 引擎異常處理機(jī)制 8 4.1 以前錯(cuò)誤機(jī)制的缺陷 8 4.2 對(duì)錯(cuò)誤機(jī)制的改進(jìn)方法 9 5 引擎服務(wù)的類詳細(xì)說(shuō)明 10 5.1 類的列表 10 5.2 引擎所有類的關(guān)系結(jié)構(gòu)圖 10 5.3 類的詳細(xì)設(shè)計(jì) 11 5.3.1 功能類別層中類的詳細(xì)說(shuō)明 11 5.3.2 流程實(shí)例層中類的詳細(xì)說(shuō)明 16 5.3.3 流程邏輯處理層中類的詳細(xì)說(shuō)明 21 6 具體類的實(shí)現(xiàn)機(jī)制 29 7 數(shù)據(jù)庫(kù)字典 30 7.1 ER 圖 .30 7.2 數(shù)據(jù)字典 30 1. 主流程實(shí)例表(T_WorkFlow_FlowMain) .30 2. 主流程字段表(T_WorkFlow_MainField) 31 3. 主流程附件列表(T_WorkFlow_MainAtt) 32 4. 流程日志表(T_Flow_LogMsg) .32 5. 未結(jié)束流程環(huán)節(jié)日志信息表(T_Flow_LogStatus) .32 6. 未結(jié)束日志字段表(T_Flow_LogField) 33 7. 未結(jié)束日志附件列表(T_Flow_LogAtt) .33 8. 已結(jié)束流程環(huán)節(jié)日志信息表(T_Flow_EndLogStatus) 34 9. 已結(jié)束日志字段表(T_Flow_EndLogField) .34 10. 已結(jié)束日志附件列表(T_Flow_EndLogAtt) 35 11. 待辦信息表(T_WorkFlow_Notify) .35 12. 在辦信息表(T_WorkFlow_ZaiBan ) 35 13. 用戶公文郵件表(T_WorkFlow_UserMail) .36 14. 公文郵件字段表(T_WorkFlow_MailField) .36 15. 公文郵件附件列表(T_WorkFlow_MailAtt) 37 16. 需要修改的表、視圖的說(shuō)明 37 8 附注 38 8.1 流程 狀態(tài)類型 38 8.2 處理標(biāo)識(shí) 38 8.3 消息格式說(shuō)明 38 8.4 與文件傳輸服務(wù)的接口 41 8.5 對(duì)傳閱的修改說(shuō)明 41 8.6 與其他的外掛功能的接口 41 1 引言 1.1 編寫(xiě)目的 本文檔是完全參照中國(guó)聯(lián)通總公司辦公自動(dòng)化系統(tǒng)工作流模塊的詳細(xì)設(shè)計(jì)說(shuō)明結(jié)合 山西聯(lián)通 MSS 系統(tǒng)建設(shè)現(xiàn)在來(lái)編寫(xiě)的,并且在原有 4.0 版本的基礎(chǔ)上對(duì)工作流引擎的基本 結(jié)構(gòu)及基本實(shí)現(xiàn)做了較大的改進(jìn),軟件開(kāi)發(fā)人員在此基礎(chǔ)上編寫(xiě)程序代碼。 1.2 縮略語(yǔ) WFE WorkFlow Engine 工作流引擎 1.3 參考資料 《流程定義設(shè)計(jì)書(shū)》 《工作流處理系統(tǒng)設(shè)計(jì)說(shuō)明書(shū)(v4.0)》 《中國(guó)聯(lián)通總部 OA 系統(tǒng)設(shè)計(jì)變更的建議》 2 軟件結(jié)構(gòu) 2.1 主要實(shí)現(xiàn)技術(shù) 采用.Net 框架,用 C#編寫(xiě); SQL SERVER 數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù); 文件系統(tǒng)存儲(chǔ)流程中所帶的工作附件(用到自定義的文件傳輸服務(wù)) ; 2.2 引擎處理結(jié)構(gòu) W e b 服務(wù)器 W e b 服務(wù)器 M S M Q A g e n t . . . M S M Q S e n d S e n d 分發(fā) 服務(wù) 工作流 引擎 工作流 引擎 R e c e i v e . . . . . . . . . . . . S e n d S e n d 數(shù)據(jù)庫(kù)服務(wù)器 M S M Q M S M Q . . . . . . 文件服務(wù)器 說(shuō)明: 1. WEB 上的消息直接送到 MSMQ Agent 服務(wù)器上,由 Agent 上的一個(gè)消息分發(fā)服 務(wù)根據(jù)消息的緩急程度,將消息送到工作流引擎服務(wù)器上,不同的隊(duì)列中; (Agent 服務(wù)器上的分發(fā)服務(wù)另外設(shè)計(jì)開(kāi)發(fā)) 2. 引擎服務(wù)器上開(kāi)設(shè)多個(gè)隊(duì)列,針對(duì)每個(gè) MSMQ,引擎服務(wù)都開(kāi)了專門(mén)的線程對(duì)應(yīng) 處理; 3. 引擎服務(wù)在做處理的時(shí)候,主要是和數(shù)據(jù)層的文件服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器交互; 4. 引擎服務(wù)在程序出現(xiàn)異常的時(shí)候也有相應(yīng)的異常處理機(jī)制(具體機(jī)制后面會(huì)有詳 細(xì)說(shuō)明) 3 引擎涉及到的數(shù)據(jù)名稱規(guī)范 3.1 文件系統(tǒng)劃分 文件系統(tǒng)分為五個(gè)區(qū) 盤(pán)符:\FileStore\Temp 臨時(shí)區(qū) 盤(pán)符:\ FileStore \OAMail\ 公務(wù)郵件區(qū) 盤(pán)符:\ FileStore \backup\ 備份區(qū) 盤(pán)符:\ FileStore \Doc\ 文檔歸檔區(qū) 盤(pán)符:\ FileStore \Mode\ 模板區(qū)(存放 Word 模板) 備注:以上的命名必須與引擎服務(wù)的配置文件保持一致 3.1.1 文件區(qū)命名規(guī)范 臨時(shí)區(qū)、備份區(qū)、公文郵件區(qū)命名:公司命名以公司 ID 命名,部門(mén)以部門(mén) ID 命名,時(shí)間 以 yyyyMM 方式命名,流程實(shí)例 ID 已經(jīng)由工作引擎定義好了。附件命名以文件實(shí)際名稱 命名。備份區(qū)備份序號(hào)采用數(shù)字遞增方式命名。 文檔歸檔區(qū)命名:采用公司 ID,部門(mén) ID 命名公司文件夾和部門(mén)文件夾,時(shí)間以 yyyyMM 方 式命名,所有文件夾及文件不能采用中文方式命名,附件命名采用 Guid 方式命名,擴(kuò)展名稱 保持原有擴(kuò)展名。 ? 臨時(shí)區(qū) Unicomgd Temp 流程實(shí)例 ID 時(shí)間(年月) 部門(mén) ID 公司 ID 文件實(shí)際名稱+原擴(kuò)展名 ? 文檔歸檔區(qū) Unicomgd Doc 時(shí)間(年月) 部門(mén) ID 公司 ID GUID+原擴(kuò)展名 流程實(shí)例 ID 說(shuō)明: 流程結(jié)束后附件將歸檔到此處 ? 備份區(qū) Unicomgd backup 流程實(shí)例 ID 時(shí)間(年月) 部門(mén) ID 公司 ID 步驟處理序號(hào) 文件實(shí)際名稱+原擴(kuò)展名 步驟處理序號(hào)= T + 遞增的數(shù)字 =用戶 ID+yyyyMMddhhmmssmi 說(shuō)明: 一個(gè)流程實(shí)例每個(gè)走一個(gè)步驟就會(huì)在備份去存放一個(gè)備份,只到流程實(shí)例結(jié) 束后才由工作流引擎刪除 ? 公務(wù)郵件區(qū) Unicomgd OAMail 公司名稱 ID 流程實(shí)例 ID 傳 閱 主抄送 文件實(shí)際名稱+原擴(kuò)展名 文件實(shí)際名稱+原擴(kuò)展名 年月 閱 辦 文件實(shí)際名稱+原擴(kuò)展名 說(shuō)明:公務(wù)郵件區(qū)為用戶個(gè)人存放傳閱文件、閱辦文件和主送、抄送的文件,在同一個(gè)流 程中,在傳閱、閱辦和主送、抄送時(shí)是多個(gè)人共享一份文件。 3.2 數(shù)據(jù)庫(kù)中表、字段命名規(guī)范 1. 數(shù)據(jù)庫(kù)表是以 T_開(kāi)頭; 2. 數(shù)據(jù)庫(kù)視圖是以 V_開(kāi)頭 ; 3. 數(shù)據(jù)庫(kù)函數(shù)是以 SF_開(kāi)頭; 4. 數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程是以 SP_開(kāi)頭; 5. 每個(gè)表中的字段,要以意思明確為標(biāo)準(zhǔn); 4 引擎異常處理機(jī)制 4.1 以前錯(cuò)誤機(jī)制的缺陷 引擎對(duì)于出錯(cuò)的消息,重新處理的時(shí)間間隔太短。而對(duì)數(shù)據(jù)庫(kù)的壓力很大時(shí), 頻 繁的數(shù)據(jù)庫(kù)操作可能導(dǎo)致數(shù)據(jù)庫(kù)死鎖,超時(shí)等錯(cuò)誤,對(duì)于這些錯(cuò)誤系統(tǒng)自動(dòng)恢復(fù)需 要 的時(shí)間較長(zhǎng),兩者的矛盾導(dǎo)致了過(guò)多的工作流請(qǐng)求出現(xiàn)回滾。 4.2 對(duì)錯(cuò)誤機(jī)制的改進(jìn)方法 對(duì)于可能出現(xiàn)的異常錯(cuò)誤,我們采用多級(jí)錯(cuò)誤隊(duì)列的處理方式,對(duì)于不同的錯(cuò) 誤 隊(duì)列分情況用不同的重試時(shí)間,確保每一個(gè)錯(cuò)誤都可以經(jīng)過(guò)足夠長(zhǎng)的時(shí)間進(jìn)行嘗試, 從而盡量避免因?yàn)閿?shù)據(jù)庫(kù)或者其他系統(tǒng)資源繁忙導(dǎo)致引擎處理不過(guò)來(lái)而回滾。 具體錯(cuò)誤處理機(jī)制圖如下: 正 常處理隊(duì)列 異常處理隊(duì)列1 異常處理隊(duì)列2 異常處理隊(duì)列3 對(duì)進(jìn) 來(lái)的消息及時(shí) ,的 處理 實(shí)時(shí)響應(yīng) 正常 處理失敗了送 到異常隊(duì)列1 中 對(duì)進(jìn)來(lái)的消息每隔5 分鐘 處理一個(gè)消息 異常隊(duì)列2 失敗了送 到異常隊(duì)列3 中 對(duì)進(jìn) 來(lái)的消息每隔 1 0 分鐘處理一個(gè)消 息 異常隊(duì)列1 失敗了送 到異常隊(duì)列2 中 說(shuō)明: 1. 消息首先被送到正常隊(duì)列中,等待處理; 2. 當(dāng)正常處理失敗的時(shí),先送入異常處理隊(duì)列 1 中,等待 5 分鐘后處理該 消息; 3. 當(dāng)在異常處理隊(duì)列 1 中處理失敗的時(shí),先送入異常處理隊(duì)列 2 中,等待 10 分鐘后處理該消息; 4. 當(dāng)在異常處理隊(duì)列 2 中處理失敗的時(shí),先送入異常處理隊(duì)列 3 中,等待 15 分鐘后處理該消息; 5. 處理的時(shí)間間隔可以根據(jù)實(shí)際系統(tǒng)性能的需要做相應(yīng)的調(diào)整; 6. 錯(cuò)誤的隊(duì)列也可以通過(guò)配置文件來(lái)配置; 7. 對(duì)于多次處理也失敗的消息,保存到日志或者數(shù)據(jù)庫(kù)中,用另外的監(jiān)控程序 做監(jiān)控,等待修改后處理. 5 引擎服務(wù)的類詳細(xì)說(shuō)明 5.1 類的列表 類名 類說(shuō)明 WorkEnginerCls.cs 工作流處理類(即單個(gè)的線程) ,負(fù)責(zé)工作流的處理 SocketCls.cs 文件處理類,負(fù)責(zé)向文件服務(wù)器發(fā)送指令,等待返回的 結(jié)果 ConstCls.cs 定義了整個(gè)工程都需要用到的常量和方法 DBDealCls.cs 數(shù)據(jù)庫(kù)交互類,負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作 MSMQCls.cs 負(fù)責(zé)對(duì)消息隊(duì)列進(jìn)行操作 SmsCls.cs 對(duì)短信處理的類 WorkFlowDefineCls.cs 流程實(shí)例的基本信息定義類 WorkFlowCntrCls.cs 流程實(shí)例的基本信息控制類 StatusCls.cs 流程中每個(gè)狀態(tài)的基本信息類 DisposalCls.cs 流程中每個(gè)處理的基本信息類 UserCls.cs 用戶基本信息類 5.2 引擎所有類的關(guān)系結(jié)構(gòu)圖 DBDealCls.cs ConstCls.cs MSMQCls.cs SMSCls.csSocketCls.cs 功能類別層 WorkFlowDefineCls.cs StatusCls.cs DisposalCls.csUserCls.cs 流程實(shí)例層 WorkEnginerCls.cs 邏輯實(shí)現(xiàn)層 層 WorkFlowCntrCls.cs 5.3 類的詳細(xì)設(shè)計(jì) 5.3.1 功能類別層中類的詳細(xì)說(shuō)明 5.3.1.1ConstCls 類 類名 ConstCls 父類名 責(zé)任描述 ? 定義的靜態(tài)方法 ? 定義全局的常量(各個(gè)線程獨(dú)自占有) 協(xié)同類 全局常量 類型 值 UrlCompart char ‘#’ ConfigCompart char ‘=’ C_User char ‘;’ cntFileCompart char ‘*’ C_Chr1 char (char)1 C_Chr2 char (char)2 C_Chr3 char (char)3 C_Chr4 char (char)4 C_Rep1 string ]#$!%[ C_Rep2 String “]#$%![“ C_Rep3 String “]$#!%[“ C_Rep4 string “]!#$%[“ cntFileEnd string “\n“ cntFileQuit string “QUIT“ cntMSMQ string @“\private$\“ cntCFiles string “COPY“ cntDFiles string “MOVE“ cntMFiles string “MOVE“ C_PassDir string “傳閱“ C_MotifDir string “主抄送“ C_TypeZhu string “主辦“ C_TypeXie String “協(xié)辦“ C_TypeYue String “閱辦“ C_Compart String @“\“ C_DubCompart String “\\“ C_Udept String “`“ 方法說(shuō)明 方法名 1 ResolveStr () 類型 public static string[] Description 字符串解析方法 Input SrcStr,string 型,需要解析的字符串;Flag,char 型,字符串的分割符 Output StrArr[] 解析后產(chǎn)生的字符串?dāng)?shù)組 方法名 2 WriteLog () 類型 public static void Description 當(dāng)操作失敗時(shí),寫(xiě)出錯(cuò)日志 Input string LogMsg, 出錯(cuò)信息 string FilePath 日志文件所在的路徑 Output 5.3.1.2SocketCls 類 類名 FileCntrCls 父類名 責(zé)任描述 ? 提供指示文件服務(wù)器操作附件的方法 協(xié)同類 ConstCls CnnSocket 方法說(shuō)明 方法名 1 DealFileSys () 類型 Public bool Description 發(fā)送命令到文件服務(wù)器 Input Socket Skt,連接服務(wù)器的 SOCKET,string CmdFile 要操作的文件的命令行 Output 成功則返回 TRUE,否則返回 FALSE 方法名 2 SendFileMsg () 類型 public string Description 與文件服務(wù)器建立連接,并且將指定的操作送到文件服務(wù)器上,并等待服務(wù)器操 作后返回的結(jié)果。 Input string AllDealFileStr 所有要發(fā)送的命令組成的一個(gè)字符串 格式是:命令 1;命令 2;。。。/n Output 成功則返回 TRUE,否則返回 FALSE 5.3.1.3DBDealCls 類 類名 DBDealCls 父類名 責(zé)任描述 ? 提供連接數(shù)據(jù)庫(kù)的方法 ? 查詢方法 ? 事務(wù)執(zhí)行的方法 ? 斷開(kāi)數(shù)據(jù)庫(kù)的方法 協(xié)同類 FileDealCls 方法說(shuō)明 方法名 1 DBDealCls () 類型 public void Description 類的構(gòu)造函數(shù),建立數(shù)據(jù)庫(kù)連接,實(shí)例化文件類。調(diào)用到了 Open_Cnn 發(fā)生 錯(cuò)誤時(shí)拋出錯(cuò)誤,讓上一級(jí)處理 Input string CnnStr 連接數(shù)據(jù)庫(kù)字符串 Output 方法名 2 Open_Cnn () 類型 public void Description 建立數(shù)據(jù)庫(kù)連接 Input Output 方法名 3 Close_Cnn () 類型 private void Description 關(guān)閉數(shù)據(jù)庫(kù)連接,釋放連接實(shí)例 Input Output 方法名 4 Query () 類型 public DataTable Description 根據(jù)傳入的查詢語(yǔ)句,得到一個(gè)記錄集,并返回 Input SqlStr, string型,查詢語(yǔ)句 Output 類型 DataTable 方法名 5 ExecuteTran () 類型 public bool Description 有事務(wù)處理的方法 Input SqlArr 字符串?dāng)?shù)組(包含要操作的所有 SQL語(yǔ)句), Output TRUE表示事務(wù)執(zhí)行成功,F(xiàn)ALSE 表示執(zhí)行失敗 方法名 6 ExecuteTran () 類型 public bool Description 有事務(wù)處理的方法 Input SqlArr 字符串?dāng)?shù)組(包含要操作的所有 SQL語(yǔ)句), 包含文件系統(tǒng)的操作類型和所 涉及的附件 Output TRUE表示事務(wù)執(zhí)行成功,F(xiàn)ALSE 表示執(zhí)行失敗 方法名 7 RollBackFile () 類型 public bool Description 到出錯(cuò)時(shí)需要恢復(fù)文件系統(tǒng)的機(jī)制 Input ArrayList AttachMentDeal 包含文件系統(tǒng)的操作類型和所涉及的附件 Output TRUE表示執(zhí)行成功,F(xiàn)ALSE 表示執(zhí)行失敗 5.3.1.4MSMQCls 類 類名 MSMQCls 父類名 責(zé)任描述 ? 創(chuàng)建消息隊(duì)列的方法 ? 發(fā)送消息到隊(duì)列的方法 ? 從指定的隊(duì)列中讀取消息 ? 刪除指定名稱的消息隊(duì)列方法 協(xié)同類 ConstCls 方法說(shuō)明 方法名 1 CreateMSMQ () 類型 public bool Description 在指定機(jī)器上創(chuàng)建指定名稱的消息隊(duì)列 Input MSMQPath string 消息隊(duì)列的名稱 Output TRUE 表創(chuàng)建成功,F(xiàn)ALSE 表創(chuàng)建失敗 方法名 2 SendMsg () 類型 public bool Description 將指定的消息發(fā)送到指定隊(duì)列中 Input MsmqPath string 消息隊(duì)列的路徑,System.Messaging.Message ObjMsg 要 發(fā)送的消息對(duì)象 Output TRUE 表發(fā)送成功,F(xiàn)ALSE 表發(fā)送失敗 方法名 3 OnReceiveCompleted () 類型 public void Description 事件綁定的具體方法 Input Source 觸發(fā)事件的源 ReceiveCompletedEventArgs asyncResult 異步 Output Object 返回讀到的消息 方法名 4 DelMsmq () 類型 public bool Description 刪除指定的消息隊(duì)列 Input MsmqPath string 消息隊(duì)列的路徑 Output TRUE 表刪除成功,F(xiàn)ALSE 表刪除失敗 5.3.2 流程實(shí)例層中類的詳細(xì)說(shuō)明 5.3.2.1WorkFlowDefineCls 類 類名 WorkFlowDefineCls 父類名 責(zé)任描述 ? 流程實(shí)例基本信息類 協(xié)同類 ConstCls 屬性 類型 說(shuō)明 FlowID string 流程實(shí)例 ID Title String 流程實(shí)例的標(biāo)題 Action String 動(dòng)作處理標(biāo)識(shí) FlowTypeID Int 流程類型 ID FlowTypeName String 流程類型名稱 Creator UserCls 流程創(chuàng)建者的用戶類 CreateTime String 流程創(chuàng)建的時(shí)間 ParentWorkFlow WorkFlowCls 父流程的類 FormClass String HuanJi String 緩急程度 MiJi String 密集程度 IS_PIGEONHOLE int 是否歸檔標(biāo)志 ModifyFlag String 對(duì)應(yīng) SpecialID 處理情況(False + chr(1) + False)表示會(huì)簽的情況 BrachResult Int 合流標(biāo)示(1:表示合流,0 表示未 合流) SpeciID String 分支標(biāo)記(用戶 A + chr(1) + 用戶 B) Fields String 流程的附件字段(字段名 + chr(1) + 字段值 + chr(2) + 字段名 + chr(1) + 字段值) AttachMents String 流程帶的附件的名稱和路徑(附件 名 + chr(1) + 附件路徑 + chr(2) + 附件名 + chr(1) + 附件路徑) MergeField String 合流時(shí)需要合并的字段(字段名; 字段;。 。 。 。字段名) PIGEONHOLEDeptNam e String 該文要?dú)w入的部門(mén)名稱 FileClass String 請(qǐng)看消息的 FileClass的解釋 FileFlag Int 請(qǐng)看消息的 FileFlag的解釋 CurStatus StatusCls 流程走到的當(dāng)前的狀態(tài) Company_ID int 流程所在的公司 ID 5.3.2.2WorkFlowCntrCls 類 類名 WorkFlowCntrCls 父類名 責(zé)任描述 ? 流程實(shí)例基本信息類 協(xié)同類 ConstCls 方法說(shuō)明 方法名 1 CommState 類型 private void Description 處理普通狀態(tài)的方法(普通狀態(tài)和開(kāi)始的進(jìn)行一樣的處理) Input Output 方法名 2 EndState 類型 private void Description 處理結(jié)束狀態(tài)的方法 Input Output 方法名 3 ChildFlow 類型 private void Description 處理子流動(dòng)作 Input Output 方法名 4 ChildFlow_Wait_SameTi me 類型 private void Description 處理等待、同時(shí)子流動(dòng)作(傳閱的時(shí)候起作用) Input Output 方法名 5 ChildFlow_NotWait_Sam eTime 類型 private void Description 處理不等待、同時(shí)子流動(dòng)作(傳閱)沒(méi)有寫(xiě)日志的 Input Output 方法名 6 DivideFlow 類型 private void Description 處理分流 Input Output 方法名 7 MergeFlow 類型 private void Description 處理合流 Input Output 方法名 8 HurryAct 類型 private void Description 處理催辦動(dòng)作 Input Output 方法名 9 RenewAct 類型 private void Description 處理普通狀態(tài)的方法(普通狀態(tài)和開(kāi)始的進(jìn)行一樣的處理) Input Output 方法名 10 ReteatAct 類型 private void Description 處理撤回動(dòng)作 Input Output 方法名 11 DisposeAct 類型 private void Description 處理作廢動(dòng)作 Input Output 方法名 12 GetFlowLogMsg 類型 private void Description 得到當(dāng)前流程得日志信息 Input Output 方法名 13 類型 private void Description 處理作廢動(dòng)作 Input Output 5.3.2.3StatusCls 類 類名 StatusCls 父類名 責(zé)任描述 ? 流程狀態(tài)基本信息類 協(xié)同類 屬性 類型 說(shuō)明 FlowID string 流程實(shí)例 ID FlowTypeID Int 流程類型 ID FlowTypeName String 流程類型名稱 StatusName String 狀態(tài)的名稱 StatusTypeName String 狀態(tài)類型的名稱 StatusTypeID int 狀態(tài)類型的 ID INTERFLOW_CUSTOM_ RULE string 合流自定義規(guī)則 INTERFIX_FIELD string 相關(guān)字段 COM_EXTEND string Com 擴(kuò)展 CHILD_FLOW_TYPE string 子流(分流)類型 CHILD_FLOW_HINT string 子流提示 CHILD_FLOW string 子流 CHANGE_FLOW _NAME string 轉(zhuǎn)流程流程名 CHANGE_FLOW _ID Int 轉(zhuǎn)流程流程 ID CHANGE_STAT US_NAME string 轉(zhuǎn)流程狀態(tài)名稱 CHANGE_STAT US_ID Int 轉(zhuǎn)流程狀態(tài) ID AUTO_FIELD_L IST string 自動(dòng)列表 AUTO_CUSTOM _RULE string 自動(dòng)自定義規(guī)則 AUTO_FIELD_N AME string 自動(dòng)字段名稱 INTERFLOW_U NITE_LIST string 合流自定義規(guī)則 OperationRole _ID Int 業(yè)務(wù)角色 ID USERROLE_ID Int 用戶角色 ID NextStatus HashTable 由下一步狀態(tài)作為元素組成的 HashTable FromDisposal DisposalCls 本狀態(tài)從哪個(gè)動(dòng)作過(guò)來(lái) 方法名 1 GetStatusMsg 類型 private void Description 得到狀態(tài)的信息,對(duì)屬性賦值 Input String FlowID 流程ID,string StatusID 狀態(tài)ID Output 方法名 2 GetNextStatusMsg 類型 private HashTable Description 得到當(dāng)前狀態(tài)所有下一步狀態(tài)的信息,給屬性賦值 Input String FlowID 流程ID,string StatusID 狀態(tài)ID Output 由所有下一步狀態(tài)信息組成的HashTable 5.3.2.4DisposalCls 類 類名 DisposalCls 父類名 責(zé)任描述 ? 流程處理基本信息類 協(xié)同類 ConstCls 屬性 類型 說(shuō)明 FlowID string 流程實(shí)例 ID FlowTypeID Int 流程類型 ID FlowTypeName String 流程類型名稱 DISPOSAL_ID Int 處理過(guò)程 ID DISPOSAL_HINT String 處理過(guò)程提示 DISPOSAL_NAME String 處理過(guò)程名稱 TRANSACT_STAT US_ID Int 經(jīng)辦狀態(tài) DEPT_LIMIT Int 同部門(mén)限制 ROLE_LIMIT Int 同角色限制 CUR_STATUS_ID Int 當(dāng)前環(huán)節(jié) ID PRE_STATUS_ID int 上環(huán)節(jié) ID GROUP_LIMIT Int 同組限制 方法名 1 GetDisponsalMsg 類型 private void Description 得到處理步驟的信息 Input int FlowTypeID 流程類型ID,int PreStatus_ID,上一個(gè)狀態(tài)ID,int CurStatus_ID 當(dāng)前狀態(tài)ID Output 5.3.2.5UserCls 類 類名 UserCls 父類名 責(zé)任描述 ? 用戶基本信息類 協(xié)同類 ConstCls 屬性 類型 說(shuō)明 UserID string 用戶 ID DeptID Int 用戶所在的部門(mén) ID DeptName String 用戶所在的部門(mén)名稱 RoomID Int 處室 ID RoomName String 處室名稱 UserName String 用戶中文名 CompanyID Int 用戶所在的公司 ID CompanyName String 用戶所在的公司名稱 OPERRoleID String 用戶所屬的角色 ID OPERRoleName String 用戶所屬的角色名稱 UserOrderby Int 用戶的排序字段 RoomOrderBy Int 處室排序字段 DeptOrderBy Int 部門(mén)排序字段 CompanyOrderBy Int 公司排序字段 方法名 1 GetUserMsg 類型 private void Description 得到用戶信息 Input string UserID 用戶ID,string CnnStr 數(shù)據(jù)庫(kù)連接 Output 5.3.3 流程邏輯處理層中類的詳細(xì)說(shuō)明 5.3.3.1WorkEnginerCls 類 類名 WorkEnginerCls 父類名 責(zé)任描述 ? 連接數(shù)據(jù)庫(kù) ? 掃描工作流引擎表(是一個(gè)視圖) ? 對(duì)動(dòng)作和狀態(tài)做處理 協(xié)同類 使用 FileDealCls 對(duì)文件系統(tǒng)的操作 使用 DBDealCls 對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作 使用 ConstCls 調(diào)用系統(tǒng)常量 方法說(shuō)明 方法名 1 WorkEnginerRun() 類型 public void Description 工作流引擎工作的方法,創(chuàng)建隊(duì)列和線程,并且綁定關(guān)系,調(diào)用方法 AssembleMethod處理取得的消息,并做相應(yīng)的邏輯處理。 Input Output 方法名 2 AssembleMethod () 類型 public void Description 將取得的消息轉(zhuǎn)變成為結(jié)構(gòu)體,再執(zhí)行具體的處理方法 Input Output 方法名 3 XMLToStruct () 類型 private bool Description 分解得到的消息,將消息中的信息組合成 ItemMsg類型的數(shù)據(jù) Input MSXML2.DOMDocument ObjDom,由消息中的正文所得到的 MSXML2.DOMDocument對(duì) 象 Output 轉(zhuǎn)變正確的則返回 TRUE,否則返回 FALSE 方法名 DealWorkFlow () 類型 public void Description 對(duì)各種動(dòng)作和狀態(tài)的處理 Input Output 方法名 AgainDealMethod () 類型 public void Description 處理由于連接失敗而導(dǎo)致未處理的情況。 Input Output 方法名 CorrectMethod () 類型 public void Description 創(chuàng)建的糾錯(cuò)線程,主要是在做糾錯(cuò)處理的時(shí)使用 Input Output 方法名 FileSrvDealMethod () 類型 private void Description 主要用于處理在沒(méi)有連接文件服務(wù)成功時(shí)放入隊(duì)列的消息 Input Output 方法名 4 CommState() 類型 private void Description 對(duì)普通、開(kāi)始狀態(tài)和跳轉(zhuǎn)動(dòng)作進(jìn)行處理 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,int LogFlag,日志處理的標(biāo)志位(0:開(kāi)始的時(shí) 候,1:非開(kāi)始的時(shí)候,2:結(jié)束)FrmWorkEnginer WinEnginer(在應(yīng)用程序中用到, 服務(wù)中沒(méi)有) Output 方法名 5 EndState () 類型 private void Description 對(duì)結(jié)束進(jìn)行處理,調(diào)用了 DecomposeFields(),GetFileName(),MergeUrl(), GetNewAttachment(),BeginState(),GetLogSql(),MoveLog(),DeleteAllTable() CanZhuChaosong(),GetZhuChaoUrl(),DealZhuChaoSong(),EnginerDB.ExecuteTra n() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 6 HurryAct () 類型 private void Description 對(duì)催辦進(jìn)行處理,調(diào)用了 DealUserMail(),EnginerDB.ExecuteTran() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 7 RenewAct () 類型 private void Description 對(duì)重發(fā)進(jìn)行處理,調(diào)用了 ConstCls.ResolveStr(),EnginerDB.ExecuteTran() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 8 DisposeAct () 類型 private void Description 對(duì)作廢進(jìn)行處理,調(diào)用了 MoveLog(),DeleteAllTable(),DealUserMail(), DelMergeUrl(),EnginerDB.ExecuteTran() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 10 ReteatAct () 類型 private void Description 對(duì)撤回進(jìn)行處理,調(diào)用了 EnginerDB.Query(),DecomposeFields(), DealNotify(),EnginerDB.ExecuteTran() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 11 ChildFlow () 類型 private void Description 對(duì)子流進(jìn)行處理,調(diào)用了 ChildFlow_Wait_SameTime (), ChildFlow_NotWait_SameTime (),ChildFlow_NotWait_Order (), ChildFlowEnd () 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 12 ChildFlow_Wait_SameTime() 類型 private void Description 對(duì)結(jié)束進(jìn)行處理,調(diào)用了 GetRealPath (),GetFileName(),MergeUrl(), GetNewAttachment(),DealerToSql (),DealZaiBan (),DealFlowMain (), GetLogSql(),EnginerDB.ExecuteTran () 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 13 ChildFlow_NotWait_SameTime () 類型 private void Description 對(duì)結(jié)束進(jìn)行處理,調(diào)用了 GetRealPath(),GetFileName(),MergeUrl(), GetNewAttachment(),DealUserMail(),GetLogSql(),DealZaiBan (), DealFlowMain (),EnginerDB.ExecuteTran() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 14 ChildFlow_NotWait_Order () 類型 private void Description 對(duì)結(jié)束進(jìn)行處理,調(diào)用了 GetRealPath(),GetFileName(),MergeUrl(), GetNewAttachment(),DealUserMail(),GetLogSql(),DealZaiBan (), DealFlowMain (),GetUserDept(),GetUserCom(),EnginerDB.ExecuteTran() DealNotify(),DealFlowMain() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 15 ChildFlowEnd() 類型 private void Description 對(duì)結(jié)束進(jìn)行處理,調(diào)用了 DelMergeUrl (),GetFields (),MoveLog (), DeleteAllTable (),DealUserMail(),GetLogSql(),DealZaiBan (), DealFlowMain (),EnginerDB.ExecuteTran() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 16 DivideFlow () 類型 private void Description 對(duì)結(jié)束進(jìn)行處理,調(diào)用了 DecomposeFields (),GetFileName (),MergeUrl(), GetNewAttachment(),DealFlowMain (),GetLogSql(),GetUserDept (), GetUserCom (),ChildFileDeal(),GetOneArr(),EnginerDB.ExecuteTran() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 17 ChildFlow_NotWait_SameTime () 類型 private void Description 對(duì)結(jié)束進(jìn)行處理,調(diào)用了 GetRealPath(),GetFileName(),MergeUrl(), GetNewAttachment(),DealUserMail(),GetLogSql(),DealZaiBan (), DealFlowMain (),EnginerDB.ExecuteTran() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 18 MergeFlow () 類型 private void Description 對(duì)結(jié)束進(jìn)行處理,調(diào)用了 DecomposeFields (),GetFileName(),MergeUrl(), GetNewAttachment(),MoveLog (),GetLogSql(),DealZaiBan (),DealFlowMain (), GetMergeField(),DealNotify(),DealZaiBan(),EnginerDB.ExecuteTran() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 方法名 19 GetMergedField() 類型 private string Description 對(duì)結(jié)束進(jìn)行處理,調(diào)用了 EnginerDB.Query(),DecomposeFields() 若出錯(cuò),寫(xiě)出錯(cuò)信息,錯(cuò)誤的流程等待下一次處理(最多處理 3 次) Input ItemMsg TmpRsd,要處理的結(jié)構(gòu)體,F(xiàn)rmWorkEnginer WinEnginer(在應(yīng)用程序中用 到,服務(wù)中沒(méi)有) Output 合并后的字段 方法名 20 GetFieldValue () 類型 private string Description 返回查找到的字段的值 Input SrcStr string Field string Output 返回查找到的字段的值 方法名 21 GetOneArr () 類型 private string[] Description 將數(shù)組的數(shù)組轉(zhuǎn)變成一維數(shù)組 Input TmpArr string[][] Output 一維數(shù)組 方法名 22 ChildFileDeal () 類型 private string[] Description 對(duì)各個(gè)子流程的文件系統(tǒng)的處理 Input FNameUrl Field型,ATTACHMENT所組成的結(jié)構(gòu)體數(shù)組,TmpRsd ItemMsg型,某條 DB中記錄組成的結(jié)構(gòu)體,UserID string型 用戶ID, ChCreateTime string型 創(chuàng) 建時(shí)間 ChDept string型,用戶所在部門(mén),ChCom string型,用戶所在公司, ChFlowID string型,子流程ID,FileName string[]型,文件的名稱 Output 返回操作文件系統(tǒng)的字符串?dāng)?shù)組 方法名 23 ChildDBDeal () 類型 private string[] Description 對(duì)各個(gè)子流程的數(shù)據(jù)庫(kù)的處理, ChildSql(),DealNotify(),GetLogSql() Input FNameUrl Field型,ATTACHMENT所組成的結(jié)構(gòu)體數(shù)組,UserID string型 用戶 ID, ChCreateTime string型 創(chuàng)建時(shí)間 ChDept string型,用戶所在部門(mén), ChCom string型,用戶所在公司,ChFlowID string型,子流程ID,TmpRsd ItemMsg型,某條DB中記錄組成的結(jié)構(gòu)體,ChAttachments string型,工作區(qū)的文 件存放字符串 ChBackAttachment string型,備份區(qū)的文件存放字符串 Output 返回操作數(shù)據(jù)庫(kù)的字符串?dāng)?shù)組 方法名 24 GetFileName () 類型 private string[] Description 得到文件系統(tǒng)中的文件存放名稱 Input FNameUrl Field型,ATTACHMENT 所組成的結(jié)構(gòu)體數(shù)組,F(xiàn)lag int 0:非結(jié)束, 1:結(jié)束 Output 返回文件名稱 方法名 25 GetNewAttachment () 類型 private string Description 得到新的 ATTACHMENT Input fileNames string[]型,所有的文件名稱,fileArr string[]型,新的 URL Output 返回 ATTACHMENT 方法名 26 GetFields () 類型 private string Description 更新主流程的附加字段表 Input Fields88 帶 88的字段,F(xiàn)lowID 要查找的流程 Output 更新的字符串 方法名 27 ChildSql () 類型 private string[] Description 處理等待、同時(shí)子流動(dòng)作(并發(fā)串改的時(shí)候起作用) Input ItemMsg TmpRsd,string ChildFlowID,string Receiver,string ChAttachments Output 返回操作數(shù)據(jù)庫(kù)的字符串?dāng)?shù)組 方法名 28 DealSpecialID () 類型 private ItemMsg Description 修改結(jié)構(gòu)體中的 SPECIAID和 MODIFYFLAG的值 Input TmpRsd ItemMsg 型, Output 修改后的結(jié)構(gòu)體 方法名 29 DealNotify () 類型 private string Description 操作待辦表 Input ItemMsg TmpRsd,string UserID,string FlowID Output 操作的 SQL語(yǔ)句 方法名 30 DealZaiBan () 類型 private string Description 操作在辦表 Input TmpRsd ItemMsg型,某條 DB中記錄組成的結(jié)構(gòu)體 Output 操作的 SQL語(yǔ)句 方法名 31 DealFlowMain () 類型 private string[] Description 操作實(shí)例表和引擎表 Input TmpRsd ItemMsg型,某條 DB中記錄組成的結(jié)構(gòu)體 ParentID string Output 操作的 SQL語(yǔ)句 方法名 32 DealUserMail () 類型 private string[] Description 對(duì)用戶郵件表進(jìn)行操作(GetMaxID) Input TmpRsd ItemMsg型,某條 DB中記錄組成的結(jié)構(gòu)體 Flag int 0:作廢,1:催辦,2: 傳閱,3:主抄送 Output 返回對(duì)用戶郵件表進(jìn)行操作的SQL語(yǔ)句組 方法名 33 GetMaxID () 類型 private int Description 得到最大的 ColName EnginerDB.Query( Input TableName string 表名稱,ColName string 列名稱 Output 返回對(duì)用戶郵件表進(jìn)行操作的SQL語(yǔ)句組 方法名 34 DeleteAllTable () 類型 private string[] Description 刪除出日志表外的所有的其他表中某個(gè)流程的記錄 Input Flow_id string 表流程實(shí)例 ID Output 所有的刪除SQL數(shù)組 方法名 35 MoveLog () 類型 private string[] Description 轉(zhuǎn)移 t_flow_logstatus 中的記錄到 t_flow_endlogstatus Input Flow_id string 表流程實(shí)例 ID Output 所有的轉(zhuǎn)移SQL數(shù)組 方法名 36 DealUserMail () 類型 private string[] Description 對(duì)用戶郵件表進(jìn)行操作(GetMaxID) Input TmpRsd ItemMsg型,某條 DB中記錄組成的結(jié)構(gòu)體 Flag int 0:作廢,1:催辦,2: 傳閱,3:主抄送 Output 返回對(duì)用戶郵件表進(jìn)行操作的SQL語(yǔ)句組 方法名 37 CanZhuChaosong() 類型 private string Description 判斷是否需要主送抄送 Input TmpRsd.Fields 結(jié)構(gòu)體附加字段 Output 返回一個(gè)字符串 方法名 38 DealZhuChaoSong () 類型 private string[] Description 得到主送抄送的 SQL語(yǔ)句 Input TmpRsd 結(jié)構(gòu)體, string TxtToCC(主送抄送的所有的接受者) MailAttachMent string 沒(méi)有“正文原稿”和“稿紙” Output 返回一個(gè)SQL數(shù)組 方法名 39 DocSql () 類型 private string[] Description 能進(jìn)此函數(shù)表明,所有的文檔管理的條件已經(jīng)符合。 得到插入文檔管理系統(tǒng)表的 SQL語(yǔ)句 Input ItemMsg TmpRsd,Field[] FileUrl,string[] HttpUrl Output 返回一個(gè)SQL數(shù)組 方法名 40 DealPignohole () 類型 private string[][] Description 用于歸檔的函數(shù),返回字符串?dāng)?shù)組數(shù)組 Input ItemMsg TmpRsd,Field[] FNameUrl Output 返回二維字符串?dāng)?shù)組 方法名 41 GetDeptID () 類型 private string Description 根據(jù)公司 ID得到本公司的行政部的 ID Input CompanyID string Output 部門(mén)ID 方法名 42 GetLogSql () 類型 private string[] Description 根據(jù)傳入的結(jié)構(gòu)體, 返回一個(gè) SQL數(shù)組 Input TmpRsd,NewattachMent,DealFlag(0:開(kāi)始的時(shí)候,1:非開(kāi)始的時(shí)候,2:結(jié)束) Output 返回一個(gè)SQL數(shù)組 方法- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
4 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 中國(guó)聯(lián)通 山西 分公司 MSS 系統(tǒng) 設(shè)計(jì) 工作流 引擎 V50
鏈接地址:http://appdesigncorp.com/p-1574348.html