.net之工作流工程展示及代码分享(二)工作流引擎
在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程、流程步骤、流程实例、流程步骤实例类。
流程类:
[Serializable]
public class Flow
{
[XmlAttribute]
public Guid FlowId { get; set; }
[XmlAttribute]
public string FlowName { get; set; }
public List<FlowStep> FlowSteps { get; set; }
[XmlAttribute]
public string FlowCategory { get; set; }
[XmlAttribute]
public bool Enabled { get; set; }
[XmlAttribute]
public DateTime CreateDate { get; set; }
public Person Creator { get; set; } public DateTime? CanRequestDateStart { get; set; } public DateTime? CanRequestDateEnd { get; set; } public string CreaterName
{
get
{
if(Creator!=null)
return Creator.PersonName;
return string.Empty;
}
}
[XmlAttribute]
public Guid FormId { get; set; }
[XmlAttribute]
public string FormName { get; set; }
public WorkflowConstant.AccessMode AccessMode { get; set; }
[XmlAttribute]
public short PeriodTime { get; set; }
[XmlAttribute]
public string RequestRights { get; set; }
[XmlAttribute]
public string RequestGroup { get; set; }
public string AccessModeDesc
{
get
{
switch (RequestRights)
{
case "-不限-":
return "所有人";
default:
return RequestRights+": ";
}
}
} [XmlAttribute]
public string RoleGroups {
get
{
if (!string.IsNullOrEmpty(RequestGroup))
{
return string.Join("、", RequestGroup.Split(',').Select(g => g.Split('|')[]));
}
else
{
return string.Empty;
}
}
}
}
流程步骤类:
[Serializable]
public class FlowStep
{
[XmlAttribute]
public Guid StepId { get; set; }
[XmlAttribute]
public Guid PreviousStepId { get; set; }
[XmlAttribute]
public Guid NextStepId { get; set; }
[XmlAttribute]
public int SequenceId { get; set; }
[XmlAttribute]
public string StepName { get; set; }
[XmlAttribute]
public string RightGroupTitle { get; set; }
public List<Guid> CanWriteFormContolIds { get; set; }
[XmlAttribute]
public bool CanReturnToPreviousStep { get; set; }
[XmlAttribute]
public bool CanReturnToFirstStep { get; set; }
[XmlAttribute]
public bool AllowSelectAuditor { get; set; }
public WorkflowConstant.CounterSignatureMode CounterSignatureMode { get; set; }
[XmlAttribute]
public bool IsStartStep { get; set; }
[XmlAttribute]
public bool IsLastStep { get; set; }
[XmlAttribute]
public bool CanUploadFile { get; set; }
[XmlAttribute]
public bool MustUploadFile { get; set; }
[XmlAttribute]
public int UploadFileCount { get; set; }
}
流程实例类:
[Serializable]
public class FlowInstance
{
[XmlAttribute]
public Guid FlowInstantId { get; set; }
public Flow Flow { get; set; } public List<FlowInstanceStep> FlowStepInstances { get; set; }
public Person Creator { get; set; }
[XmlAttribute]
public DateTime CreateDate { get; set; }
[XmlAttribute]
public DateTime LastDealDate { get; set; }
[XmlAttribute]
public WorkflowConstant.SignatureStatus FlowStatus { get; set; } public string FlowStatusName
{
get
{
switch (FlowStatus)
{
case WorkflowConstant.SignatureStatus.Start:
return "进行中";
break;
case WorkflowConstant.SignatureStatus.Undeal:
return "未处理";
break;
case WorkflowConstant.SignatureStatus.PartialPassed:
return "部分通过";
break;
case WorkflowConstant.SignatureStatus.Passed:
return "通过";
break;
case WorkflowConstant.SignatureStatus.OutDated:
return "过期";
break;
case WorkflowConstant.SignatureStatus.Canceled:
return "取消";
break;
case WorkflowConstant.SignatureStatus.RejectToPreviousStep:
return "退回上一步";
break;
case WorkflowConstant.SignatureStatus.RejectToFirstStep:
return "退回第一步";
break;
case WorkflowConstant.SignatureStatus.Stopped:
return "停止";
break;
case WorkflowConstant.SignatureStatus.Finish:
return "结束";
break;
default:
return string.Empty;
}
}
} public DateTime? EndDate
{
get
{
if (Flow != null)
{
return CreateDate.AddDays(Flow.PeriodTime);
}
else return null;
}
} public string CurrentStepDisplayName { get; set; }
}
流程步骤实例类:
[Serializable]
public class FlowInstanceStep
{
[XmlAttribute]
public Guid StepInstanceId { get; set; }
public List<WorkflowPersonSignature> PersonSignatures { get; set; } public SerializableDictionary<Guid, string> WriteValues { get; set; } public FlowStep FlowStep { get; set; }
[XmlAttribute]
public DateTime CreateDate { get; set; }
[XmlAttribute]
public DateTime ProcessDate { get; set; }
[XmlAttribute]
public WorkflowConstant.SignatureStatus StepStatus { get; set; }
public List<AttachFile> FileList { get; set; }
}
这几个类使用了“贫血模型”
设定好流程和步骤,以后每次建立的流程实例都是从流程获取到的。
本系列导航:
- .net之工作流工程展示及代码分享(预告)
- .net之工作流工程展示及代码分享(一)工作流表单
- .net之工作流工程展示及代码分享(二)工作流引擎
- .net之工作流工程展示及代码分享(三)数据存储引擎
- .net之工作流工程展示及代码分享(四)主控制类
- .net之工作流工程展示及代码分享(五)前端交互
.net之工作流工程展示及代码分享(二)工作流引擎的更多相关文章
- .net之工作流工程展示及代码分享(四)主控制类
现在应该讲主控制类了,为了不把系统弄得太复杂,所以就用一个类作为主要控制类(服务类),作为前端.后端.业务逻辑的控制类. WorkflowService类的类图如下: 该类的构造函数: public ...
- .net之工作流工程展示及代码分享(三)数据存储引擎
数据存储引擎是本项目里比较有特色的模块. 特色一,使用接口来对应不同的数据库.数据库可以是Oracle.Sqlserver.MogoDB.甚至是XML文件.采用接口进行对应: public inter ...
- .net之工作流工程展示及代码分享(一)工作流表单
Workflow表单的作用是能够在客户端进行表单设计,然后在流程中动态开放哪些输入框可以供用户填写. 在这里我扩展了一个常用的WebEditor工具——KindEditor,能够插入自定义的html符 ...
- .net之工作流工程展示及代码分享(预告)
最近在帮公司做一个工作流程序模块,要求是可以嵌入到各种现有的程序中去.我想把自己制作的思路和过程同大家分享. 先上一张结构图: 由于该项目我一个人做,所以系统结构不能太复杂. 用到的技术主要有:DDD ...
- net之工作流工程展示及代码分享(记录)
http://www.cnblogs.com/thanks/p/4183235.html
- JAVA基础代码分享--DVD管理
问题描述 为某音像店开发一个迷你DVD管理器,最多可存6张DVD,实现碟片的管理. 管理器具备的功能主要有: 1.查看DVD信息. 菜单选择查看功能,展示DVD的信息. 2.新增DVD信息 选择新增功 ...
- 一款WP小游戏代码分享
首先声明游戏是H5的代码,当然游戏部分不是我写的,感谢@LeZhi的分享,关于H5我还在学习,这里只是简单介绍一下如何把一款现成的H5游戏封装成一款WP游戏(当然也可以做成Windows游戏). 大家 ...
- Unity多媒体展示项目经验分享-ImageEffect+动态绑定
Unity多媒体展示项目经验分享-ImageEffect+动态绑定+网络通信 <ignore_js_op> “海尔科技展墙”是去年年初我们为上海家电博览会制作的一个多媒体展项,有限的工期以 ...
- Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享
Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享 说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售 ...
随机推荐
- Windows OS上安装运行Apache Kafka教程
Windows OS上安装运行Apache Kafka教程 下面是分步指南,教你如何在Windows OS上安装运行Apache Zookeeper和Apache Kafka. 简介 本文讲述了如何在 ...
- Mongoose 的实例方法中访问静态方法
方法比较简单,也比较粗糙和丑陋,就是通过构造函数来访问静态方法,大致如下: 123456789 WorkSpaceSchema.methods.getPrice = function(startTim ...
- *HDU1829 并查集
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- python字符串前面加r
在Python的string前面加上'r', 是为了告诉编译器这个string是个raw string,不要转意backslash '\' . 例如,\n 在raw string中,是两个字符,\和n ...
- 怎么使用CKEDITOR
出于工作需求,自己在网上找了个文本编辑器控件, 网址是http://ckeditor.com/ 怎么使用? 先插入脚本<script type="text/javascript&quo ...
- Android 学习路线图
- Mac&iOS之多线程--转自http://geeklu.com/2012/02/thread/
http://geeklu.com/2012/02/thread/ 首先循环体的开始需要检测是否有需要处理的事件,如果有则去处理,如果没有则进入睡眠以节省CPU时间. 所以重点便是这个需要处理的事件, ...
- 点单登录原理和java实现简单的单点登录
引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...
- 接口测试之基于LoadRunner的一个简单示例
这几天一直在捣鼓接口测试,以下总结一下: 1.什么是接口测试:接口是指系统模块与模块之间或者系统与系统之间进行交互,一般我们用的多的是HTTP协议的接口.WebService协议的接口.还有RPC(R ...
- iOS程序上传流程 2014年9月最新版
程序上传步骤: 1.登录账户,点击Manage Your Apps 2.点击Add New App 3.注册Bundle ID,点击蓝色的here 4.进入了注册页面,首先要填写App ID的一个描述 ...