SharePoint 2013 状态机工作流之日常报销示例

原文: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

{

经理待审批 = 0,

经理已拒绝 = 1,

总经理待审批 = 2,

总经理已拒绝 = 3,

总裁待审批 = 4,

总裁已拒绝 = 5,

报销审批通过 = 6,

Max = 15

}

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()) >= 500)
    {
        e.Result = true;
    }
    else
    {
        e.Result = false;
    }
}

   结果如下图:

  代码下载SPStateMechineWorkFlow.rar~~

时间: 2024-09-10 02:25:44

SharePoint 2013 状态机工作流之日常报销示例的相关文章

SharePoint 2013状态机工作流:日常报销示例

简单介绍下状态机工作流,状态机工作流提供了一系列的状态.工作流从初始状态开始,到终止状态结束.两个状态之间定义行为进行过渡.通常情况下,状态机工作流对事件作出反应,事件的发生将会使状态发生改变. 1.新建项目,选择SharePoint解决方案,创建空项目: 2.选择调试站点,部署为场解决方案,如下图: 3.添加新项,选择"Office/SharePoint"下面的"状态机工作流(仅场解决方案)": 4.选择列表工作流,修改工作流名称为"日常报销"

SharePoint 2013状态机工作流的扩展自定义状态

当我们使用SharePoint 2013的状态机工作流时,发现一个非常不爽的事情,就是SharePoint 所有的工作流状态,都是固定的那些,没办法显示我们自定义的状态,后来经过Google发现,原来这个状态是可以自定义的. 自定义状态步骤 1.修改xml添加MetaData下面的扩展项: <ExtendedStatusColumnValues>  <StatusColumnValue>测试状态1</StatusColumnValue>  <StatusColum

SharePoint 2013 状态机工作流之扩展自定义状态

当我们使用SharePoint 2013的状态机工作流时,发现一个非常不爽的事情,就是SharePoint 所有的工作流状态,都是固定的那些,没办法显示我们自定义的状态,后来经过Google发现,原来这个状态是可以自定义的. 自定义状态步骤 1.  修改xml添加MetaData下面的扩展项: <ExtendedStatusColumnValues>   <StatusColumnValue>测试状态1</StatusColumnValue>   <StatusC

SharePoint 2013 状态机工作流之UpdateItemActivity

没什么可说的,一个Activity的使用介绍,其他类似的Activity也可以参考这个使用. 1.添加ApplyActivation和UpdateItemActivity,在onWorkflowActivated1节点的下面,setStateActivity1节点的上面,如下图: 2.配置ApplyActivation的_Context,新建字段,记得是字段,不是属性: 3.配置ApplyActivation的_WorkflowProperties,选择已有的workflowProperties

SharePoint 2013状态机工作流之UpdateItemActivity

没什么可说的,一个Activity的使用介绍,其他类似的Activity也可以参考这个使用. 1.添加ApplyActivation和UpdateItemActivity,在onWorkflowActivated1节点的下面,setStateActivity1节点的上面,如下图: 2.配置ApplyActivation的_Context,新建字段,记得是字段,不是属性: 3.配置ApplyActivation的_WorkflowProperties,选择已有的workflowProperties

SharePoint 2013 Designer工作流:Parallel Block的应用

在自定义Workflow时,往往会遇到这样场景,某个审批需要被多人查阅,每个查阅的审批人之间互相独立,即彼此互不影响,简单来说就是:"一人通过,审批通过:一人拒绝,审批拒绝".这就像是中学物理中的并联电路,相对于串联电路,并联电路更加灵活. 在SharePoint Workflow中,也提供了类似并联电路的活动,即Parallel Block(并行程序块),在SharePoint Designer 2013中,位于工具栏中,如下所示: 要使用此活动也是很简单,接下来我以一个简单的入网申

SharePoint 2013 Search REST API的使用示例

在SharePoint2013中,提供Search REST service搜索服务,你可以在自己的客户端搜索方法或者移动应用程序中使用,该服务支持REST web request.你可以使用KeyWord Query Language(KQL)或者FAST Query Language(FQL)来对Search REST Service进行搜索查询,并且,试用与远程客户端应用程序.移动应用程序和其他应用程序. 一.Search REST service 支持方式: Search REST se

SharePoint 2013 入门教程

原文:SharePoint 2013 入门教程 以下文章是自己在学习SharePoint的过程中,不断积累和总结的博文,现在总结一个目录,分享给大家.这个博客也是自己从SharePoint入门,到一个SharePoint开发的成长记录,里面记录的都是成长的足迹.在学习的过程中,有过疑惑,有过放弃,有过懊恼,但是经过不断的积累和努力,还是收获颇丰.希望自己把学习过程中的点滴,分享给即将或者已经走入SharePoint的人们,给你们带来帮助. 当然,有些博客是参考其它人的总结,或者对于MSDN示例的

SharePoint 2013 工作流之Visual Studio开发示例篇

原文:SharePoint 2013 工作流之Visual Studio开发示例篇 SharePoint 2013引用了WF4.0 Foundation,支持使用Designer和Visio进行设计,但是功能受限,而Visual Studio可以开发功能更加丰富的工作流,下面我们简单举个例子. 1.本例使用的是VS 2013版本,新建一个SharePoint空项目: 2.部署为服务器场解决方案,如下图: 3.添加新项,选择工作流模板,如下图: 4.本例选择列表工作流,当然你按照自己的需要选择: