.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 }
这几个类使用了“贫血模型”
设定好流程和步骤,以后每次建立的流程实例都是从流程获取到的。
本系列导航:
作者:thanks
微信:-
QQ:305380844
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。