.net之工作流工程展示及代码分享(二)工作流引擎

在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程、流程步骤、流程实例、流程步骤实例类。

流程类:

 1     [Serializable]
 2     public class Flow
 3     {
 4         [XmlAttribute]
 5         public Guid FlowId { get; set; }
 6         [XmlAttribute]
 7         public string FlowName { get; set; }
 8         public List<FlowStep> FlowSteps { get; set; }
 9         [XmlAttribute]
10         public string FlowCategory { get; set; }
11         [XmlAttribute]
12         public bool Enabled { get; set; }
13         [XmlAttribute]
14         public DateTime CreateDate { get; set; }
15         public Person Creator { get; set; }
16
17         public DateTime? CanRequestDateStart { get; set; }
18
19         public DateTime? CanRequestDateEnd { get; set; }
20
21         public string CreaterName
22         {
23             get
24             {
25                 if(Creator!=null)
26                 return Creator.PersonName;
27                 return string.Empty;
28             }
29         }
30         [XmlAttribute]
31         public Guid FormId { get; set; }
32         [XmlAttribute]
33         public string FormName { get; set; }
34         public WorkflowConstant.AccessMode AccessMode { get; set; }
35         [XmlAttribute]
36         public short PeriodTime { get; set; }
37         [XmlAttribute]
38         public string RequestRights { get; set; }
39         [XmlAttribute]
40         public string RequestGroup { get; set; }
41         public string AccessModeDesc
42         {
43             get
44             {
45                 switch (RequestRights)
46                 {
47                     case "-不限-":
48                         return "所有人";
49                     default:
50                         return RequestRights+": ";
51                 }
52             }
53         }
54
55         [XmlAttribute]
56         public string RoleGroups {
57             get
58             {
59                 if (!string.IsNullOrEmpty(RequestGroup))
60                 {
61                     return string.Join("、", RequestGroup.Split(‘,‘).Select(g => g.Split(‘|‘)[0]));
62                 }
63                 else
64                 {
65                     return string.Empty;
66                 }
67             }
68         }
69     }

流程步骤类:

 1     [Serializable]
 2     public class FlowStep
 3     {
 4         [XmlAttribute]
 5         public Guid StepId { get; set; }
 6         [XmlAttribute]
 7         public Guid PreviousStepId { get; set; }
 8         [XmlAttribute]
 9         public Guid NextStepId { get; set; }
10         [XmlAttribute]
11         public int SequenceId { get; set; }
12         [XmlAttribute]
13         public string StepName { get; set; }
14         [XmlAttribute]
15         public string RightGroupTitle { get; set; }
16         public List<Guid> CanWriteFormContolIds { get; set; }
17         [XmlAttribute]
18         public bool CanReturnToPreviousStep { get; set; }
19         [XmlAttribute]
20         public bool CanReturnToFirstStep { get; set; }
21         [XmlAttribute]
22         public bool AllowSelectAuditor { get; set; }
23         public WorkflowConstant.CounterSignatureMode CounterSignatureMode { get; set; }
24         [XmlAttribute]
25         public bool IsStartStep { get; set; }
26         [XmlAttribute]
27         public bool IsLastStep { get; set; }
28         [XmlAttribute]
29         public bool CanUploadFile { get; set; }
30         [XmlAttribute]
31         public bool MustUploadFile { get; set; }
32         [XmlAttribute]
33         public int UploadFileCount { get; set; }
34     }

流程实例类:

 1    [Serializable]
 2     public class FlowInstance
 3     {
 4         [XmlAttribute]
 5         public Guid FlowInstantId { get; set; }
 6         public Flow Flow { get; set; }
 7
 8         public List<FlowInstanceStep> FlowStepInstances { get; set; }
 9         public Person Creator { get; set; }
10         [XmlAttribute]
11         public DateTime CreateDate { get; set; }
12         [XmlAttribute]
13         public DateTime LastDealDate { get; set; }
14         [XmlAttribute]
15         public WorkflowConstant.SignatureStatus FlowStatus { get; set; }
16
17         public string FlowStatusName
18         {
19             get
20             {
21                 switch (FlowStatus)
22                 {
23                     case WorkflowConstant.SignatureStatus.Start:
24                         return "进行中";
25                         break;
26                     case WorkflowConstant.SignatureStatus.Undeal:
27                         return "未处理";
28                         break;
29                     case WorkflowConstant.SignatureStatus.PartialPassed:
30                         return "部分通过";
31                         break;
32                     case WorkflowConstant.SignatureStatus.Passed:
33                         return "通过";
34                         break;
35                     case WorkflowConstant.SignatureStatus.OutDated:
36                         return "过期";
37                         break;
38                     case WorkflowConstant.SignatureStatus.Canceled:
39                         return "取消";
40                         break;
41                     case WorkflowConstant.SignatureStatus.RejectToPreviousStep:
42                         return "退回上一步";
43                         break;
44                     case WorkflowConstant.SignatureStatus.RejectToFirstStep:
45                         return "退回第一步";
46                         break;
47                     case WorkflowConstant.SignatureStatus.Stopped:
48                         return "停止";
49                         break;
50                     case WorkflowConstant.SignatureStatus.Finish:
51                         return "结束";
52                         break;
53                     default:
54                         return string.Empty;
55                 }
56             }
57         }
58
59         public DateTime? EndDate
60         {
61             get
62             {
63                 if (Flow != null)
64                 {
65                     return CreateDate.AddDays(Flow.PeriodTime);
66                 }
67                 else return null;
68             }
69         }
70
71         public string CurrentStepDisplayName { get; set; }
72     }

流程步骤实例类:

 1     [Serializable]
 2     public class FlowInstanceStep
 3     {
 4         [XmlAttribute]
 5         public Guid StepInstanceId { get; set; }
 6         public List<WorkflowPersonSignature> PersonSignatures { get; set; }
 7
 8         public SerializableDictionary<Guid, string> WriteValues { get; set; }
 9
10         public FlowStep FlowStep { get; set; }
11         [XmlAttribute]
12         public DateTime CreateDate { get; set; }
13         [XmlAttribute]
14         public DateTime ProcessDate { get; set; }
15         [XmlAttribute]
16         public WorkflowConstant.SignatureStatus StepStatus { get; set; }
17         public List<AttachFile> FileList { get; set; }
18     }

设定好流程和步骤,以后每次建立的流程实例都是从流程获取到的。

本系列导航:

  1. .net之工作流工程展示及代码分享(预告)
  2. .net之工作流工程展示及代码分享(一)工作流表单
  3. .net之工作流工程展示及代码分享(二)工作流引擎
  4. .net之工作流工程展示及代码分享(三)数据存储引擎
  5. .net之工作流工程展示及代码分享(四)与其他系统集成
时间: 2024-11-05 04:52:33

.net之工作流工程展示及代码分享(二)工作流引擎的相关文章

.net之工作流工程展示及代码分享(一)工作流表单

Workflow表单的作用是能够在客户端进行表单设计,然后在流程中动态开放哪些输入框可以供用户填写. 在这里我扩展了一个常用的WebEditor工具——KindEditor,能够插入自定义的html符号,如下图: Form类如下: 1 public delegate string SetAutoCompleteValue(string autoCompleteType); 2 3 [Serializable] 4 public class Form 5 { 6 [XmlAttribute] 7

.net之工作流工程展示及代码分享(三)数据存储引擎

数据存储引擎是本项目里比较有特色的模块. 第一,使用接口来对应不同的数据库.数据库可以是Oracle.Sqlserver.MogoDB.甚至是XML文件.采用接口进行对应: 1 public interface IWorkflowDB 2 { 3 List<Flow> GetFlows(); 4 bool SaveFlow(Flow flow); 5 bool DeleteFlow(Guid flowId); 6 7 FlowInstance GetFlowInstanceByInstance

.net之工作流工程展示及代码分享(预告)

最近在帮公司做一个工作流程序模块,要求是可以嵌入到各种现有的程序中去.我想把自己制作的思路和过程同大家分享,也希望大家能够提出宝贵意见.共同进步. 先上一张结构图: 由于该项目我一个人做,所以系统结构不能太复杂.以后我会陆续把各模块的代码和大家共享. 预想写的章节为 整体架构 数据存储模块 工作流模块 和其它业务系统的集成

Duang~Duang~Duang 还在使用jsfiddle和jsbin做在线前端代码展示和演示吗? 试试更强大的在线代码分享工具吧!

传统的代码分享工具JSbin和JSfilddle jsfiddle和jsbin可能是前端开发中最早最常用的代码“把玩”工具,拥有大量的粉丝和用户,作为前端开发攻城师来说,我个人过去也常常使用. 不过作为国外的服务和产品,加载速度非常不理解,经常半天加载不上,如下图: 而且最重要的在于大量的CDN引用JS/CSS来自于Google CDN,大家也明白,天朝不再给Google发VISA啦,所有的Google域名下的服务或者文件都无法正常访问.除非你FQ!使用非常不流畅滴说!,如下图: 轻视频代码分享

一款WP小游戏代码分享

首先声明游戏是H5的代码,当然游戏部分不是我写的,感谢@LeZhi的分享,关于H5我还在学习,这里只是简单介绍一下如何把一款现成的H5游戏封装成一款WP游戏(当然也可以做成Windows游戏). 大家都知道,Windows App内置浏览器控件不支持flash,这样一来游戏资源少了好多(遗憾..),不过幸好现在H5游戏资源非常多,我们可以在网上找到很多代码,甚至可以用一个链接搞定(不推荐,用户体验很差的). 代码非常简单,估计大家的水平都木有问题,简单说几点:第一:WebView控件加载本地网页

Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享

说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售后问题,层出不穷,那么应该如何架构与设计呢?请看下文. 由于涉及到的东西比较多,目前只讲退款的架构设计与代码分享. 退款,是一个易造成负体验的业务产品.原因是商户对于退款的要求务必退款成功.高效.快,而且又得很好地支撑业务,否则就容易招来吐槽. 退款,一个看似简单,但充满复杂性的产品. 要想做好退款系统,我们必须深入的了解业务发展趋势,将客户诉求与现状业务结

codecombat之边远地区的森林31-44关代码分享

codecombat中国游戏网址: http://www.codecombat.cn/ 所有代码为javascript代码分享 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31.为援兵坚持住 // 食人魔正在爬悬崖 // 为集结民兵组织保护足够长时间的农民. loop { var flag = this.findFlag(); var enemy = this.findNearestEnemy(); if (flag) { // 捡旗子 this.pickUpFla

java计划任务调度框架quartz结合spring实现调度的配置实例代码分享

点击链接加入群[JavaEE(SSH+IntelliJIDE+Maven)]:http://jq.qq.com/?_wv=1027&k=L2rbHv 一:quartz简介 OpenSymphony 的Quartz提供了一个比较完美的任务调度解决方案. Quartz 是个开源的作业调度框架,定时调度器,为在 Java 应用程序中进行作业调度提供了简单却强大的机制. Quartz中有两个基本概念:作业和触发器.作业是能够调度的可执行任务,触发器提供了对作业的调度 二:quartz spring配置详

17款jQuery在线QQ客服代码分享

17款jQuery在线QQ客服代码分享给大家咯!!拿走,不谢,我叫雷锋~~ jQuery侧边栏点击展开收缩在线QQ客服代码 jQuery网页右侧固定层显示隐藏在线qq客服代码 jQuery点击按钮遮罩弹出在线QQ客服代码 jQuery带留言在线qq客服代码 绿色的jquery qq在线客服网页右侧固定层qq客服隐藏显示代码 蓝色的jquery固定div悬浮在线客服代码 jquery固定层网页侧边栏在线qq客服代码 jquery浮动在左侧的QQ客服代码 带有弹性可伸缩的在线客服代码 jquery右