·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> CCFlow SDK模式开发

CCFlow SDK模式开发

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

CCFlow SDK模式开发

需求:

1、业务数据要保存在我们自己的数据库里 2、CCFlow有保存草稿的功能,但是领导要求每个业务都要有草稿箱,流程从草稿箱发起,每个业务单独查询,而不要在CCFlow的统一界面查询,所以每个业务的列表页面以及增删改查都要有的 3、工作流的消息和我们应用系统的消息要整合到一起,放在一起排序、提示 4、我们项目用的框架是第三方的我记录MVC框架,框架根据Web.config配置的路径按照MVC的模式解析路由,配置的路径之外的,还是按照asp.net WebForm的方式处理,所以我把CCFlow的ClientBin、DataUser、WF文件夹直接放到Web下,然后引用所需的dll。VS就是强大,两个不同的解决方案,打上断点照样可以调试,所以同时运行CCFlow的源码后,可以从我们项目的代码处运行到CCFlow的源码的断点处。

5、审核通过,则发送到下一步,审核不通过,则直接结束流程

6、支持分公司,同一个业务,各分公司的流程可能是不一样的

实现:

一、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 = 1
View 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,