【论文参考】基于工作流引擎的系统框架设计开发 ——工作流引擎子系统(论文+系统)免费下载
论文主要讲述了工作流引擎的基本功能及设计方法,介绍工作流引擎的基本原理,具体分析了工作流引擎所包含的内容,详细介绍了相关的信息模型和控制模型。系统采用关系结构的理念来设计工作流引擎,给出了用MicrosoftVisual Studio 2005和Microsoft SQL Server2000实现系统的方法。论文中利用本工作流引擎构建系统能适应大多数业务流程的扭转,大大缩短常见信息系统的项目开发周期,提高效率。
4.1 工作流引擎的详细设计
用户通过对活动节点进行操作,主要操作动作有以下表1所示:
表1控制节点类型
控制类型名 |
中文名 |
说明 |
DIRECT |
无条件转移 |
不做任何动作,直接激活下一个节点。 |
AND_BRANCH |
与分支控制 |
流经此处的任务将进行与分支,通过查找TaskStatus表来决定下一动作。 |
AND_MERGE |
与合并控制 |
流经此处的任务将进行与合并同步,通过查找TaskStatus表来决定下一动作。 |
OR_BRANCH |
或分支控制 |
流经此处的任务将进行或分支,通过查找TaskStatus表来决定下一动作。 |
OR_MERGE |
或合并控制 |
流经此处的任务将进行或合并同步,通过查找TaskStatus表来决定下一动作。 |
VOTE_MERGE |
投票合并控制 |
通过查找TaskStatus表来决定投票结果。 |
4.1数据库结构的设计
根据前面的模块功能设计,系统所需要的数据库应包括“活动节点表”,“业务过程表”,“控制节点表”,“任务指派规则表”,“任务状态表”,“任务列表”等,各部分各自作为一个表存在。
具体设计如下:
1.活动节点表
用于存放活动节点信息,具体设计如表2所示:
表2 活动节点表
字段名 |
数据类型 |
说明 |
ActID |
Int |
活动编号 |
ProcID |
Int |
业务编号 |
ActName |
Varchar(20) |
活动名称 |
ActType |
Varchar(20) |
活动类型 |
TimeAllowed |
Datatime |
接受时间 |
PreCtrNodelist |
varchar(20) |
前面的控制结点表 |
NextCtrNodelist |
varchar(20) |
后面的控制结点表 |
5.1.3 工作流程和部分代码
部分代码如下:
string sql = "select top 1count0=(select count(*) from TaskList where CompletionFlag=0 ),count1=(selectcount(*) from TaskList where CompletionFlag=1 ),count2=(select count(*) fromTaskList where CompletionFlag=2 ),count3=(select count(*) from TaskList whereCompletionFlag=3 ),count8=(select count(*) from TaskList where CompletionFlag=8),count9=(select count(*) from TaskList where CompletionFlag=9),maxcount=(select count(*) from TaskList) from TaskList";
read =SqlHelper.SqlHelpDao.ExecuteReader(ContClass.Constants.ConnectionString, CommandType.Text,sql);
while (read.Read())
{
this.Fettle[0] = double.Parse(read[0].ToString());
this.Fettle[1] = double.Parse(read[1].ToString());
this.Fettle[2] = double.Parse(read[2].ToString());
this.Fettle[3] = double.Parse(read[3].ToString());
this.Fettle[4]= double.Parse(read[4].ToString());
this.Fettle[5] = double.Parse(read[5].ToString());
this.Fettle[6] = double.Parse(read[6].ToString());
this.label13.Text = "任务流程未通过的有:" + Fettle[0].ToString() + "个";
this.label14.Text = "任务流程处理中的有:" + Fettle[1].ToString() + "个";
this.label15.Text = "任务流程已通过的有:" + Fettle[2].ToString() + "个";
this.label16.Text = "任务流程哑状态的有:" + Fettle[3].ToString() + "个";
this.label17.Text = "任务流程睡眠状态有:" + Fettle[4].ToString() + "个";
this.label18.Text = "任务流程等待状态有:" + Fettle[5].ToString() + "个";
this.label19.Text = "合计任务流程数共有:" + Fettle[6].ToString() + "个"
this.lbl0.Height = ((int)(this.lbl0.Height * (Fettle[0] / Fettle[6])) <= 1)? 2 : (int)(this.lbl0.Height* (Fettle[0] / Fettle[6]));
this.lbl1.Height = ((int)(this.lbl1.Height * (Fettle[1] / Fettle[6])) <= 1)? 2 : (int)(this.lbl1.Height* (Fettle[1] / Fettle[6]));
this.lbl2.Height = ((int)(this.lbl2.Height * (Fettle[2] / Fettle[6])) <= 1)? 2 : (int)(this.lbl2.Height* (Fettle[2] / Fettle[6]));
this.lbl3.Height = ((int)(this.lbl3.Height * (Fettle[3] / Fettle[6])) <= 1)? 2 : (int)(this.lbl3.Height* (Fettle[3] / Fettle[6]));
this.lbl4.Height = ((int)(this.lbl4.Height * (Fettle[4] / Fettle[6])) <= 1)? 2 : (int)(this.lbl4.Height* (Fettle[4] / Fettle[6]));
this.lbl5.Height = ((int)(this.lbl5.Height * (Fettle[5] / Fettle[6])) <= 1)? 2 : (int)(this.lbl5.Height* (Fettle[5] / Fettle[6]));
}
END
联系我
获取更多资源
学习更上一层楼