工作流引擎设计关键技术的实现
2021-06-16
来源:步旅网
108 鄂州大学学报 第22卷 State=…’auto=・’yes”bmName=…‘actor-=…’> <transfer from=”职能部门审批开始”to=”教务处” name=”to教务”valid=””,> if(tion.Class!=…’){tion.AddO',// ̄转移实例添加到数 据库中 act.App=tion;l】} 活动添加到容器的流程实例列表的相应流程实例中 <transfer from='’职能部门审批开始”to=”财务处” name=”to财务”valid=…’,> WFContainer.InstancesList.Find(name=>f if name.Id <transfer from=”职能部门审批开始”to=”资产管理处” name=”to资产”valid=””,> </activity> <activity Name=”结束”Type=”end”State=””auto=”yes” braname=””actor=-””,> /<process> XML解析器的作用是对工作流定义文档进行解析,生 成一个过程实例并添加到过程实例列表中。其实现方法为: void Parse(int id) {XmlDocument xmlDoc=new XmlDocument 0;//定义 一个XML文档对象 //加载XML文件到XML文档对象 xmlDoc.Load (HttpContext.Current.Server.MapPath C pmcessXML.xml”)); ,,在加载的XML文档对象中找到process节点 XmlNode xn=xmlDoc.SelectSingleNode(”process”); XmlNodeList xnl=xn.ChildNodes;//获取process节点的 所有子节点 foreach fXmlNode xnf in xnl1 fActivity act:new Activity0;//构建活动实例 act.Instance.irD=id; ,,以下为activity表添加数据 XmlElement xe=(XmlElement)xnf; act.Name=xe.GetAttribute(”Name”);,,从xML文档中读 取活动的属性 int activityID=act.Add0;//将活动实例添加到数据库中 XmlNodeList xnf1=xe.ChildNodes;//从XML文档中读 取活动的之节点 foreach(XmlNode xn2 in xnf1)( XmlElement xel=fXmlElement)xn2; if(xe1.Name==”transfer”){//如果节点是转移 Transfer ts=new Transfer0; ts.Act_ID=activityID; ts.From=xe1.GetAttribute(”from”);,/从XML文档中读 取转移的属性 ts.To=xe1.GetAttribute(”to”); ts.Add0;//将转移实例添加到数据库中 act.Tranfers.Add(ts);//将转移添加到活动的转移列表中l if(xeI.Name:=”applicaton”)(//如果之节点是应用 程序 Application tion=new Application0; tion.Act ID =activitylD; _==id){return true;l return false;1).Acts.Add(act);}l 3应用程序的接口和应用程序的调用 首先定义一个接口.其实现为 interface Actionlnterface {void Handle(Activity act); l 再把应用程序编译为.dl1文件。把该文件保存在Plugin 文件夹下。活动节点通过反射机制读取.dll文件,执行其程 序。方法为: void InvokeMethod(string dll,Activiyt act) {stirng path=…’; path=AppDomain.CurrentDomain.BaseDirectory+”plu- gin\\’’; stirng[】files=Directory.GetFiles(path); foreach(stirng ifle in ifles) Iif le.ToUpper0.EndsWith(".DLL”))I {Assembly ab=Assembly.oLadFrom(ifle);,,载入dll Type[】types=ab.GetTypes0; foreach(Type t in types){ ,/如果某些类实现了预定义的Actionlnterface接口,则 认为该类是主程序的插件 if(t.Getlnterface(”Actionlnterface”)!=nul1){ object obj=ab.Createlnstance(t.FullName); object[】para={act l; Methodlnfo onHandle=t.GetMethodf.thandle”1: onHandle.Invoke(obj,para);lJ l】 4事件驱动的设计 工作流的流转采用了事件驱动机制。事件驱动机制在 一个对象的状态发生变化时,能够及时通知其他对象,使其 根据事件的不同作出不同的反映。在这里,一旦活动发出 “准备就绪”事件,过程实例对象就立即运行活动的执行程 序;程序执行完毕(或手工执行完毕),活动又发出“运行完 毕”的事件,过程实例对象在收到此消息后,执行路由程序, 找出下一个活动节点.并将其状态有“原始状态”改写为“准 备就绪”,重复前面的过程DI。 ,/声明Initiated事件 public delegate void InitiatedChangedEventHandler(ob— ject sender,MyEventArgs e); public event InitiatedChangedEventHandler StateInitiat- edChanged; protected virtual void 0nStateInitiatedChange(MyEven- tArgs e) {if(StatelnitiatedChanged!=nul1)StateInitiatedChanged (this,e);} public string State {Setl{if(value!=一state)) 第5期 foldState=一state;一state=value; 葛中泽:工作流引擎设计关键技术的实现 _l09 void aetStateInitiatedChanged(object sender,MyEven- MyEventArgs myEventArgs=new MyEventArgs(oldState, 一tArgs e) {Activity a=((Activity)sender); ,/定义事件处理器,处理状态Initiated事件 NodeHandlerManager handler=new NodeHandlerMan— state); if(oldState!=null&&value==”initiated”)OnStatelniti- atedChange(myEventArgs); if(oldState!=null&&value==”completed”、OnState— ager0; CompletedChange(myEventArgs);}l handler.NodeRun(a); } Get{return_state;ll ,/定义一个事件参数 public partial class MyEventArgs:System.EventArgs {private stirng oldState; private string newState; public MyEventArgs(string oldState,string newState) {this.oldState=oldState;this.newState=newState;) public string NewState(get{return this.newState;}l public stirng OldState{get{return this.oldState;}ll 在过程实例中实例化活动,处理活动状态改变的事件 代码为: ,,添加活动到过程实例 public void AddActivity(Activity act){ ,,为act活动的状态改变添加事件处理方法? act.StateInitiatedChanged +: new Activity.Initiated. ChangedEventHandler(act_StateInitiatedChanged); (上接第9l页) 认为恋爱是婚姻必经阶段。她们表现出了对婚姻的谨慎态 度,将以后夫妻二人的事业发展、家庭稳定等作为婚姻长 久的考虑范围。 (--)90后藏族大学生婚恋观的特点 9O后藏族大学生的婚恋观体现出以下特点:首先,传 统与非传统的互补。几乎受访的所有大学生虽然生活在现 代化气息浓郁的大学校园里,平时在校园里也会经常看见 卿卿我我的情侣。但他们不支持大学生谈恋爱,认为这样 做很浪费时间。据分析,这是因为学习负担过重的原因,一 般情况下。从少数民族地区考入的少数民族大学生除了学 习自己的专业课以外。还要学习主流文化知识,即汉语言 知识.还要考许多证书。所以会比汉族学生学习负担重,压 力也相应较大。其次。男女性别差异显著。通过访谈互动发 现.90后藏族男女大学生对于恋爱与婚姻之间的关系认识 差异很大。女生对恋爱、婚姻持有认真的态度,认为恋爱是 进入婚姻阶段必经的过程,且把恋爱作为自己人生计划的 一部分。而藏族男大学生对待恋爱的态度普遍没有女大学 生谨慎.认为恋爱和婚姻并不存在必然的关系,结婚或进 入婚姻时更会听从家长的意见和安排。 综上所述.90后藏族大学生的婚恋观是比较健康理智 5结束语 本文以.net作为开发平台,详细介绍了工作流引擎设计 中用到的一些关键技术。以鄂州职业大学报告审批流程为例 介绍了工作流的建模及对应的XML文件,讲解了XML解析 器的设计代码,给出了应用程序是如何通过反射机制被调用 的过程,最后陈述了工作流事件驱动机制以及实现的方法。 爹考文献: 【1】方木云,刘辉.高级软件工程【M】.北京:清华大学出版社, 201 1:240—257. 【2】王凯,张毅坤,杨凯峰,等.面向OA系统的工作流引擎研 发【J].计算机工程与设计,2008(10):4967-4970. 【3】葛中泽.一种高效工作流引擎的设计【J].制造业自动化, 2014(5):11-15. (责任编校:朱立文) 的,且具有民族特性,他们都不支持在校大学生结婚,认为 会影响学业。而且不论男生还是女生都认为家庭和事业同 样重要,这打破了以往男性以事业为重、女性以家庭为重的 传统观念,说明即使在藏族文化传统下,女主内的现象已经 在慢慢改变,体现了社会的进步,也体现了现代少数民族女 性追求成功、要求脱离繁重的家庭劳动、走向独立的精神。 总的说来,处在社会文化转型期的9o后藏族大学生的婚恋 观正处于调整转变期.呈现出明显的多元格局。大体上与社 会文化转型、价值观念重塑的历史主流相适应,是被社会肯 定和接受的。 参考文献: 【1】温蓉.当代大学生婚恋观的现状及其分析——以西北民 族大学为例[J】.河北北方学院学报(社会科学版),201 1(3): 74-77. 【2]Merriam,S.Qualitative Research and Case Study Applica- tions in Education[M】.San Francisco:Jossey—Bass.1998:6-7. 【3】陈向明.质的研究方法与社会科学研究【M】.北京:教育科 学出版社.2000:12. (责任编校:李青云)