.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生鲜电商平台-生鲜售后系统的退款架构设计与代码分享 说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售 ...
随机推荐
- Spring—Quartz定时调度CronTrigger时间配置格式的实例
格式说明:[秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小 ...
- Android:Activity生命周期
Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack). 栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新 ...
- java并发编程(六)Runnable和Thread实现多线程的区别
http://blog.csdn.net/ns_code/article/details/17161237
- 局域网内利用gitlab,jenkins自动生成gitbook并发布(nginx)
安装了GitBook,内网使用,没法用上gitbook的网页. 用gitbook serve只能展示一本书,而且也不利于长期维护. 于是使用gitlab,jenkins,和nginx配合gitbook ...
- 使用 SVN Hook 实现服务器端代码自动更新
之前的做法是客户端提交代码之后,再去服务器端项目中 svn up 一下来更新代码,让服务器端的项目更新到最新版本.可以编写一个 post-commit 钩子脚本来实现服务器端代码的自动更新,它在 SV ...
- 下载更新文件后,调用安装器自动安装apk文件
在更新操作时,下载新apk之后,往往需要自动安装新apk,用以下代码即可安装下载在本地的apk文件(apkFile) Intent intent = new Intent(); intent.setA ...
- 刷新本地的DNS缓存数据
ipconfig /flushdns”执行,刷新本地的DNS缓存数据. ipconfig /displaydns 查看本地DNS缓存记录的命令为:ipconfig /displaydns.你 ...
- 简单实用JSTL标签库
1. JSTL标签库是一个什么东东? 简单来说,有了它你就可以在类似HTML的JSP页面里面运用一些高级语法,实现迭代.条件判断.XML文档操作.国际化标签.SQL标签. 2. 如何使用 ? 参考网址 ...
- 总结-java
Java核心技术总结 1.借用jar包编译java文件 javac -cp servlet-api.jar -d . HelloServlet.java
- java 操作Excel表 创建 查看 修改
需要用到jxl.jar包 修改有两种方法一种是jxl的 另一种需要apache.poi包 package excelChuLi; import java.io.File; import java. ...