简单 C Sharp工作流的实现Word下载.docx
- 文档编号:18416459
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:14
- 大小:17.92KB
简单 C Sharp工作流的实现Word下载.docx
《简单 C Sharp工作流的实现Word下载.docx》由会员分享,可在线阅读,更多相关《简单 C Sharp工作流的实现Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
url的设计是由INFOPATH联想到的,微软sharepoint2007可以通过为每个工作流活动指定相应的编辑表单,可以是网页也可以infopath设计的表单,这样的好处是让工作流的不同活动具有不同的用户界面,sharepoint2007可以在feature.xml里设置,而我这就使用url字段记录一个网页链接,不同工作流活动对应不同的网页。
seq是每个工作流运行的顺序,从零开始,依次为0、1、2、3......,这个字段正是为了设置工作流的运行顺序,并行的工作流活动可以设置成相同的运行顺序。
可能有人会问怎么标识工作流活动已经完成呢,这个标识正是由statusBit状态位来实现的,每个申请表中都含有一个status字段,这个字段默认为50个‘0’组成的字符串,status字段是为了记录当前申请表哪些工作流活动完成了,1为完成0为未完成,statusBit状态位正是将工作流活动与申请表中的状态联系起来,也许有些朋友会认为让系统自动分配好更好,第一个工作流活动联系第一位状态,第二个工作流活动联系第二位状态,等等。
我这么做的好处是考虑到可能会有多个工作流活动只需完成其中一个活动就情况,就像逻辑判断中的“或”一样,在这种情况我们只需将多个工作流活动状态位设置成一样就可以达到目的了。
光说而没有实例可能有些朋友不太明白,下面我以项目中工作流流程为例:
本系统的流程是这样的(不好意思,linux下画的图效果没visio好):
由流程图得出各工作流实例如下:
IDNAMEURLSEQSTATUSBIT
1申请人提交申请表user_main.aspx01
2各部门审查depart_check.aspx12
3科技处审查check_main.aspx23
4教务处审查check_main.aspx24
5研究生院审查check_main.aspx25
6人事科审查check_main.aspx26
7人事处审查recheck.aspx37
8专家评议expert_main.aspx48
9完成聘用null59
想必由以上实例应该很容易看出流程图了,看到这应该明白了吧
下面是我的工作流类的c#实现:
UsingSystem;
UsingSystem.Web;
UsingSystem.Web.Services;
UsingSystem.Web.Services.Protocols;
UsingSystem.ComponentModel;
UsingSystem.Data;
UsingSystem.Data.SqlClient;
UsingSystem.Collections.Generic;
///<
summary>
///工作流类
/summary>
PublicclassWorkflow
Privateint_id;
///工作流编号
PublicintId
get{return_id;
set{_id=value;
Privatestring_name;
///工作流名字
PublicstringName
get{return_name;
set{_name=value;
Privatestring_url;
///工作流使用网页
PublicstringUrl
get{return_url;
set{_url=value;
Privateint_seq;
///工作流运行序号
PublicintSeq
get{return_seq;
set{_seq=value;
Privateint_statusBit;
///状态位
PublicintStatusBit
get{return_statusBit;
set{_statusBit=value;
PublicWorkflow()
PublicWorkflow(intid,stringname,stringurl,intseq,int
statusBit)
this.Id=id;
this.Name=name;
this.Url=url;
this.Seq=seq;
this.StatusBit=statusBit;
PublicWorkflow(SqlDataReaderdr)
this.Id=Convert.ToInt32(dr["
id"
]);
this.Name=dr["
name"
].ToString();
this.Url=dr["
url"
this.Seq=Convert.ToInt32(dr["
seq"
this.StatusBit=Convert.ToInt32(dr["
statusBit"
PublicintAdd()
stringprocName="
pr_AddWorkflow"
;
SqlParameter[]prams={new
SqlParameter("
@name"
SqlDbType.NVarChar,50),
new
@url"
SqlDbType.NVarChar,500),
@seq"
SqlDbType.Int),
@statusbit"
SqlDbType.Int)};
prams[0].Value=Name;
prams[1].Value=Url;
prams[2].Value=Seq;
prams[3].Value=StatusBit;
returnDatabase.runExecute(procName,prams);
PublicintDelete()
StringprocName="
pr_DeleteWorkflow"
@id"
SqlDbType.BigInt)};
prams[0].Value=Id;
PublicintUpdate()
pr_UpdateWorkflow"
SqlDbType.BigInt),
prams[1].Value=Name;
prams[2].Value=Url;
prams[3].Value=Seq;
prams[4].Value=StatusBit;
///根据工作流编号获得工作流信息
paramname="
>
工作流编号<
/param>
returns>
工作流信息<
/returns>
PublicstaticWorkflowGetWorkflowById(intid)
Workflowwl=newWorkflow();
pr_GetWorkflowById"
SqlParameter[]prams={new
@Id"
prams[0].Value=id;
SqlDataReaderdr=Database.runProcGetReader(procName,
prams);
while(dr.Read())
wl=newWorkflow(dr);
dr.Close();
returnwl;
///根据工作流编号获得工作流网页地址
paramRealName="
workflowId"
工作流网页地址<
PublicstaticstringGetWorkflowUrlById(intworkflowId)
pr_GetWorkflowUrlById"
@workflowId"
SqlDbType.NVarChar,500)};
prams[0].Value=workflowId;
prams[1].Direction=ParameterDirection.Output;
Database.runExecute(procName,prams);
returnprams[1].Value.ToString();
///返回工作流个数
工作流个数<
PublicstaticintGetWorkflowNum()
pr_GetWorkflowNum"
@num"
prams[0].Direction=ParameterDirection.Output;
ReturnConvert.ToInt32(prams[0].Value);
///设置申请表的工作流完成状态
reportId"
申请表编号<
status"
完成状态<
<
PublicstaticintSetActivityStatus(intreportId,intworkflowId,
boolstatus)
pr_SetActivityStatus"
@reportId"
@status"
SqlDbType.Bit)};
prams[0].Value=reportId;
prams[1].Value=workflowId;
prams[2].Value=status;
returnDatabase.runExecute(procName,prams);
///获得申请表的工作流完成状态
publicstaticboolGetActivityStatus(intreportId,int
workflowId)
pr_GetActivityStatus"
prams[2].Direction=ParameterDirection.Output;
ReturnConvert.ToBoolean(prams[2].Value);
///获得工作流中当前活动的下一批运行活动
当前活动编号<
下一批运行活动<
PublicstaticList<
Workflow>
GetNextWorkflow(intworkflowId)
List<
workflows=newList<
();
pr_GetNextWorkflow"
Workflowwf=newWorkflow(dr);
workflows.Add(wf);
returnworkflows;
///获得工作流中当前活动的上一批运行活动
上一批运行活动<
GetPreviousWorkflow(intworkflowId)
pr_GetPreviousWorkflow"
///判断申请表进行的上一批工作流是否完成
publicstaticboolIsPreviousWorkflowFinished(intworkflowId,
intreportId)
boolflag=true;
workflows=GetPreviousWorkflow(workflowId);
foreach(Workflowwfinworkflows)
stringstatus=Reports.GetCurrentStatusById(reportId);
if(status.Substring(wf.StatusBit-1,1)=="
0"
)
flag=false;
break;
returnflag;
///判断申请表进行的下一批工作流是否开始
publicstaticboolIsNextWorkflowStarted(intworkflowId,int
reportId)
boolflag=false;
workflows=GetNextWorkflow(workflowId);
1"
flag=true;
///获得工作流中第一个活动
第一个活动<
publicstaticWorkflowGetFirstActivity()
Workflowwf=newWorkflow();
pr_GetFirstActivity"
SqlDataReaderdr=Database.runProcGetReader(procName);
wf=newWorkflow(dr);
returnwf;
///获得工作流中最后一个活动
最后一个活动<
publicstaticWorkflowGetLastActivity()
pr_GetLastActivity"
wf=newWorkflow(dr);
DE>
///获得所有工作流活动
GetAllWorkflow()
workflows=newList<
pr_GetAllWorkflows"
workflows.Add(newWorkflow(dr));
///按运行顺序排序接口
PublicclassISortWorkflows:
IComparer<
PublicintCompare(Workflowx,Workflowy)
if(x.Seq<
y.Seq)return-1;
elseif(x.Seq>
y.Seq)return1;
elsereturn0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 Sharp工作流的实现 Sharp 工作流 实现