当前位置: 首页 > 编程日记 > 正文

.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     }
View Code

流程步骤类:

 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     }
View Code

流程实例类:

 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     }
View Code

流程步骤实例类:

 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     }
View Code

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

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

本系列导航:

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

转载于:https://www.cnblogs.com/thanks/p/4305884.html

相关文章:

11.CCNA第十一天-配置OSPF/EIGRP(增强型内部网关协议)

配置OSPFBranch(config)#router ospf ?<1-65535> Process ID通配符掩码在IGP协议中&#xff0c;以连续的0和连续的1组成有一种不科学的称呼&#xff08;反掩码&#xff09;Branch#show running-config | section router ospfrouter ospf 10network 10.1.0.0 0.0.255.25…

Electio Time poj

第一次用结构体&#xff0c;写些自己的心得&#xff1a; #include<stdio.h> #include<algorithm> using namespace std; #define MAX 50000 struct COW //定义结构体&#xff0c;&#xff08;由于在cmp&#xff08;&#xff09;函数里需要用到结构体名&#xf…

浙江大学软件学院2020年保研上机模拟练习 7-3 Partial School Ranking

并查集的使用时注意&#xff1a; 1. 合并两个结点是 F[sa] sb 而不是 sb F[sa]&#xff0c;想一下含义。 2. 给每个结点赋予其自身为父节点时&#xff0c;要先判断它的父节点是不是0&#xff0c;也许已经有了。 我把照片里其他同学的成绩赋值为0&#xff0c;但是应该考虑到…

小米:开源不仅要站在巨人的肩膀上,还要为巨人指方向

今天上午&#xff0c;第一届小米开源技术峰会在北京举行&#xff0c;会上&#xff0c;小米人工智能与云平台副总裁崔宝秋致开场词&#xff0c;并发表了《小米开源之路》的演讲。 崔宝秋强调小米一直在推动开源&#xff0c;也是开源的倡导者。他告诉我们雷军创立小米的其中一个重…

微软企业库4.1学习笔记(七)创建对象 续集1

3.2使用Unity模块创建企业库对象 下面介绍如何使用前面的方法获取企业库对象的实例。代码示例如下 IUnityContainer containter newUnityContainer(); containter.AddNewExtension<EnterpriseLibraryCoreExtension>();首先创建一个Unity容器&#xff0c;并且添…

如何把 XML 文件显示为 HTML 表格

如何把 XML 文件显示为 HTML 表格 <html><head><script type"text/javascript">var xmlhttp; function loadXMLDoc(url){xmlhttpnull;if (window.XMLHttpRequest) {// code for IE7, Firefox, Mozilla, etc. xmlhttpnew XMLHttpRequest(); }else i…

浙江大学软件学院2020年保研上机模拟练习 7-2 Distance of Triples

思路一&#xff1a; 3个数组都按照小到大排序&#xff0c;设置3个指针&#xff0c;起始都在数组的末尾&#xff0c;如果1个指针向前移动1位可以让对应元素和另两个数组元素的距离之和减小&#xff0c;则移动它。如果某一回合三个指针都没动&#xff0c;就跳出循环。 非满分&a…

docker的分层

docker的分层 Contents docker的层docker的层是怎么来的docker是如何区分这些层 docker镜像是如何区分这些层的docker的层在本地的存储 vfsdevicemapperdocker的层 在这里&#xff0c;我们首先做一个样例&#xff0c;样例设定为一个镜像D。当然&#xff0c;这个D镜像不是单层&a…

《跟菜鸟学Cisco UC部署实战》-第 1 章 规划-课件(一共12章,免费)

链接:https://pan.baidu.com/s/1RiIphSUG5dsbPPqWaynHjQ 提取码:xjp9 复制这段内容后打开百度网盘手机App,操作更方便哦 《跟菜鸟学Cisco UC部署实战》-视频课程http://edu.51cto.com/course/10031.html 《Skype for Business Server 2015-企业外部-部署》视频课程http://ed…

UpdateDate()函数的作用

UpdateData(true); 用窗体上控件中的内容来更新和控件相关连的变量的值&#xff08;只能更新value类型的变量&#xff09; 例如&#xff1a;你在你的窗体中有一个Edit控件&#xff0c;为这个控件关联了CString类型的变量m_strName; 你在控件中添入内容之后&#xf…

1021 Deepest Root

要解决两大问题&#xff1a; 1. 数包含几个连通分量 2. 如何找到最深结点 注意&#xff1a;connected components的意思是连通分量 问题1我用并查集解决 问题2转化为如何得到每个结点的深度 值得注意之处是对于问题2来说&#xff0c;下图是测试用例1给出的树 可以看出从1…

一段处理百分数的js代码

function percent(s, e, i){s Number(s), isNaN(s) && (s "0");var n "%";return e !1 && (n ""), parseFloat((100 * s).toFixed(i)) n } s 需要处理的数字 e 是否显示百分号(%) true 或 false i 保留几位小数 转载于:h…

js字符串如何倒序

1. var reverse function( str ){ var newStr , i str.length; for(; i > 0; i--) { newStr str.charAt(i); } return newStr; };reverse(abcde) 2. var reverse function( str ){ return str.split().reverse().join(); }; 3.&#xff08;类似法2&#xff09; var rev…

Windows Phone 7 Tip (4) -- User Agent

The user agent for IE on Windows Phone 7 running on the Asus Galaxy device is:Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6 source转载于:https://www.cnblogs.com/midshipman/archive/2010/04/29/1723416.html

vs2010 学习Silverlight学习笔记(7):控件样式与模板

概要&#xff1a; 终于知道Silverlight——App.xaml是干什么用的了&#xff0c;不仅可以用来封装样式&#xff08;类似css&#xff09;&#xff0c;还可以制定控件模版。。。好强大的功能啊。 封装&#xff1a; 继续学习《一步一步学Silverlight 2系列&#xff08;8&#xff09…

MinGW-notepad++开发c/c++程序

下载MinGW 点击下载 安装好后运行 最后点击左上角的 Installation,开始安装 1.编译&#xff1a; g -o a.exe a.cpp gcc -o hello.exe hello.c 2.运行&#xff1a; ./a.exe 转载于:https://www.cnblogs.com/feilongblog/p/4315636.html

re:Invent大会第四天:为什么Lambda值得你更多关注?

2018年11月29日的拉斯维加斯&#xff0c;AWS re:Invent大会进入第四天&#xff0c;上午照例由AWS CTO Werner Vogels带来主题演讲。 从主题演讲之前到主题演讲之后&#xff0c;改变最大的产品毫无疑问就是Lambda&#xff0c;有至少8个相关的最新发布。Vogels在2014年正式对外发…

1145 Hashing - Average Search Time

目录 思路 样例解释 AC代码 思路 要做出这道题必须直到除留余数法和平方探测法的原理。 除此之外有两个注意点&#xff1a; 1. 在查找时&#xff0c;如果当前位置上不是要找的数会继续找下去(如果k没超过表长的话)&#xff0c;但是如果当前位置上是0&#xff0c;说明表里…

C#和Java的闭包-Jon谈《The Beauty of Closures》

第一段略。。。 大多数讲闭包的文章都是说函数式语言&#xff0c;因为它们往往对闭包的支持最完善。当你在使用函数式语言时&#xff0c;很可能已经清楚了解了什么是闭包&#xff0c;所以我想写一篇在经典OO语言出现的闭包有什么用处应该也是很合适的事情。这篇文章我准备讲一下…

谷歌浏览器输入框背景颜色变黄的解决方案

2019独角兽企业重金招聘Python工程师标准>>> input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:focus { box-shadow:0 0 0 60px #eee inset; -webkit-text-fill-color: #878787; } 转载于:https://my.oschina.net/kitty0107/blog/296…

男人最不该做的7件事

1.没有目标 2.浪费时间 3.不独立 4.被动地活着 5.不规划自己的人生 6.不学习吸收信息 7.不接受爱情转载于:https://www.cnblogs.com/jiu0821/p/4315660.html

1085 Perfect Sequence

明确题目的核心是要找到 找到第一个满足 M > m*p 的M的下标。然后用该下标减去起点的下标即为序列元素个数。 二分区间应当是M所有可能的取值范围。起点是i1&#xff0c;终点是N而不是N-1&#xff0c;虽然A[N]上无元素。注意啊&#xff0c;原题要找的M是小于等于m*p的&…

[笔记]Go语言在Linux环境下输出彩色字符

Go语言要打印彩色字符与Linux终端输出彩色字符类似&#xff0c;以黑色背景高亮绿色字体为例&#xff1a; fmt.Printf("\n %c[1;40;32m%s%c[0m\n\n", 0x1B, "testPrintColor", 0x1B) 其中0x1B是标记&#xff0c;[开始定义颜色&#xff0c;1代表高亮&#xf…

javascript中this那些事

定义 this是函数执行的上下文。 调用方式 1. 作为函数调用&#xff0c;指向window&#xff08;严格模式报undefined的错&#xff09;。 var namehello; function a() { console.log(this.name) } a(); //hellovar c{ name:haha, d: function(){ a(); } } c.d(…

java序列化的作用-这个挺有用的,不妨学学

http://bbs.tech.ccidnet.com/read.php?tid249048 最近在阅读Core J2EE Patterns 的时候发现例子里用于在各个层次里进行传输的TO&#xff08;Data Transfer Object&#xff09;都实现了java.io.Serializable接口&#xff0c;看到这些偶突然感到茅塞顿开&#xff5e;困扰了很久…

二分法典例:木棒切割问题

Input : 输入木棒根数n&#xff0c;要得到的等长木棒数量K&#xff0c;以及n根木棒的长度。 Output : 等长木棒的最大长度。 用二分法求解这道题&#xff0c;首先要找到以得到的等长木棒数量为因变量、等长木棒长度为自变量函数。 int getK(int l){//随着l增大&#xff0c;返…

对Android 开发者有益的 40 条优化建议(转)

下面是开始Android编程的好方法&#xff1a; 找一些与你想做事情类似的代码 调整它&#xff0c;尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题对每个你像添加的特征重复上述过程。这种方法能够激励你&#xff0c;因为你在保持不断迭代&#xff0c;不经意中你学到…

英语语法总结--连词

连词 连词是一种虚词&#xff0c; 它不能独立担任句子成分而只起连接词与词&#xff0c;短语与短语以及句与句的作用。连词主要可分为两类&#xff1a;并列连词和从属连词。并列连词用来连接平行的词、词组和分 句。如&#xff1a;and, but, or, nor, so, therefore, yet, howe…

开放平台鉴权以及OAuth2.0介绍

OAuth 2.0 协议 OAuth是一个开发标准&#xff0c;允许用户授权第三方网站或应用访问他们存储在另外的服务提供者上的信息&#xff0c;而不需要将用户名和密码提供给第三方网站或分享他们数据的内容。OAuth 2.0不兼容1.0。协议的参与者 RO (resource owner): 资源所有者&#xf…