SharePoint 2013 状态机工作流之日常报销示例
简单介绍下状态机工作流,状态机工作流提供了一系列的状态。工作流从初始状态开始,到终止状态结束。两个状态之间定义行为进行过渡。通常情况下,状态机工作流对事件作出反应,事件的发生将会使状态发生改变。
1、新建项目,选择SharePoint解决方案,创建空项目:

2、选择调试站点,部署为场解决方案,如下图:

3、添加新项,选择“Office/SharePoint”下面的“状态机工作流(仅场解决方案)”:

4、选择列表工作流,修改工作流名称为“日常报销”:

5、选择调试时使用的列表,并选择任务列表和历史记录列表;如果项目创建完毕,想要修改调试列表,可以在工作流项目上右键属性;

6、选择工作流的启动方式,如下图:

7、修改Feature配置要部署的工作流:

8、然后回到开发界面,准备画流程图:

9、添加状态,并设置一个为“已完成状态”,同时右键重命名各个状态,如下图:

10、添加事件驱动并重命名,添加连接线:

11、在状态上右键,添加stateInitialization(用来CreatTask):

12、创建CreatTask,重命名并修改属性,添加Correlation Token和OwnerActivityName;

13、创建任务ID,如下图,记得选择创建字段,点击确定:

14、同任务ID创建任务属性,如下图:

15、双击CreatTask进入代码视图,给方法添加代码:
createJLTask_TaskId1 = Guid.NewGuid();
createJLTask_TaskProperties1.Title = "经理待审批";
createJLTask_TaskProperties1.AssignedTo = @"i:0#.w|sp\li.jing";
createJLTask_TaskProperties1.DueDate = DateTime.Now.AddDays(1.0);
createJLTask_TaskProperties1.ExtendedProperties.Add("状态", "已启动");
如上面代码,分别是任务ID、标题、分配人员、有效期和状态属性;

(createJLTask_MethodInvoking方法代码截图)
16、返回到设计视图,双击该状态的事件驱动,进入事件驱动的视图:
如下图,添加OnTaskChanged事件,监视任务变化,重命名;添加After/Before属性,类似上面任务ID,创建字段;修改Correlation Token和OwnerActivityName,和之前Task的相同即可;修改TaskId,修改为之前任务ID。

17、双击OnJLTaskChanged,添加方法代码:
onJLTaskChanged_AfterProperties1 = onJLTaskChanged.AfterProperties;
onJLTaskChanged_BeforeProperties1 = onJLTaskChanged.BeforeProperties;

(OnJLTaskChanged方法截图)
18、添加IF…ELSE…,如下图:

添加分支判断的代码条件,并为方法添加方法体:
方法如下,如果审批通过则走左侧分支,否则右侧分支;
public Guid TaskStatusFieldId = new Guid("55b29417-1042-47f0-9dff-ce8156667f96");
private void NextToZJL(object sender, ConditionalEventArgs e)
{
string strresult = onJLTaskChanged_AfterProperties1.ExtendedProperties[TaskStatusFieldId].ToString();
if (strresult == "已批准")
{
e.Result = true;
}
else
{
e.Result = false;
}
}
特:TaskStatusFieldId是ExtendedProperties的一个Key值,调试可以看到。
19、设置状态,如下图:

20、添加状态字段,如下图:

21、双击SetState创建方法:
private void setStateToJL_MethodInvoking(object sender, EventArgs e)
{
}
22、添加xml和扩展状态代码:

23、添加状态的枚举类型,如下图:
public enum SPWorkflowStatus
{
经理待审批 = ,
经理已拒绝 = ,
总经理待审批 = ,
总经理已拒绝 = ,
总裁待审批 = ,
总裁已拒绝 = ,
报销审批通过 = ,
Max =
}
24、完成刚刚创建的setStateToJL_MethodInvoking方法
setStateToJL_State1 = (Int32)SPWorkflowStatus.Max;

25、如此方法创建ZJLstateActivity、ZCstateActivity两个状态,在此不一一重复了,配置好的流程图,附后:

审批流程描述:
普通员工 – 经理审批 – 总经理审批 – 总裁审批;
经理 – 总经理审批 – 总裁审批;
总经理 – 总裁审批;
审批结果:
任意一级拒绝,工作流结束,状态为该级别拒绝;
审批通过,可以报销,状态为审批通过。
流程运行过程
1、新建一条报销;

2、 启动新的工作流;

3、查看工作流状态


4、 经理审批页面,如下图:

5、 经理审批后的状态,如下图:

6、 总经理审批后,总裁批准,如下图:

7、 总裁已批准,日常报销页面,如下图:

8、 总经理审批后,总裁批准,如下图:

9、 总裁已拒绝,日常报销页面,如下图:

结束语
以上,就是SharePoint 2013状态机工作流的简单示例,例子比较简单,希望大家不要吐槽,也希望能够给需要学习的人以参考。
其实,做工作流的过程,自己也经常吐槽,确实是一个痛苦的过程,接下来还想写表单来跑工作流,不知道还有没有耐心继续写下去了,呵呵,好了,不吐槽了,就这样吧。
总 结
因为截图比较仓促,很多地方可能介绍并不详细,特此做一个总结。SharePoint状态机工作流的设计过程:添加工作流状态 – 添加事件驱动 – 勾画流程图 – 添加工作流初始化 – 添加任务(CreatTask) - 事件驱动里添加OnTaskChanged事件 – 设置IF..ELSE等选择语句 – 设置流程结束状态。基本上就是这样一个过程,希望大家理解后再动手做。
回复一楼留言
简单修改下流程~

IF...ELSE分支加代码
private void IfMoneyBelow500(object sender, ConditionalEventArgs e)
{
if (Convert.ToInt32(workflowProperties.Item["报销金额"].ToString()) >= )
{
e.Result = true;
}
else
{
e.Result = false;
}
}
结果如下图:

代码下载SPStateMechineWorkFlow.rar~~
SharePoint 2013 状态机工作流之日常报销示例的更多相关文章
- SharePoint 2013 状态机工作流之扩展自定义状态
当我们使用SharePoint 2013的状态机工作流时,发现一个非常不爽的事情,就是SharePoint 所有的工作流状态,都是固定的那些,没办法显示我们自定义的状态,后来经过Google发现,原来 ...
- SharePoint 2013 状态机工作流之UpdateItemActivity
没什么可说的,一个Activity的使用介绍,其他类似的Activity也可以参考这个使用. 1.添加ApplyActivation和UpdateItemActivity,在onWorkflowAct ...
- SharePoint 2013 开发——工作流架构
博客地址:http://blog.csdn.net/FoxDave SharePoint 2013的工作流较之前有了不同,第一次真正地作为独立的服务的概念推出了.这意味着SharePoint工作流不再 ...
- SharePoint 2013 Designer工作流——Parallel Block的应用
参考目录 安装和配置SharePoint 2013 Workflow SharePoint 2013 实现多级审批工作流 在自定义Workflow时,往往会遇到这样场景,某个审批需要被多人查阅,每个查 ...
- 关于SharePoint 2013的工作流(一)
从去年开始,一直和SharePoint 2013工作流打交道.自己瞎摸索,以实现功能为目的.直到如今也不知道走的路是否正确. 一开始用WF4发现整个都不一样了,用的xaml无法写后端代码.Google ...
- 关于SharePoint 2013的工作流(二)
摸索完了如何画流程实现功能接下来,就是如何配置和部署了.在添加工作流之前,肯定需要一个审批人的配置以及阀值等等的配置. 这个的实现基本上和以前的工作流一致.写法却不一样了,模板自带的都是用js实现的. ...
- SharePoint 2013 入门教程
以下文章是自己在学习SharePoint的过程中,不断积累和总结的博文,现在总结一个目录,分享给大家.这个博客也是自己从SharePoint入门,到一个SharePoint开发的成长记录,里面记录的都 ...
- SharePoint 2013 入门教程--系列文章
转:http://www.cnblogs.com/jianyus/p/3381415.html 以下文章是自己在学习SharePoint的过程中,不断积累和总结的博文,现在总结一个目录,分享给大家.这 ...
- SharePoint 2013 入门教程 [不断更新~]
以下文章是自己在学习SharePoint的过程中,不断积累和总结的博文,现在总结一个目录,分享给大家.这个博客也是自己从SharePoint入门,到一个SharePoint开发的成长记录,里面记录的都 ...
随机推荐
- .NET平台开源项目速览(2)Compare .NET Objects对象比较组件
.NET平台开源项目速览今天介绍一款小巧强大的对象比较组件.可以更详细的获取2个对象的差别,并记录具体差别,比较过程和要求可以灵活配置. .NET开源目录:[目录]本博客其他.NET开源项目文章目录 ...
- Windws Server 2008 R2 WEB环境配置之MYSQL 5.6.22安装配置
版本选择 因为MySql的版本越来越多,而作为中小网站者可能没有足够的经济去购买商业版本,所以一般选择免费版,而且功能也是足够使用的. 有钱任性就下载企业版,哈哈. 目前使用最多的版本是mysql i ...
- Objective-C中的老板是这样发通知的(Notification)
通知(Notification)简单的类比一下,公司的老总给下面的员工发通知啦,说明天公司要上市,各部门做一下准备工作.等通知发完,各部门收到后各司其职,做着自己该做的东西.假如Boss是 ...
- 追根溯源:EntityFramework 实体的状态变化
阅读目录: 1. 应用场景 2. 场景测试 3. 问题分析 4. 追根溯源 5. 简要总结 1. 应用场景 首先,应用程序使用 EntityFramework,应用场景中有两个实体 S_Class(班 ...
- geotrellis使用(十八)导入多波段Tiff、读取多波段Tile
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 多波段数据导入 读取多波段瓦片 提取单波段 总结 一 ...
- mac使用终端运行mysql,mysql终端,mysql mac,mysql目录,mysql路径
首先去官网下载: http://www.mysql.com/downloads/ 我下载了5.6.11的dmg然后安装,安装完成之后..如果要用终端去玩SQL.那么一开始要输入很长的:/usr/loc ...
- 【jQuery小实例】js 插件 查看图片
---本系列文章所用使用js均可在本博客文件中找到. 像淘宝一样,鼠标放在某一件商品上,展示大图信息,甚至查看图片的具体部位.给人超炫的效果,这种效果实现基于js文件和js插件.大致可以分为三步,添加 ...
- HTTP图解(大牛必经之路)
本节内容 俗话说好的开发,底层知识必须过硬,不然再创新的技术,你也理解不深入,比如python web开发工程师,想要学习任何一个框架,底层都是http和socket,底层抓牢了,学起来会很轻松,所以 ...
- 整数压缩编码 ZigZag
在分析Avro源码时,发现Avro为了对int.long类型数据压缩,采用Protocol Buffers的ZigZag编码(Thrift也采用了ZigZag来压缩整数). 1. 补码编码 为了便于后 ...
- jQuery-1.9.1源码分析系列(十) 事件系统——事件体系结构
又是一个重磅功能点. 在分析源码之前分析一下体系结构,有助于源码理解.实际上在jQuery出现之前,Dean Edwards的跨浏览器AddEvent()设计做的已经比较优秀了:而且jQuery事件系 ...