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

流程类:

     [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; }
}

这几个类使用了“贫血模型”

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

本系列导航:

  1. .net之工作流工程展示及代码分享(预告)
  2. .net之工作流工程展示及代码分享(一)工作流表单
  3. .net之工作流工程展示及代码分享(二)工作流引擎
  4. .net之工作流工程展示及代码分享(三)数据存储引擎
  5. .net之工作流工程展示及代码分享(四)主控制类
  6. .net之工作流工程展示及代码分享(五)前端交互

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

  1. .net之工作流工程展示及代码分享(四)主控制类

    现在应该讲主控制类了,为了不把系统弄得太复杂,所以就用一个类作为主要控制类(服务类),作为前端.后端.业务逻辑的控制类. WorkflowService类的类图如下: 该类的构造函数: public ...

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

    数据存储引擎是本项目里比较有特色的模块. 特色一,使用接口来对应不同的数据库.数据库可以是Oracle.Sqlserver.MogoDB.甚至是XML文件.采用接口进行对应: public inter ...

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

    Workflow表单的作用是能够在客户端进行表单设计,然后在流程中动态开放哪些输入框可以供用户填写. 在这里我扩展了一个常用的WebEditor工具——KindEditor,能够插入自定义的html符 ...

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

    最近在帮公司做一个工作流程序模块,要求是可以嵌入到各种现有的程序中去.我想把自己制作的思路和过程同大家分享. 先上一张结构图: 由于该项目我一个人做,所以系统结构不能太复杂. 用到的技术主要有:DDD ...

  5. net之工作流工程展示及代码分享(记录)

    http://www.cnblogs.com/thanks/p/4183235.html

  6. JAVA基础代码分享--DVD管理

    问题描述 为某音像店开发一个迷你DVD管理器,最多可存6张DVD,实现碟片的管理. 管理器具备的功能主要有: 1.查看DVD信息. 菜单选择查看功能,展示DVD的信息. 2.新增DVD信息 选择新增功 ...

  7. 一款WP小游戏代码分享

    首先声明游戏是H5的代码,当然游戏部分不是我写的,感谢@LeZhi的分享,关于H5我还在学习,这里只是简单介绍一下如何把一款现成的H5游戏封装成一款WP游戏(当然也可以做成Windows游戏). 大家 ...

  8. Unity多媒体展示项目经验分享-ImageEffect+动态绑定

    Unity多媒体展示项目经验分享-ImageEffect+动态绑定+网络通信 <ignore_js_op> “海尔科技展墙”是去年年初我们为上海家电博览会制作的一个多媒体展项,有限的工期以 ...

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

    Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享 说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售 ...

随机推荐

  1. Spring—Quartz定时调度CronTrigger时间配置格式的实例

    格式说明:[秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小 ...

  2. Android:Activity生命周期

    Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack). 栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新 ...

  3. java并发编程(六)Runnable和Thread实现多线程的区别

    http://blog.csdn.net/ns_code/article/details/17161237

  4. 局域网内利用gitlab,jenkins自动生成gitbook并发布(nginx)

    安装了GitBook,内网使用,没法用上gitbook的网页. 用gitbook serve只能展示一本书,而且也不利于长期维护. 于是使用gitlab,jenkins,和nginx配合gitbook ...

  5. 使用 SVN Hook 实现服务器端代码自动更新

    之前的做法是客户端提交代码之后,再去服务器端项目中 svn up 一下来更新代码,让服务器端的项目更新到最新版本.可以编写一个 post-commit 钩子脚本来实现服务器端代码的自动更新,它在 SV ...

  6. 下载更新文件后,调用安装器自动安装apk文件

    在更新操作时,下载新apk之后,往往需要自动安装新apk,用以下代码即可安装下载在本地的apk文件(apkFile) Intent intent = new Intent(); intent.setA ...

  7. 刷新本地的DNS缓存数据

    ipconfig /flushdns”执行,刷新本地的DNS缓存数据. ipconfig /displaydns      查看本地DNS缓存记录的命令为:ipconfig /displaydns.你 ...

  8. 简单实用JSTL标签库

    1. JSTL标签库是一个什么东东? 简单来说,有了它你就可以在类似HTML的JSP页面里面运用一些高级语法,实现迭代.条件判断.XML文档操作.国际化标签.SQL标签. 2. 如何使用 ? 参考网址 ...

  9. 总结-java

    Java核心技术总结 1.借用jar包编译java文件 javac -cp servlet-api.jar -d . HelloServlet.java

  10. java 操作Excel表 创建 查看 修改

    需要用到jxl.jar包  修改有两种方法一种是jxl的  另一种需要apache.poi包 package excelChuLi; import java.io.File; import java. ...