简单 C Sharp工作流的实现Word格式.docx

上传人:b****3 文档编号:8290753 上传时间:2023-05-10 格式:DOCX 页数:14 大小:17.92KB
下载 相关 举报
简单 C Sharp工作流的实现Word格式.docx_第1页
第1页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第2页
第2页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第3页
第3页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第4页
第4页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第5页
第5页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第6页
第6页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第7页
第7页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第8页
第8页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第9页
第9页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第10页
第10页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第11页
第11页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第12页
第12页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第13页
第13页 / 共14页
简单 C Sharp工作流的实现Word格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

简单 C Sharp工作流的实现Word格式.docx

《简单 C Sharp工作流的实现Word格式.docx》由会员分享,可在线阅读,更多相关《简单 C Sharp工作流的实现Word格式.docx(14页珍藏版)》请在冰点文库上搜索。

简单 C Sharp工作流的实现Word格式.docx

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;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2