.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生鲜电商平台-生鲜售后系统的退款架构设计与代码分享 说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售 ...
随机推荐
- Lua字符串库
1. 基础字符串函数: 字符串库中有一些函数非常简单,如: 1). string.len(s) 返回字符串s的长度: 2). string.rep(s,n) 返回字符串s重复n次的结 ...
- 谢欣伦 - OpenDev原创教程 - 无连接套接字类CxUdpSocket
这是一个精练的无连接套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxUdpSocket的使用如下(以某个叫做CSomeC ...
- Graph Cuts初步理解
一些知识点的初步理解_8(Graph Cuts,ing...) Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立 ...
- javaScript代码执行顺序
javaScript是一种描述型脚本语言,由浏览器进行动态的解析和执行. 页面加载过程中,浏览器会对页面上载入的每个js代码块进行扫描. JavaScript是一段一段的分析执行的,在分析执行同一段代 ...
- 【PC网站前端架构探讨系列】关于中小型PC网站前端架构方案的讨论与实践
目 录 1.遇到的问题 2.目标 3.探讨 4.架构设想 5.流程 6.初步实现 7.存在问题 8.最后 遇到的问题 我在这个系列上篇文章 已经讲解并开始逐步应用模块化思想,不知大家还记不记得,题 ...
- 关于type erasure
哇,好久没有写blog了,再不写的话,blog的秘密都要忘记了,嘿嘿. 最近在试着参与一个开源项目,名字叫avim(A Vibrate IM),别想多了哟.地址是:https://github.com ...
- 第一个Spring Boot Web程序
需要的环境和工具: 1.Eclipse2.Java环境(JDK 1.7或以上版本)3.Maven 3.0+(Eclipse已经内置了) 写个Hello Spring: 1.新建一个Maven项目,项目 ...
- BT客户端实现 Peer协议设计
与peer建立tcp连接后,首先发送handshake消息进行握手 handshake消息格式如下: 一个字节0x19 + 一个字符串'BitTorrent protocol' + 8 byte 保留 ...
- vs2015企业版和专业版秘钥
专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV 来自http://www.cnblogs.com/xuhongfe ...
- PMP--综合考试知识点,持续更新中。。。
1]盈亏平衡点=固定成本/(销售价格-可变成本). 2]项目管理(Project Management): 就是把各种知识.技能.手段和技术应用于项目活动之中,以达到项目的要求. 3]有效的管理要求项 ...