需求:
1、業(yè)務數據要保存在我們自己的數據庫里 2、CCFlow有保存草稿的功能,但是領導要求每個業(yè)務都要有草稿箱,流程從草稿箱發(fā)起,每個業(yè)務單獨查詢,而不要在CCFlow的統一界面查詢,所以每個業(yè)務的列表頁面以及增刪改查都要有的 3、工作流的消息和我們應用系統的消息要整合到一起,放在一起排序、提示 4、我們項目用的框架是第三方的我記錄MVC框架,框架根據Web.config配置的路徑按照MVC的模式解析路由,配置的路徑之外的,還是按照asp.net WebForm的方式處理,所以我把CCFlow的ClientBin、DataUser、WF文件夾直接放到Web下,然后引用所需的dll。VS就是強大,兩個不同的解決方案,打上斷點照樣可以調試,所以同時運行CCFlow的源碼后,可以從我們項目的代碼處運行到CCFlow的源碼的斷點處。
5、審核通過,則發(fā)送到下一步,審核不通過,則直接結束流程
6、支持分公司,同一個業(yè)務,各分公司的流程可能是不一樣的
實現:
一、CCFlow的數據庫與應用系統的數據庫耦合
部門:SELECT TOP (100) PERCENT dept.Id AS No, dept.Name + '(' + comp.Name + ')' AS Name, CAST(dept.Pid AS varchar(20)) AS ParentNo, '' AS NameOfPath, '' AS TreeNo, '' AS Leader, '' AS Tel, 0 AS Idx, 0 AS IsDir, '' AS FK_DeptTypeFROM CQSD_Dev.dbo.IMP_Dept AS dept INNER JOIN CQSD_Dev.dbo.IMP_Dept AS comp ON comp.Id = dept.CidWHERE (dept.DelFlg = 0)ORDER BY comp.Pid, comp.Id崗位:SELECT TOP (100) PERCENT job.Id AS No, job.Name + '(' + comp.Name + ')' AS Name, 3 AS StaGrade, '' AS DutyReq, '' AS Makings, '' AS FK_StationTypeFROM CQSD_Dev.dbo.IMP_Job AS job INNER JOIN CQSD_Dev.dbo.IMP_Dept AS dept ON dept.Id = job.DeptId INNER JOIN CQSD_Dev.dbo.IMP_Dept AS comp ON comp.Id = dept.CidWHERE (job.DelFlg = 0)ORDER BY comp.Id人員:SELECT u.Username AS No, e.Name, 'pub' AS Pass, e.DeptId AS FK_Dept, '' AS EmpNo, '' AS FK_Duty, '' AS Leader, '123' AS SID, '' AS Tel, '' AS Email, '' AS NumOfDeptFROM CQSD_Dev.dbo.IMP_Employee AS e INNER JOIN CQSD_Dev.dbo.Sys_User AS u ON u.RelationId = e.IdWHERE (e.DelFlg = 0)部門人員:SELECT u.Username AS FK_Emp, e.DeptId AS FK_DeptFROM CQSD_Dev.dbo.IMP_Employee AS e INNER JOIN CQSD_Dev.dbo.Sys_User AS u ON u.RelationId = e.IdWHERE (e.DelFlg = 0) AND (e.Code IS NOT NULL) AND (e.Code <> '')崗位人員:SELECT u.Username AS FK_Emp, e.JobId AS FK_StationFROM CQSD_Dev.dbo.IMP_Employee AS e INNER JOIN CQSD_Dev.dbo.Sys_User AS u ON u.RelationId = e.IdWHERE (e.DelFlg = 0) AND (e.Code IS NOT NULL) AND (e.Code <> '')View Code
二、菜單、待辦、抄送、查詢等列表界面
菜單:
待辦:
流程消息:
三、流程消息和應用系統的其他消息合并的View
SELECT MyPK, Sender, e2.Name AS SenderName, SendTo, e3.Name AS SendToName, Title, Doc, MsgType, RDT AS SendTime, IsReadFROM CQSD_Flow_Dev.dbo.Sys_SMS AS sms JOIN Sys_User u2 on u2.Username = Sender join IMP_Employee e2 ON e2.Id=u2.RelationId join Sys_User u3 on u3.Username = SendTo join IMP_Employee e3 ON e3.Id=u3.RelationIdUNIONSELECT cast(m.id AS varchar(20)) AS mypk, u.Username AS Sender, e.Name AS SenderName, u1.Username AS sendto, e1.Name AS SendToName, m.emailtheme AS title, emailcontent AS doc, 'CQSDMail' AS msgtype, m.createtime AS SendTime, readingstate AS isreadFROM IMP_InternalMail m JOIN IMP_InternalMailRecv mr ON mr.EMailThemeId = m.id LEFT JOIN IMP_Employee e ON e.id = m.CreateUserId JOIN Sys_User u on u.RelationId=e.Id join IMP_Employee e1 ON e1.id = mr.UserId join Sys_User u1 on u1.RelationId=e1.IdWHERE m.delflg = 0 AND mr.delflg = 0 AND m.EMailStatus = 1View Code
四、操作CCFlow數據庫的Service
using System;using System.Collections.Generic;using System.Linq;using System.Text;using CQSD.Service.Interface.Admin.CCFlow;using System.Data;using Simpo;using BP.WF;using CQSD.Const;using BP.En;using CQSD.Domain.DB;using CQSD.Service.Interface.Admin.HR;using CQSD.Service.Admin.HR;namespace CQSD.Service.Admin.CCFlow{ /// <summary> /// 工作流數據庫服務 /// </summary> public class CCFlowService : Service, ICCFlowService { #region 根據WorkID獲取工作 /// <summary> /// 根據WorkID獲取工作 /// </summary> /// <param name="WorkID">WorkID</param> public DataTable GetWork(string WorkID) { StringBuilder sb = new StringBuilder(string.Format(@" select wk.* from dbo.WF_GenerWorkFlow wk where WorkID={0}", WorkID)); return BP.DA.DBaccess.RunSQLReturnTable(sb.ToString()); } #endregion #region 工作查詢 /// <summary> /// 工作查詢 /// </summary> /// <param name="flowSortNo">流程類別編號</param> public DataTable GetFlowList(string flowSortNo, IMP_Employee loginEmployee) { StringBuilder sb = new StringBuilder(string.Format(@" select fl.*,fs.Name as FK_FlowSortText,fs.No as FK_FlowSort from WF_Flow fl left join WF_FlowSort fs on fl.FK_FlowSort=fs.No where 1=1")); if (!strUtil.IsNullOrEmpty(flowSortNo)) { sb.Append(string.Format(" and fs.No='{0}'", strUtil.SqlClean(flowSortNo))); } string FK_Flows = GetCompFK_Flows(loginEmployee); if (!strUtil.IsNullOrEmpty(FK_Flows)) { sb.Append(string.Format(" and fl.No in ({0})", FK_Flows)); } else { sb.Append(" and 1=2 "); } sb.Append(" order by fs.No"); return BP.DA.DBAccess.RunSQLReturnTable(sb.ToString()); } #endregion #region 獲取有流程的流程類別 /// <summary> /// 獲取有流程的流程類別 /// </summary> public DataTable GetFlowTypeList() { StringBuilder sb = new StringBuilder(string.Format(@" select distinct fs.* from WF_Flow fl left join WF_FlowSort fs on fl.FK_FlowSort=fs.No where 1=1")); sb.Append(" order by fs.No"); return BP.DA.DBAccess.RunSQLReturnTable(sb.ToString()); } #endregion #region 根據WorkID、FK_Node、FK_Emp獲取工作記錄 /// <summary> /// 根據WorkID、FK_Node、FK_Emp獲取工作記錄 /// </summary> public DataTable GetGenerWorkerlist(string WorkID, string FK_Node, string FK_Emp) { StringBuilder sb = new StringBuilder(string.Format(@" select gwl.* from WF_GenerWorkerlist gwl where WorkID={0} and FK_Node={1} and FK_Emp='{2}'", WorkID, FK_Node, FK_Emp)); return BP.DA.DBAccess.RunSQLReturnTable(sb.ToString()); } #endregion #region 獲取流程退回信息 /// <summary> /// 獲取流程退回信息 /// </summary> public string GetReturnWorksInfo(string FK_Node,
新聞熱點
疑難解答